@agentspec/sidecar 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +183 -0
- package/dist/chunk-KCNUMVLW.js +10008 -0
- package/dist/chunk-KCNUMVLW.js.map +1 -0
- package/dist/embed.d.ts +87 -0
- package/dist/embed.js +11 -0
- package/dist/embed.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +161 -0
- package/dist/index.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/string.js","../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.mjs","../../sdk/src/schema/manifest.schema.ts","../../sdk/src/schema/json-schema.ts","../../sdk/src/loader/resolvers.ts","../../sdk/src/loader/index.ts","../../sdk/src/loader/migrations/v1alpha1-to-v1.ts","../../sdk/src/loader/migrations/index.ts","../../sdk/src/health/checks/env.check.ts","../../sdk/src/health/checks/model.check.ts","../../sdk/src/health/checks/mcp.check.ts","../../sdk/src/health/checks/memory.check.ts","../../sdk/src/health/checks/secret.check.ts","../../sdk/src/health/checks/service.check.ts","../../sdk/src/health/index.ts","../../sdk/src/audit/rules/model.rules.ts","../../sdk/src/audit/rules/security.rules.ts","../../sdk/src/audit/rules/memory.rules.ts","../../sdk/src/audit/rules/evaluation.rules.ts","../../sdk/src/audit/rules/observability.rules.ts","../../sdk/src/audit/rules/metadata.rules.ts","../../sdk/src/audit/index.ts","../../sdk/src/generate/index.ts","../../sdk/src/agent/usage-ledger.ts","../../sdk/src/agent/reporter.ts","../../sdk/src/agent/adapters/fastify.ts","../../sdk/src/agent/adapters/express.ts","../src/config.ts","../src/control-plane/proof.ts","../src/control-plane/index.ts","../src/control-plane/agent-probe.ts","../src/control-plane/health.ts","../src/control-plane/capabilities.ts","../src/control-plane/mcp.ts","../src/control-plane/audit.ts","../src/control-plane/explain.ts","../src/control-plane/explore.ts","../src/control-plane/eval.ts","../src/control-plane/opa-client.ts","../src/control-plane/gap.ts","../src/control-plane/events.ts","../src/control-plane/usage-probe.ts","../src/control-plane/usage.ts","../src/audit-ring.ts"],"sourcesContent":["export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\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 processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?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// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[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// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?: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])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\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 dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(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 { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\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 { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n /**\n * `c` was changed to `[cC]` to replicate /i flag\n */\n cuid: /^[cC][^\\s-]{8,}$/,\n cuid2: /^[0-9a-z]+$/,\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n /**\n * `a-z` was added to replicate /i flag\n */\n email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n /**\n * Constructed a valid Unicode RegExp\n *\n * Lazily instantiate since this type of regex isn't supported\n * in all envs (e.g. React Native).\n *\n * See:\n * https://github.com/colinhacks/zod/issues/2433\n * Fix in Zod:\n * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n */\n emoji: () => {\n if (emojiRegex === undefined) {\n emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n }\n return emojiRegex;\n },\n /**\n * Unused\n */\n uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n /**\n * Unused\n */\n 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])$/,\n ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n /**\n * Unused\n */\n ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n nanoid: /^[a-zA-Z0-9_-]{21}$/,\n jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n const res = {\n type: \"string\",\n };\n if (def.checks) {\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"email\":\n switch (refs.emailStrategy) {\n case \"format:email\":\n addFormat(res, \"email\", check.message, refs);\n break;\n case \"format:idn-email\":\n addFormat(res, \"idn-email\", check.message, refs);\n break;\n case \"pattern:zod\":\n addPattern(res, zodPatterns.email, check.message, refs);\n break;\n }\n break;\n case \"url\":\n addFormat(res, \"uri\", check.message, refs);\n break;\n case \"uuid\":\n addFormat(res, \"uuid\", check.message, refs);\n break;\n case \"regex\":\n addPattern(res, check.regex, check.message, refs);\n break;\n case \"cuid\":\n addPattern(res, zodPatterns.cuid, check.message, refs);\n break;\n case \"cuid2\":\n addPattern(res, zodPatterns.cuid2, check.message, refs);\n break;\n case \"startsWith\":\n addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n break;\n case \"endsWith\":\n addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n break;\n case \"datetime\":\n addFormat(res, \"date-time\", check.message, refs);\n break;\n case \"date\":\n addFormat(res, \"date\", check.message, refs);\n break;\n case \"time\":\n addFormat(res, \"time\", check.message, refs);\n break;\n case \"duration\":\n addFormat(res, \"duration\", check.message, refs);\n break;\n case \"length\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"includes\": {\n addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n break;\n }\n case \"ip\": {\n if (check.version !== \"v6\") {\n addFormat(res, \"ipv4\", check.message, refs);\n }\n if (check.version !== \"v4\") {\n addFormat(res, \"ipv6\", check.message, refs);\n }\n break;\n }\n case \"base64url\":\n addPattern(res, zodPatterns.base64url, check.message, refs);\n break;\n case \"jwt\":\n addPattern(res, zodPatterns.jwt, check.message, refs);\n break;\n case \"cidr\": {\n if (check.version !== \"v6\") {\n addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n }\n if (check.version !== \"v4\") {\n addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n }\n break;\n }\n case \"emoji\":\n addPattern(res, zodPatterns.emoji(), check.message, refs);\n break;\n case \"ulid\": {\n addPattern(res, zodPatterns.ulid, check.message, refs);\n break;\n }\n case \"base64\": {\n switch (refs.base64Strategy) {\n case \"format:binary\": {\n addFormat(res, \"binary\", check.message, refs);\n break;\n }\n case \"contentEncoding:base64\": {\n setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n break;\n }\n case \"pattern:zod\": {\n addPattern(res, zodPatterns.base64, check.message, refs);\n break;\n }\n }\n break;\n }\n case \"nanoid\": {\n addPattern(res, zodPatterns.nanoid, check.message, refs);\n }\n case \"toLowerCase\":\n case \"toUpperCase\":\n case \"trim\":\n break;\n default:\n ((_) => { })(check);\n }\n }\n }\n return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n return refs.patternStrategy === \"escape\"\n ? escapeNonAlphaNumeric(literal)\n : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n let result = \"\";\n for (let i = 0; i < source.length; i++) {\n if (!ALPHA_NUMERIC.has(source[i])) {\n result += \"\\\\\";\n }\n result += source[i];\n }\n return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n if (schema.format || schema.anyOf?.some((x) => x.format)) {\n if (!schema.anyOf) {\n schema.anyOf = [];\n }\n if (schema.format) {\n schema.anyOf.push({\n format: schema.format,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { format: schema.errorMessage.format },\n }),\n });\n delete schema.format;\n if (schema.errorMessage) {\n delete schema.errorMessage.format;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.anyOf.push({\n format: value,\n ...(message &&\n refs.errorMessages && { errorMessage: { format: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"format\", value, message, refs);\n }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n if (!schema.allOf) {\n schema.allOf = [];\n }\n if (schema.pattern) {\n schema.allOf.push({\n pattern: schema.pattern,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { pattern: schema.errorMessage.pattern },\n }),\n });\n delete schema.pattern;\n if (schema.errorMessage) {\n delete schema.errorMessage.pattern;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.allOf.push({\n pattern: stringifyRegExpWithFlags(regex, refs),\n ...(message &&\n refs.errorMessages && { errorMessage: { pattern: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n if (!refs.applyRegexFlags || !regex.flags) {\n return regex.source;\n }\n // Currently handled flags\n const flags = {\n i: regex.flags.includes(\"i\"),\n m: regex.flags.includes(\"m\"),\n s: regex.flags.includes(\"s\"), // `.` matches newlines\n };\n // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n const source = flags.i ? regex.source.toLowerCase() : regex.source;\n let pattern = \"\";\n let isEscaped = false;\n let inCharGroup = false;\n let inCharRange = false;\n for (let i = 0; i < source.length; i++) {\n if (isEscaped) {\n pattern += source[i];\n isEscaped = false;\n continue;\n }\n if (flags.i) {\n if (inCharGroup) {\n if (source[i].match(/[a-z]/)) {\n if (inCharRange) {\n pattern += source[i];\n pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n inCharRange = false;\n }\n else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n pattern += source[i];\n inCharRange = true;\n }\n else {\n pattern += `${source[i]}${source[i].toUpperCase()}`;\n }\n continue;\n }\n }\n else if (source[i].match(/[a-z]/)) {\n pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n continue;\n }\n }\n if (flags.m) {\n if (source[i] === \"^\") {\n pattern += `(^|(?<=[\\r\\n]))`;\n continue;\n }\n else if (source[i] === \"$\") {\n pattern += `($|(?=[\\r\\n]))`;\n continue;\n }\n }\n if (flags.s && source[i] === \".\") {\n pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n continue;\n }\n pattern += source[i];\n if (source[i] === \"\\\\\") {\n isEscaped = true;\n }\n else if (inCharGroup && source[i] === \"]\") {\n inCharGroup = false;\n }\n else if (!inCharGroup && source[i] === \"[\") {\n inCharGroup = true;\n }\n }\n try {\n new RegExp(pattern);\n }\n catch {\n console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n return regex.source;\n }\n return pattern;\n}\n","\n/*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT */\nfunction isNothing(subject) {\n return (typeof subject === 'undefined') || (subject === null);\n}\n\n\nfunction isObject(subject) {\n return (typeof subject === 'object') && (subject !== null);\n}\n\n\nfunction toArray(sequence) {\n if (Array.isArray(sequence)) return sequence;\n else if (isNothing(sequence)) return [];\n\n return [ sequence ];\n}\n\n\nfunction extend(target, source) {\n var index, length, key, sourceKeys;\n\n if (source) {\n sourceKeys = Object.keys(source);\n\n for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n key = sourceKeys[index];\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n\nfunction repeat(string, count) {\n var result = '', cycle;\n\n for (cycle = 0; cycle < count; cycle += 1) {\n result += string;\n }\n\n return result;\n}\n\n\nfunction isNegativeZero(number) {\n return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);\n}\n\n\nvar isNothing_1 = isNothing;\nvar isObject_1 = isObject;\nvar toArray_1 = toArray;\nvar repeat_1 = repeat;\nvar isNegativeZero_1 = isNegativeZero;\nvar extend_1 = extend;\n\nvar common = {\n\tisNothing: isNothing_1,\n\tisObject: isObject_1,\n\ttoArray: toArray_1,\n\trepeat: repeat_1,\n\tisNegativeZero: isNegativeZero_1,\n\textend: extend_1\n};\n\n// YAML error class. http://stackoverflow.com/questions/8458984\n\n\nfunction formatError(exception, compact) {\n var where = '', message = exception.reason || '(unknown reason)';\n\n if (!exception.mark) return message;\n\n if (exception.mark.name) {\n where += 'in \"' + exception.mark.name + '\" ';\n }\n\n where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')';\n\n if (!compact && exception.mark.snippet) {\n where += '\\n\\n' + exception.mark.snippet;\n }\n\n return message + ' ' + where;\n}\n\n\nfunction YAMLException$1(reason, mark) {\n // Super constructor\n Error.call(this);\n\n this.name = 'YAMLException';\n this.reason = reason;\n this.mark = mark;\n this.message = formatError(this, false);\n\n // Include stack trace in error object\n if (Error.captureStackTrace) {\n // Chrome and NodeJS\n Error.captureStackTrace(this, this.constructor);\n } else {\n // FF, IE 10+ and Safari 6+. Fallback for others\n this.stack = (new Error()).stack || '';\n }\n}\n\n\n// Inherit from Error\nYAMLException$1.prototype = Object.create(Error.prototype);\nYAMLException$1.prototype.constructor = YAMLException$1;\n\n\nYAMLException$1.prototype.toString = function toString(compact) {\n return this.name + ': ' + formatError(this, compact);\n};\n\n\nvar exception = YAMLException$1;\n\n// get snippet for a single line, respecting maxLength\nfunction getLine(buffer, lineStart, lineEnd, position, maxLineLength) {\n var head = '';\n var tail = '';\n var maxHalfLength = Math.floor(maxLineLength / 2) - 1;\n\n if (position - lineStart > maxHalfLength) {\n head = ' ... ';\n lineStart = position - maxHalfLength + head.length;\n }\n\n if (lineEnd - position > maxHalfLength) {\n tail = ' ...';\n lineEnd = position + maxHalfLength - tail.length;\n }\n\n return {\n str: head + buffer.slice(lineStart, lineEnd).replace(/\\t/g, '→') + tail,\n pos: position - lineStart + head.length // relative position\n };\n}\n\n\nfunction padStart(string, max) {\n return common.repeat(' ', max - string.length) + string;\n}\n\n\nfunction makeSnippet(mark, options) {\n options = Object.create(options || null);\n\n if (!mark.buffer) return null;\n\n if (!options.maxLength) options.maxLength = 79;\n if (typeof options.indent !== 'number') options.indent = 1;\n if (typeof options.linesBefore !== 'number') options.linesBefore = 3;\n if (typeof options.linesAfter !== 'number') options.linesAfter = 2;\n\n var re = /\\r?\\n|\\r|\\0/g;\n var lineStarts = [ 0 ];\n var lineEnds = [];\n var match;\n var foundLineNo = -1;\n\n while ((match = re.exec(mark.buffer))) {\n lineEnds.push(match.index);\n lineStarts.push(match.index + match[0].length);\n\n if (mark.position <= match.index && foundLineNo < 0) {\n foundLineNo = lineStarts.length - 2;\n }\n }\n\n if (foundLineNo < 0) foundLineNo = lineStarts.length - 1;\n\n var result = '', i, line;\n var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;\n var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);\n\n for (i = 1; i <= options.linesBefore; i++) {\n if (foundLineNo - i < 0) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo - i],\n lineEnds[foundLineNo - i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),\n maxLineLength\n );\n result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n' + result;\n }\n\n line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);\n result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n';\n result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\\n';\n\n for (i = 1; i <= options.linesAfter; i++) {\n if (foundLineNo + i >= lineEnds.length) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo + i],\n lineEnds[foundLineNo + i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),\n maxLineLength\n );\n result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n';\n }\n\n return result.replace(/\\n$/, '');\n}\n\n\nvar snippet = makeSnippet;\n\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n 'kind',\n 'multi',\n 'resolve',\n 'construct',\n 'instanceOf',\n 'predicate',\n 'represent',\n 'representName',\n 'defaultStyle',\n 'styleAliases'\n];\n\nvar YAML_NODE_KINDS = [\n 'scalar',\n 'sequence',\n 'mapping'\n];\n\nfunction compileStyleAliases(map) {\n var result = {};\n\n if (map !== null) {\n Object.keys(map).forEach(function (style) {\n map[style].forEach(function (alias) {\n result[String(alias)] = style;\n });\n });\n }\n\n return result;\n}\n\nfunction Type$1(tag, options) {\n options = options || {};\n\n Object.keys(options).forEach(function (name) {\n if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n throw new exception('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n }\n });\n\n // TODO: Add tag format check.\n this.options = options; // keep original options in case user wants to extend this type later\n this.tag = tag;\n this.kind = options['kind'] || null;\n this.resolve = options['resolve'] || function () { return true; };\n this.construct = options['construct'] || function (data) { return data; };\n this.instanceOf = options['instanceOf'] || null;\n this.predicate = options['predicate'] || null;\n this.represent = options['represent'] || null;\n this.representName = options['representName'] || null;\n this.defaultStyle = options['defaultStyle'] || null;\n this.multi = options['multi'] || false;\n this.styleAliases = compileStyleAliases(options['styleAliases'] || null);\n\n if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n throw new exception('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n }\n}\n\nvar type = Type$1;\n\n/*eslint-disable max-len*/\n\n\n\n\n\nfunction compileList(schema, name) {\n var result = [];\n\n schema[name].forEach(function (currentType) {\n var newIndex = result.length;\n\n result.forEach(function (previousType, previousIndex) {\n if (previousType.tag === currentType.tag &&\n previousType.kind === currentType.kind &&\n previousType.multi === currentType.multi) {\n\n newIndex = previousIndex;\n }\n });\n\n result[newIndex] = currentType;\n });\n\n return result;\n}\n\n\nfunction compileMap(/* lists... */) {\n var result = {\n scalar: {},\n sequence: {},\n mapping: {},\n fallback: {},\n multi: {\n scalar: [],\n sequence: [],\n mapping: [],\n fallback: []\n }\n }, index, length;\n\n function collectType(type) {\n if (type.multi) {\n result.multi[type.kind].push(type);\n result.multi['fallback'].push(type);\n } else {\n result[type.kind][type.tag] = result['fallback'][type.tag] = type;\n }\n }\n\n for (index = 0, length = arguments.length; index < length; index += 1) {\n arguments[index].forEach(collectType);\n }\n return result;\n}\n\n\nfunction Schema$1(definition) {\n return this.extend(definition);\n}\n\n\nSchema$1.prototype.extend = function extend(definition) {\n var implicit = [];\n var explicit = [];\n\n if (definition instanceof type) {\n // Schema.extend(type)\n explicit.push(definition);\n\n } else if (Array.isArray(definition)) {\n // Schema.extend([ type1, type2, ... ])\n explicit = explicit.concat(definition);\n\n } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {\n // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] })\n if (definition.implicit) implicit = implicit.concat(definition.implicit);\n if (definition.explicit) explicit = explicit.concat(definition.explicit);\n\n } else {\n throw new exception('Schema.extend argument should be a Type, [ Type ], ' +\n 'or a schema definition ({ implicit: [...], explicit: [...] })');\n }\n\n implicit.forEach(function (type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n\n if (type$1.loadKind && type$1.loadKind !== 'scalar') {\n throw new exception('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.');\n }\n\n if (type$1.multi) {\n throw new exception('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.');\n }\n });\n\n explicit.forEach(function (type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n });\n\n var result = Object.create(Schema$1.prototype);\n\n result.implicit = (this.implicit || []).concat(implicit);\n result.explicit = (this.explicit || []).concat(explicit);\n\n result.compiledImplicit = compileList(result, 'implicit');\n result.compiledExplicit = compileList(result, 'explicit');\n result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);\n\n return result;\n};\n\n\nvar schema = Schema$1;\n\nvar str = new type('tag:yaml.org,2002:str', {\n kind: 'scalar',\n construct: function (data) { return data !== null ? data : ''; }\n});\n\nvar seq = new type('tag:yaml.org,2002:seq', {\n kind: 'sequence',\n construct: function (data) { return data !== null ? data : []; }\n});\n\nvar map = new type('tag:yaml.org,2002:map', {\n kind: 'mapping',\n construct: function (data) { return data !== null ? data : {}; }\n});\n\nvar failsafe = new schema({\n explicit: [\n str,\n seq,\n map\n ]\n});\n\nfunction resolveYamlNull(data) {\n if (data === null) return true;\n\n var max = data.length;\n\n return (max === 1 && data === '~') ||\n (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL'));\n}\n\nfunction constructYamlNull() {\n return null;\n}\n\nfunction isNull(object) {\n return object === null;\n}\n\nvar _null = new type('tag:yaml.org,2002:null', {\n kind: 'scalar',\n resolve: resolveYamlNull,\n construct: constructYamlNull,\n predicate: isNull,\n represent: {\n canonical: function () { return '~'; },\n lowercase: function () { return 'null'; },\n uppercase: function () { return 'NULL'; },\n camelcase: function () { return 'Null'; },\n empty: function () { return ''; }\n },\n defaultStyle: 'lowercase'\n});\n\nfunction resolveYamlBoolean(data) {\n if (data === null) return false;\n\n var max = data.length;\n\n return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) ||\n (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE'));\n}\n\nfunction constructYamlBoolean(data) {\n return data === 'true' ||\n data === 'True' ||\n data === 'TRUE';\n}\n\nfunction isBoolean(object) {\n return Object.prototype.toString.call(object) === '[object Boolean]';\n}\n\nvar bool = new type('tag:yaml.org,2002:bool', {\n kind: 'scalar',\n resolve: resolveYamlBoolean,\n construct: constructYamlBoolean,\n predicate: isBoolean,\n represent: {\n lowercase: function (object) { return object ? 'true' : 'false'; },\n uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; },\n camelcase: function (object) { return object ? 'True' : 'False'; }\n },\n defaultStyle: 'lowercase'\n});\n\nfunction isHexCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) ||\n ((0x41/* A */ <= c) && (c <= 0x46/* F */)) ||\n ((0x61/* a */ <= c) && (c <= 0x66/* f */));\n}\n\nfunction isOctCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */));\n}\n\nfunction isDecCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */));\n}\n\nfunction resolveYamlInteger(data) {\n if (data === null) return false;\n\n var max = data.length,\n index = 0,\n hasDigits = false,\n ch;\n\n if (!max) return false;\n\n ch = data[index];\n\n // sign\n if (ch === '-' || ch === '+') {\n ch = data[++index];\n }\n\n if (ch === '0') {\n // 0\n if (index + 1 === max) return true;\n ch = data[++index];\n\n // base 2, base 8, base 16\n\n if (ch === 'b') {\n // base 2\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (ch !== '0' && ch !== '1') return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'x') {\n // base 16\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isHexCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'o') {\n // base 8\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isOctCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n }\n\n // base 10 (except 0)\n\n // value should not start with `_`;\n if (ch === '_') return false;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isDecCode(data.charCodeAt(index))) {\n return false;\n }\n hasDigits = true;\n }\n\n // Should have digits and should not end with `_`\n if (!hasDigits || ch === '_') return false;\n\n return true;\n}\n\nfunction constructYamlInteger(data) {\n var value = data, sign = 1, ch;\n\n if (value.indexOf('_') !== -1) {\n value = value.replace(/_/g, '');\n }\n\n ch = value[0];\n\n if (ch === '-' || ch === '+') {\n if (ch === '-') sign = -1;\n value = value.slice(1);\n ch = value[0];\n }\n\n if (value === '0') return 0;\n\n if (ch === '0') {\n if (value[1] === 'b') return sign * parseInt(value.slice(2), 2);\n if (value[1] === 'x') return sign * parseInt(value.slice(2), 16);\n if (value[1] === 'o') return sign * parseInt(value.slice(2), 8);\n }\n\n return sign * parseInt(value, 10);\n}\n\nfunction isInteger(object) {\n return (Object.prototype.toString.call(object)) === '[object Number]' &&\n (object % 1 === 0 && !common.isNegativeZero(object));\n}\n\nvar int = new type('tag:yaml.org,2002:int', {\n kind: 'scalar',\n resolve: resolveYamlInteger,\n construct: constructYamlInteger,\n predicate: isInteger,\n represent: {\n binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); },\n octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); },\n decimal: function (obj) { return obj.toString(10); },\n /* eslint-disable max-len */\n hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); }\n },\n defaultStyle: 'decimal',\n styleAliases: {\n binary: [ 2, 'bin' ],\n octal: [ 8, 'oct' ],\n decimal: [ 10, 'dec' ],\n hexadecimal: [ 16, 'hex' ]\n }\n});\n\nvar YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +\n // .2e4, .2\n // special case, seems not from spec\n '|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' +\n // .inf\n '|[-+]?\\\\.(?:inf|Inf|INF)' +\n // .nan\n '|\\\\.(?:nan|NaN|NAN))$');\n\nfunction resolveYamlFloat(data) {\n if (data === null) return false;\n\n if (!YAML_FLOAT_PATTERN.test(data) ||\n // Quick hack to not allow integers end with `_`\n // Probably should update regexp & check speed\n data[data.length - 1] === '_') {\n return false;\n }\n\n return true;\n}\n\nfunction constructYamlFloat(data) {\n var value, sign;\n\n value = data.replace(/_/g, '').toLowerCase();\n sign = value[0] === '-' ? -1 : 1;\n\n if ('+-'.indexOf(value[0]) >= 0) {\n value = value.slice(1);\n }\n\n if (value === '.inf') {\n return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n\n } else if (value === '.nan') {\n return NaN;\n }\n return sign * parseFloat(value, 10);\n}\n\n\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\n\nfunction representYamlFloat(object, style) {\n var res;\n\n if (isNaN(object)) {\n switch (style) {\n case 'lowercase': return '.nan';\n case 'uppercase': return '.NAN';\n case 'camelcase': return '.NaN';\n }\n } else if (Number.POSITIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '.inf';\n case 'uppercase': return '.INF';\n case 'camelcase': return '.Inf';\n }\n } else if (Number.NEGATIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '-.inf';\n case 'uppercase': return '-.INF';\n case 'camelcase': return '-.Inf';\n }\n } else if (common.isNegativeZero(object)) {\n return '-0.0';\n }\n\n res = object.toString(10);\n\n // JS stringifier can build scientific format without dots: 5e-100,\n // while YAML requres dot: 5.e-100. Fix it with simple hack\n\n return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;\n}\n\nfunction isFloat(object) {\n return (Object.prototype.toString.call(object) === '[object Number]') &&\n (object % 1 !== 0 || common.isNegativeZero(object));\n}\n\nvar float = new type('tag:yaml.org,2002:float', {\n kind: 'scalar',\n resolve: resolveYamlFloat,\n construct: constructYamlFloat,\n predicate: isFloat,\n represent: representYamlFloat,\n defaultStyle: 'lowercase'\n});\n\nvar json = failsafe.extend({\n implicit: [\n _null,\n bool,\n int,\n float\n ]\n});\n\nvar core = json;\n\nvar YAML_DATE_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9])' + // [2] month\n '-([0-9][0-9])$'); // [3] day\n\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9]?)' + // [2] month\n '-([0-9][0-9]?)' + // [3] day\n '(?:[Tt]|[ \\\\t]+)' + // ...\n '([0-9][0-9]?)' + // [4] hour\n ':([0-9][0-9])' + // [5] minute\n ':([0-9][0-9])' + // [6] second\n '(?:\\\\.([0-9]*))?' + // [7] fraction\n '(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour\n '(?::([0-9][0-9]))?))?$'); // [11] tz_minute\n\nfunction resolveYamlTimestamp(data) {\n if (data === null) return false;\n if (YAML_DATE_REGEXP.exec(data) !== null) return true;\n if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;\n return false;\n}\n\nfunction constructYamlTimestamp(data) {\n var match, year, month, day, hour, minute, second, fraction = 0,\n delta = null, tz_hour, tz_minute, date;\n\n match = YAML_DATE_REGEXP.exec(data);\n if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);\n\n if (match === null) throw new Error('Date resolve error');\n\n // match: [1] year [2] month [3] day\n\n year = +(match[1]);\n month = +(match[2]) - 1; // JS month starts with 0\n day = +(match[3]);\n\n if (!match[4]) { // no hour\n return new Date(Date.UTC(year, month, day));\n }\n\n // match: [4] hour [5] minute [6] second [7] fraction\n\n hour = +(match[4]);\n minute = +(match[5]);\n second = +(match[6]);\n\n if (match[7]) {\n fraction = match[7].slice(0, 3);\n while (fraction.length < 3) { // milli-seconds\n fraction += '0';\n }\n fraction = +fraction;\n }\n\n // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute\n\n if (match[9]) {\n tz_hour = +(match[10]);\n tz_minute = +(match[11] || 0);\n delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds\n if (match[9] === '-') delta = -delta;\n }\n\n date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n\n if (delta) date.setTime(date.getTime() - delta);\n\n return date;\n}\n\nfunction representYamlTimestamp(object /*, style*/) {\n return object.toISOString();\n}\n\nvar timestamp = new type('tag:yaml.org,2002:timestamp', {\n kind: 'scalar',\n resolve: resolveYamlTimestamp,\n construct: constructYamlTimestamp,\n instanceOf: Date,\n represent: representYamlTimestamp\n});\n\nfunction resolveYamlMerge(data) {\n return data === '<<' || data === null;\n}\n\nvar merge = new type('tag:yaml.org,2002:merge', {\n kind: 'scalar',\n resolve: resolveYamlMerge\n});\n\n/*eslint-disable no-bitwise*/\n\n\n\n\n\n// [ 64, 65, 66 ] -> [ padding, CR, LF ]\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r';\n\n\nfunction resolveYamlBinary(data) {\n if (data === null) return false;\n\n var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;\n\n // Convert one by one.\n for (idx = 0; idx < max; idx++) {\n code = map.indexOf(data.charAt(idx));\n\n // Skip CR/LF\n if (code > 64) continue;\n\n // Fail on illegal characters\n if (code < 0) return false;\n\n bitlen += 6;\n }\n\n // If there are any bits left, source was corrupted\n return (bitlen % 8) === 0;\n}\n\nfunction constructYamlBinary(data) {\n var idx, tailbits,\n input = data.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n max = input.length,\n map = BASE64_MAP,\n bits = 0,\n result = [];\n\n // Collect by 6*4 bits (3 bytes)\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 4 === 0) && idx) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n }\n\n bits = (bits << 6) | map.indexOf(input.charAt(idx));\n }\n\n // Dump tail\n\n tailbits = (max % 4) * 6;\n\n if (tailbits === 0) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n } else if (tailbits === 18) {\n result.push((bits >> 10) & 0xFF);\n result.push((bits >> 2) & 0xFF);\n } else if (tailbits === 12) {\n result.push((bits >> 4) & 0xFF);\n }\n\n return new Uint8Array(result);\n}\n\nfunction representYamlBinary(object /*, style*/) {\n var result = '', bits = 0, idx, tail,\n max = object.length,\n map = BASE64_MAP;\n\n // Convert every three bytes to 4 ASCII characters.\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 3 === 0) && idx) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n }\n\n bits = (bits << 8) + object[idx];\n }\n\n // Dump tail\n\n tail = max % 3;\n\n if (tail === 0) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n } else if (tail === 2) {\n result += map[(bits >> 10) & 0x3F];\n result += map[(bits >> 4) & 0x3F];\n result += map[(bits << 2) & 0x3F];\n result += map[64];\n } else if (tail === 1) {\n result += map[(bits >> 2) & 0x3F];\n result += map[(bits << 4) & 0x3F];\n result += map[64];\n result += map[64];\n }\n\n return result;\n}\n\nfunction isBinary(obj) {\n return Object.prototype.toString.call(obj) === '[object Uint8Array]';\n}\n\nvar binary = new type('tag:yaml.org,2002:binary', {\n kind: 'scalar',\n resolve: resolveYamlBinary,\n construct: constructYamlBinary,\n predicate: isBinary,\n represent: representYamlBinary\n});\n\nvar _hasOwnProperty$3 = Object.prototype.hasOwnProperty;\nvar _toString$2 = Object.prototype.toString;\n\nfunction resolveYamlOmap(data) {\n if (data === null) return true;\n\n var objectKeys = [], index, length, pair, pairKey, pairHasKey,\n object = data;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n pairHasKey = false;\n\n if (_toString$2.call(pair) !== '[object Object]') return false;\n\n for (pairKey in pair) {\n if (_hasOwnProperty$3.call(pair, pairKey)) {\n if (!pairHasKey) pairHasKey = true;\n else return false;\n }\n }\n\n if (!pairHasKey) return false;\n\n if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n else return false;\n }\n\n return true;\n}\n\nfunction constructYamlOmap(data) {\n return data !== null ? data : [];\n}\n\nvar omap = new type('tag:yaml.org,2002:omap', {\n kind: 'sequence',\n resolve: resolveYamlOmap,\n construct: constructYamlOmap\n});\n\nvar _toString$1 = Object.prototype.toString;\n\nfunction resolveYamlPairs(data) {\n if (data === null) return true;\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n if (_toString$1.call(pair) !== '[object Object]') return false;\n\n keys = Object.keys(pair);\n\n if (keys.length !== 1) return false;\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return true;\n}\n\nfunction constructYamlPairs(data) {\n if (data === null) return [];\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n keys = Object.keys(pair);\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return result;\n}\n\nvar pairs = new type('tag:yaml.org,2002:pairs', {\n kind: 'sequence',\n resolve: resolveYamlPairs,\n construct: constructYamlPairs\n});\n\nvar _hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n\nfunction resolveYamlSet(data) {\n if (data === null) return true;\n\n var key, object = data;\n\n for (key in object) {\n if (_hasOwnProperty$2.call(object, key)) {\n if (object[key] !== null) return false;\n }\n }\n\n return true;\n}\n\nfunction constructYamlSet(data) {\n return data !== null ? data : {};\n}\n\nvar set = new type('tag:yaml.org,2002:set', {\n kind: 'mapping',\n resolve: resolveYamlSet,\n construct: constructYamlSet\n});\n\nvar _default = core.extend({\n implicit: [\n timestamp,\n merge\n ],\n explicit: [\n binary,\n omap,\n pairs,\n set\n ]\n});\n\n/*eslint-disable max-len,no-use-before-define*/\n\n\n\n\n\n\n\nvar _hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n\n\nvar CONTEXT_FLOW_IN = 1;\nvar CONTEXT_FLOW_OUT = 2;\nvar CONTEXT_BLOCK_IN = 3;\nvar CONTEXT_BLOCK_OUT = 4;\n\n\nvar CHOMPING_CLIP = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP = 3;\n\n\nvar PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction is_EOL(c) {\n return (c === 0x0A/* LF */) || (c === 0x0D/* CR */);\n}\n\nfunction is_WHITE_SPACE(c) {\n return (c === 0x09/* Tab */) || (c === 0x20/* Space */);\n}\n\nfunction is_WS_OR_EOL(c) {\n return (c === 0x09/* Tab */) ||\n (c === 0x20/* Space */) ||\n (c === 0x0A/* LF */) ||\n (c === 0x0D/* CR */);\n}\n\nfunction is_FLOW_INDICATOR(c) {\n return c === 0x2C/* , */ ||\n c === 0x5B/* [ */ ||\n c === 0x5D/* ] */ ||\n c === 0x7B/* { */ ||\n c === 0x7D/* } */;\n}\n\nfunction fromHexCode(c) {\n var lc;\n\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n /*eslint-disable no-bitwise*/\n lc = c | 0x20;\n\n if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) {\n return lc - 0x61 + 10;\n }\n\n return -1;\n}\n\nfunction escapedHexLen(c) {\n if (c === 0x78/* x */) { return 2; }\n if (c === 0x75/* u */) { return 4; }\n if (c === 0x55/* U */) { return 8; }\n return 0;\n}\n\nfunction fromDecimalCode(c) {\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n return -1;\n}\n\nfunction simpleEscapeSequence(c) {\n /* eslint-disable indent */\n return (c === 0x30/* 0 */) ? '\\x00' :\n (c === 0x61/* a */) ? '\\x07' :\n (c === 0x62/* b */) ? '\\x08' :\n (c === 0x74/* t */) ? '\\x09' :\n (c === 0x09/* Tab */) ? '\\x09' :\n (c === 0x6E/* n */) ? '\\x0A' :\n (c === 0x76/* v */) ? '\\x0B' :\n (c === 0x66/* f */) ? '\\x0C' :\n (c === 0x72/* r */) ? '\\x0D' :\n (c === 0x65/* e */) ? '\\x1B' :\n (c === 0x20/* Space */) ? ' ' :\n (c === 0x22/* \" */) ? '\\x22' :\n (c === 0x2F/* / */) ? '/' :\n (c === 0x5C/* \\ */) ? '\\x5C' :\n (c === 0x4E/* N */) ? '\\x85' :\n (c === 0x5F/* _ */) ? '\\xA0' :\n (c === 0x4C/* L */) ? '\\u2028' :\n (c === 0x50/* P */) ? '\\u2029' : '';\n}\n\nfunction charFromCodepoint(c) {\n if (c <= 0xFFFF) {\n return String.fromCharCode(c);\n }\n // Encode UTF-16 surrogate pair\n // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF\n return String.fromCharCode(\n ((c - 0x010000) >> 10) + 0xD800,\n ((c - 0x010000) & 0x03FF) + 0xDC00\n );\n}\n\n// set a property of a literal object, while protecting against prototype pollution,\n// see https://github.com/nodeca/js-yaml/issues/164 for more details\nfunction setProperty(object, key, value) {\n // used for this specific key only because Object.defineProperty is slow\n if (key === '__proto__') {\n Object.defineProperty(object, key, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: value\n });\n } else {\n object[key] = value;\n }\n}\n\nvar simpleEscapeCheck = new Array(256); // integer, for fast access\nvar simpleEscapeMap = new Array(256);\nfor (var i = 0; i < 256; i++) {\n simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\n\n\nfunction State$1(input, options) {\n this.input = input;\n\n this.filename = options['filename'] || null;\n this.schema = options['schema'] || _default;\n this.onWarning = options['onWarning'] || null;\n // (Hidden) Remove? makes the loader to expect YAML 1.1 documents\n // if such documents have no explicit %YAML directive\n this.legacy = options['legacy'] || false;\n\n this.json = options['json'] || false;\n this.listener = options['listener'] || null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.typeMap = this.schema.compiledTypeMap;\n\n this.length = input.length;\n this.position = 0;\n this.line = 0;\n this.lineStart = 0;\n this.lineIndent = 0;\n\n // position of first leading tab in the current line,\n // used to make sure there are no tabs in the indentation\n this.firstTabInLine = -1;\n\n this.documents = [];\n\n /*\n this.version;\n this.checkLineBreaks;\n this.tagMap;\n this.anchorMap;\n this.tag;\n this.anchor;\n this.kind;\n this.result;*/\n\n}\n\n\nfunction generateError(state, message) {\n var mark = {\n name: state.filename,\n buffer: state.input.slice(0, -1), // omit trailing \\0\n position: state.position,\n line: state.line,\n column: state.position - state.lineStart\n };\n\n mark.snippet = snippet(mark);\n\n return new exception(message, mark);\n}\n\nfunction throwError(state, message) {\n throw generateError(state, message);\n}\n\nfunction throwWarning(state, message) {\n if (state.onWarning) {\n state.onWarning.call(null, generateError(state, message));\n }\n}\n\n\nvar directiveHandlers = {\n\n YAML: function handleYamlDirective(state, name, args) {\n\n var match, major, minor;\n\n if (state.version !== null) {\n throwError(state, 'duplication of %YAML directive');\n }\n\n if (args.length !== 1) {\n throwError(state, 'YAML directive accepts exactly one argument');\n }\n\n match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n\n if (match === null) {\n throwError(state, 'ill-formed argument of the YAML directive');\n }\n\n major = parseInt(match[1], 10);\n minor = parseInt(match[2], 10);\n\n if (major !== 1) {\n throwError(state, 'unacceptable YAML version of the document');\n }\n\n state.version = args[0];\n state.checkLineBreaks = (minor < 2);\n\n if (minor !== 1 && minor !== 2) {\n throwWarning(state, 'unsupported YAML version of the document');\n }\n },\n\n TAG: function handleTagDirective(state, name, args) {\n\n var handle, prefix;\n\n if (args.length !== 2) {\n throwError(state, 'TAG directive accepts exactly two arguments');\n }\n\n handle = args[0];\n prefix = args[1];\n\n if (!PATTERN_TAG_HANDLE.test(handle)) {\n throwError(state, 'ill-formed tag handle (first argument) of the TAG directive');\n }\n\n if (_hasOwnProperty$1.call(state.tagMap, handle)) {\n throwError(state, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n }\n\n if (!PATTERN_TAG_URI.test(prefix)) {\n throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive');\n }\n\n try {\n prefix = decodeURIComponent(prefix);\n } catch (err) {\n throwError(state, 'tag prefix is malformed: ' + prefix);\n }\n\n state.tagMap[handle] = prefix;\n }\n};\n\n\nfunction captureSegment(state, start, end, checkJson) {\n var _position, _length, _character, _result;\n\n if (start < end) {\n _result = state.input.slice(start, end);\n\n if (checkJson) {\n for (_position = 0, _length = _result.length; _position < _length; _position += 1) {\n _character = _result.charCodeAt(_position);\n if (!(_character === 0x09 ||\n (0x20 <= _character && _character <= 0x10FFFF))) {\n throwError(state, 'expected valid JSON character');\n }\n }\n } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n throwError(state, 'the stream contains non-printable characters');\n }\n\n state.result += _result;\n }\n}\n\nfunction mergeMappings(state, destination, source, overridableKeys) {\n var sourceKeys, key, index, quantity;\n\n if (!common.isObject(source)) {\n throwError(state, 'cannot merge mappings; the provided source object is unacceptable');\n }\n\n sourceKeys = Object.keys(source);\n\n for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {\n key = sourceKeys[index];\n\n if (!_hasOwnProperty$1.call(destination, key)) {\n setProperty(destination, key, source[key]);\n overridableKeys[key] = true;\n }\n }\n}\n\nfunction storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode,\n startLine, startLineStart, startPos) {\n\n var index, quantity;\n\n // The output is a plain object here, so keys can only be strings.\n // We need to convert keyNode to a string, but doing so can hang the process\n // (deeply nested arrays that explode exponentially using aliases).\n if (Array.isArray(keyNode)) {\n keyNode = Array.prototype.slice.call(keyNode);\n\n for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {\n if (Array.isArray(keyNode[index])) {\n throwError(state, 'nested arrays are not supported inside keys');\n }\n\n if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') {\n keyNode[index] = '[object Object]';\n }\n }\n }\n\n // Avoid code execution in load() via toString property\n // (still use its own toString for arrays, timestamps,\n // and whatever user schema extensions happen to have @@toStringTag)\n if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') {\n keyNode = '[object Object]';\n }\n\n\n keyNode = String(keyNode);\n\n if (_result === null) {\n _result = {};\n }\n\n if (keyTag === 'tag:yaml.org,2002:merge') {\n if (Array.isArray(valueNode)) {\n for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {\n mergeMappings(state, _result, valueNode[index], overridableKeys);\n }\n } else {\n mergeMappings(state, _result, valueNode, overridableKeys);\n }\n } else {\n if (!state.json &&\n !_hasOwnProperty$1.call(overridableKeys, keyNode) &&\n _hasOwnProperty$1.call(_result, keyNode)) {\n state.line = startLine || state.line;\n state.lineStart = startLineStart || state.lineStart;\n state.position = startPos || state.position;\n throwError(state, 'duplicated mapping key');\n }\n\n setProperty(_result, keyNode, valueNode);\n delete overridableKeys[keyNode];\n }\n\n return _result;\n}\n\nfunction readLineBreak(state) {\n var ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x0A/* LF */) {\n state.position++;\n } else if (ch === 0x0D/* CR */) {\n state.position++;\n if (state.input.charCodeAt(state.position) === 0x0A/* LF */) {\n state.position++;\n }\n } else {\n throwError(state, 'a line break is expected');\n }\n\n state.line += 1;\n state.lineStart = state.position;\n state.firstTabInLine = -1;\n}\n\nfunction skipSeparationSpace(state, allowComments, checkIndent) {\n var lineBreaks = 0,\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) {\n state.firstTabInLine = state.position;\n }\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (allowComments && ch === 0x23/* # */) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0);\n }\n\n if (is_EOL(ch)) {\n readLineBreak(state);\n\n ch = state.input.charCodeAt(state.position);\n lineBreaks++;\n state.lineIndent = 0;\n\n while (ch === 0x20/* Space */) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n } else {\n break;\n }\n }\n\n if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {\n throwWarning(state, 'deficient indentation');\n }\n\n return lineBreaks;\n}\n\nfunction testDocumentSeparator(state) {\n var _position = state.position,\n ch;\n\n ch = state.input.charCodeAt(_position);\n\n // Condition state.position === state.lineStart is tested\n // in parent on each call, for efficiency. No needs to test here again.\n if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) &&\n ch === state.input.charCodeAt(_position + 1) &&\n ch === state.input.charCodeAt(_position + 2)) {\n\n _position += 3;\n\n ch = state.input.charCodeAt(_position);\n\n if (ch === 0 || is_WS_OR_EOL(ch)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction writeFoldedLines(state, count) {\n if (count === 1) {\n state.result += ' ';\n } else if (count > 1) {\n state.result += common.repeat('\\n', count - 1);\n }\n}\n\n\nfunction readPlainScalar(state, nodeIndent, withinFlowCollection) {\n var preceding,\n following,\n captureStart,\n captureEnd,\n hasPendingContent,\n _line,\n _lineStart,\n _lineIndent,\n _kind = state.kind,\n _result = state.result,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (is_WS_OR_EOL(ch) ||\n is_FLOW_INDICATOR(ch) ||\n ch === 0x23/* # */ ||\n ch === 0x26/* & */ ||\n ch === 0x2A/* * */ ||\n ch === 0x21/* ! */ ||\n ch === 0x7C/* | */ ||\n ch === 0x3E/* > */ ||\n ch === 0x27/* ' */ ||\n ch === 0x22/* \" */ ||\n ch === 0x25/* % */ ||\n ch === 0x40/* @ */ ||\n ch === 0x60/* ` */) {\n return false;\n }\n\n if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n return false;\n }\n }\n\n state.kind = 'scalar';\n state.result = '';\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n\n while (ch !== 0) {\n if (ch === 0x3A/* : */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n break;\n }\n\n } else if (ch === 0x23/* # */) {\n preceding = state.input.charCodeAt(state.position - 1);\n\n if (is_WS_OR_EOL(preceding)) {\n break;\n }\n\n } else if ((state.position === state.lineStart && testDocumentSeparator(state)) ||\n withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n break;\n\n } else if (is_EOL(ch)) {\n _line = state.line;\n _lineStart = state.lineStart;\n _lineIndent = state.lineIndent;\n skipSeparationSpace(state, false, -1);\n\n if (state.lineIndent >= nodeIndent) {\n hasPendingContent = true;\n ch = state.input.charCodeAt(state.position);\n continue;\n } else {\n state.position = captureEnd;\n state.line = _line;\n state.lineStart = _lineStart;\n state.lineIndent = _lineIndent;\n break;\n }\n }\n\n if (hasPendingContent) {\n captureSegment(state, captureStart, captureEnd, false);\n writeFoldedLines(state, state.line - _line);\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n }\n\n if (!is_WHITE_SPACE(ch)) {\n captureEnd = state.position + 1;\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, captureEnd, false);\n\n if (state.result) {\n return true;\n }\n\n state.kind = _kind;\n state.result = _result;\n return false;\n}\n\nfunction readSingleQuotedScalar(state, nodeIndent) {\n var ch,\n captureStart, captureEnd;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x27/* ' */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x27/* ' */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x27/* ' */) {\n captureStart = state.position;\n state.position++;\n captureEnd = state.position;\n } else {\n return true;\n }\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a single quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a single quoted scalar');\n}\n\nfunction readDoubleQuotedScalar(state, nodeIndent) {\n var captureStart,\n captureEnd,\n hexLength,\n hexResult,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x22/* \" */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x22/* \" */) {\n captureSegment(state, captureStart, state.position, true);\n state.position++;\n return true;\n\n } else if (ch === 0x5C/* \\ */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (is_EOL(ch)) {\n skipSeparationSpace(state, false, nodeIndent);\n\n // TODO: rework to inline fn with no type cast?\n } else if (ch < 256 && simpleEscapeCheck[ch]) {\n state.result += simpleEscapeMap[ch];\n state.position++;\n\n } else if ((tmp = escapedHexLen(ch)) > 0) {\n hexLength = tmp;\n hexResult = 0;\n\n for (; hexLength > 0; hexLength--) {\n ch = state.input.charCodeAt(++state.position);\n\n if ((tmp = fromHexCode(ch)) >= 0) {\n hexResult = (hexResult << 4) + tmp;\n\n } else {\n throwError(state, 'expected hexadecimal character');\n }\n }\n\n state.result += charFromCodepoint(hexResult);\n\n state.position++;\n\n } else {\n throwError(state, 'unknown escape sequence');\n }\n\n captureStart = captureEnd = state.position;\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a double quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a double quoted scalar');\n}\n\nfunction readFlowCollection(state, nodeIndent) {\n var readNext = true,\n _line,\n _lineStart,\n _pos,\n _tag = state.tag,\n _result,\n _anchor = state.anchor,\n following,\n terminator,\n isPair,\n isExplicitPair,\n isMapping,\n overridableKeys = Object.create(null),\n keyNode,\n keyTag,\n valueNode,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x5B/* [ */) {\n terminator = 0x5D;/* ] */\n isMapping = false;\n _result = [];\n } else if (ch === 0x7B/* { */) {\n terminator = 0x7D;/* } */\n isMapping = true;\n _result = {};\n } else {\n return false;\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n while (ch !== 0) {\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === terminator) {\n state.position++;\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = isMapping ? 'mapping' : 'sequence';\n state.result = _result;\n return true;\n } else if (!readNext) {\n throwError(state, 'missed comma between flow collection entries');\n } else if (ch === 0x2C/* , */) {\n // \"flow collection entries can never be completely empty\", as per YAML 1.2, section 7.4\n throwError(state, \"expected the node content, but found ','\");\n }\n\n keyTag = keyNode = valueNode = null;\n isPair = isExplicitPair = false;\n\n if (ch === 0x3F/* ? */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following)) {\n isPair = isExplicitPair = true;\n state.position++;\n skipSeparationSpace(state, true, nodeIndent);\n }\n }\n\n _line = state.line; // Save the current line.\n _lineStart = state.lineStart;\n _pos = state.position;\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n keyTag = state.tag;\n keyNode = state.result;\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) {\n isPair = true;\n ch = state.input.charCodeAt(++state.position);\n skipSeparationSpace(state, true, nodeIndent);\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n valueNode = state.result;\n }\n\n if (isMapping) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);\n } else if (isPair) {\n _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));\n } else {\n _result.push(keyNode);\n }\n\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x2C/* , */) {\n readNext = true;\n ch = state.input.charCodeAt(++state.position);\n } else {\n readNext = false;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a flow collection');\n}\n\nfunction readBlockScalar(state, nodeIndent) {\n var captureStart,\n folding,\n chomping = CHOMPING_CLIP,\n didReadContent = false,\n detectedIndent = false,\n textIndent = nodeIndent,\n emptyLines = 0,\n atMoreIndented = false,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x7C/* | */) {\n folding = false;\n } else if (ch === 0x3E/* > */) {\n folding = true;\n } else {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n\n while (ch !== 0) {\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n if (CHOMPING_CLIP === chomping) {\n chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP;\n } else {\n throwError(state, 'repeat of a chomping mode identifier');\n }\n\n } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n if (tmp === 0) {\n throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one');\n } else if (!detectedIndent) {\n textIndent = nodeIndent + tmp - 1;\n detectedIndent = true;\n } else {\n throwError(state, 'repeat of an indentation width identifier');\n }\n\n } else {\n break;\n }\n }\n\n if (is_WHITE_SPACE(ch)) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (is_WHITE_SPACE(ch));\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (!is_EOL(ch) && (ch !== 0));\n }\n }\n\n while (ch !== 0) {\n readLineBreak(state);\n state.lineIndent = 0;\n\n ch = state.input.charCodeAt(state.position);\n\n while ((!detectedIndent || state.lineIndent < textIndent) &&\n (ch === 0x20/* Space */)) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (!detectedIndent && state.lineIndent > textIndent) {\n textIndent = state.lineIndent;\n }\n\n if (is_EOL(ch)) {\n emptyLines++;\n continue;\n }\n\n // End of the scalar.\n if (state.lineIndent < textIndent) {\n\n // Perform the chomping.\n if (chomping === CHOMPING_KEEP) {\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n } else if (chomping === CHOMPING_CLIP) {\n if (didReadContent) { // i.e. only if the scalar is not empty.\n state.result += '\\n';\n }\n }\n\n // Break this `while` cycle and go to the funciton's epilogue.\n break;\n }\n\n // Folded style: use fancy rules to handle line breaks.\n if (folding) {\n\n // Lines starting with white space characters (more-indented lines) are not folded.\n if (is_WHITE_SPACE(ch)) {\n atMoreIndented = true;\n // except for the first content line (cf. Example 8.1)\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n\n // End of more-indented block.\n } else if (atMoreIndented) {\n atMoreIndented = false;\n state.result += common.repeat('\\n', emptyLines + 1);\n\n // Just one line break - perceive as the same line.\n } else if (emptyLines === 0) {\n if (didReadContent) { // i.e. only if we have already read some scalar content.\n state.result += ' ';\n }\n\n // Several line breaks - perceive as different lines.\n } else {\n state.result += common.repeat('\\n', emptyLines);\n }\n\n // Literal style: just add exact number of line breaks between content lines.\n } else {\n // Keep all line breaks except the header line break.\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n }\n\n didReadContent = true;\n detectedIndent = true;\n emptyLines = 0;\n captureStart = state.position;\n\n while (!is_EOL(ch) && (ch !== 0)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, state.position, false);\n }\n\n return true;\n}\n\nfunction readBlockSequence(state, nodeIndent) {\n var _line,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = [],\n following,\n detected = false,\n ch;\n\n // there is a leading tab before this token, so it can't be a block sequence/mapping;\n // it can still be flow sequence/mapping or a scalar\n if (state.firstTabInLine !== -1) return false;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n if (state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, 'tab characters must not be used in indentation');\n }\n\n if (ch !== 0x2D/* - */) {\n break;\n }\n\n following = state.input.charCodeAt(state.position + 1);\n\n if (!is_WS_OR_EOL(following)) {\n break;\n }\n\n detected = true;\n state.position++;\n\n if (skipSeparationSpace(state, true, -1)) {\n if (state.lineIndent <= nodeIndent) {\n _result.push(null);\n ch = state.input.charCodeAt(state.position);\n continue;\n }\n }\n\n _line = state.line;\n composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n _result.push(state.result);\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a sequence entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'sequence';\n state.result = _result;\n return true;\n }\n return false;\n}\n\nfunction readBlockMapping(state, nodeIndent, flowIndent) {\n var following,\n allowCompact,\n _line,\n _keyLine,\n _keyLineStart,\n _keyPos,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = {},\n overridableKeys = Object.create(null),\n keyTag = null,\n keyNode = null,\n valueNode = null,\n atExplicitKey = false,\n detected = false,\n ch;\n\n // there is a leading tab before this token, so it can't be a block sequence/mapping;\n // it can still be flow sequence/mapping or a scalar\n if (state.firstTabInLine !== -1) return false;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n if (!atExplicitKey && state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, 'tab characters must not be used in indentation');\n }\n\n following = state.input.charCodeAt(state.position + 1);\n _line = state.line; // Save the current line.\n\n //\n // Explicit notation case. There are two separate blocks:\n // first for the key (denoted by \"?\") and second for the value (denoted by \":\")\n //\n if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) {\n\n if (ch === 0x3F/* ? */) {\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = true;\n allowCompact = true;\n\n } else if (atExplicitKey) {\n // i.e. 0x3A/* : */ === character after the explicit key.\n atExplicitKey = false;\n allowCompact = true;\n\n } else {\n throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');\n }\n\n state.position += 1;\n ch = following;\n\n //\n // Implicit notation case. Flow-style node as the key first, then \":\", and the value.\n //\n } else {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n\n if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n // Neither implicit nor explicit notation.\n // Reading is done. Go to the epilogue.\n break;\n }\n\n if (state.line === _line) {\n ch = state.input.charCodeAt(state.position);\n\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x3A/* : */) {\n ch = state.input.charCodeAt(++state.position);\n\n if (!is_WS_OR_EOL(ch)) {\n throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');\n }\n\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = false;\n allowCompact = false;\n keyTag = state.tag;\n keyNode = state.result;\n\n } else if (detected) {\n throwError(state, 'can not read an implicit mapping pair; a colon is missed');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n\n } else if (detected) {\n throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n }\n\n //\n // Common reading code for both explicit and implicit notations.\n //\n if (state.line === _line || state.lineIndent > nodeIndent) {\n if (atExplicitKey) {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n }\n\n if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n if (atExplicitKey) {\n keyNode = state.result;\n } else {\n valueNode = state.result;\n }\n }\n\n if (!atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n skipSeparationSpace(state, true, -1);\n ch = state.input.charCodeAt(state.position);\n }\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a mapping entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n //\n // Epilogue.\n //\n\n // Special case: last mapping's node contains only the key in explicit notation.\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n }\n\n // Expose the resulting mapping.\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'mapping';\n state.result = _result;\n }\n\n return detected;\n}\n\nfunction readTagProperty(state) {\n var _position,\n isVerbatim = false,\n isNamed = false,\n tagHandle,\n tagName,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x21/* ! */) return false;\n\n if (state.tag !== null) {\n throwError(state, 'duplication of a tag property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x3C/* < */) {\n isVerbatim = true;\n ch = state.input.charCodeAt(++state.position);\n\n } else if (ch === 0x21/* ! */) {\n isNamed = true;\n tagHandle = '!!';\n ch = state.input.charCodeAt(++state.position);\n\n } else {\n tagHandle = '!';\n }\n\n _position = state.position;\n\n if (isVerbatim) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && ch !== 0x3E/* > */);\n\n if (state.position < state.length) {\n tagName = state.input.slice(_position, state.position);\n ch = state.input.charCodeAt(++state.position);\n } else {\n throwError(state, 'unexpected end of the stream within a verbatim tag');\n }\n } else {\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n\n if (ch === 0x21/* ! */) {\n if (!isNamed) {\n tagHandle = state.input.slice(_position - 1, state.position + 1);\n\n if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n throwError(state, 'named tag handle cannot contain such characters');\n }\n\n isNamed = true;\n _position = state.position + 1;\n } else {\n throwError(state, 'tag suffix cannot contain exclamation marks');\n }\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n tagName = state.input.slice(_position, state.position);\n\n if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n throwError(state, 'tag suffix cannot contain flow indicator characters');\n }\n }\n\n if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n throwError(state, 'tag name cannot contain such characters: ' + tagName);\n }\n\n try {\n tagName = decodeURIComponent(tagName);\n } catch (err) {\n throwError(state, 'tag name is malformed: ' + tagName);\n }\n\n if (isVerbatim) {\n state.tag = tagName;\n\n } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) {\n state.tag = state.tagMap[tagHandle] + tagName;\n\n } else if (tagHandle === '!') {\n state.tag = '!' + tagName;\n\n } else if (tagHandle === '!!') {\n state.tag = 'tag:yaml.org,2002:' + tagName;\n\n } else {\n throwError(state, 'undeclared tag handle \"' + tagHandle + '\"');\n }\n\n return true;\n}\n\nfunction readAnchorProperty(state) {\n var _position,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x26/* & */) return false;\n\n if (state.anchor !== null) {\n throwError(state, 'duplication of an anchor property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an anchor node must contain at least one character');\n }\n\n state.anchor = state.input.slice(_position, state.position);\n return true;\n}\n\nfunction readAlias(state) {\n var _position, alias,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x2A/* * */) return false;\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an alias node must contain at least one character');\n }\n\n alias = state.input.slice(_position, state.position);\n\n if (!_hasOwnProperty$1.call(state.anchorMap, alias)) {\n throwError(state, 'unidentified alias \"' + alias + '\"');\n }\n\n state.result = state.anchorMap[alias];\n skipSeparationSpace(state, true, -1);\n return true;\n}\n\nfunction composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {\n var allowBlockStyles,\n allowBlockScalars,\n allowBlockCollections,\n indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent\n atNewLine = false,\n hasContent = false,\n typeIndex,\n typeQuantity,\n typeList,\n type,\n flowIndent,\n blockIndent;\n\n if (state.listener !== null) {\n state.listener('open', state);\n }\n\n state.tag = null;\n state.anchor = null;\n state.kind = null;\n state.result = null;\n\n allowBlockStyles = allowBlockScalars = allowBlockCollections =\n CONTEXT_BLOCK_OUT === nodeContext ||\n CONTEXT_BLOCK_IN === nodeContext;\n\n if (allowToSeek) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n }\n }\n\n if (indentStatus === 1) {\n while (readTagProperty(state) || readAnchorProperty(state)) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n allowBlockCollections = allowBlockStyles;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n } else {\n allowBlockCollections = false;\n }\n }\n }\n\n if (allowBlockCollections) {\n allowBlockCollections = atNewLine || allowCompact;\n }\n\n if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n flowIndent = parentIndent;\n } else {\n flowIndent = parentIndent + 1;\n }\n\n blockIndent = state.position - state.lineStart;\n\n if (indentStatus === 1) {\n if (allowBlockCollections &&\n (readBlockSequence(state, blockIndent) ||\n readBlockMapping(state, blockIndent, flowIndent)) ||\n readFlowCollection(state, flowIndent)) {\n hasContent = true;\n } else {\n if ((allowBlockScalars && readBlockScalar(state, flowIndent)) ||\n readSingleQuotedScalar(state, flowIndent) ||\n readDoubleQuotedScalar(state, flowIndent)) {\n hasContent = true;\n\n } else if (readAlias(state)) {\n hasContent = true;\n\n if (state.tag !== null || state.anchor !== null) {\n throwError(state, 'alias node should not have any properties');\n }\n\n } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n hasContent = true;\n\n if (state.tag === null) {\n state.tag = '?';\n }\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n } else if (indentStatus === 0) {\n // Special case: block sequences are allowed to have same indentation level as the parent.\n // http://www.yaml.org/spec/1.2/spec.html#id2799784\n hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);\n }\n }\n\n if (state.tag === null) {\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n\n } else if (state.tag === '?') {\n // Implicit resolving is not allowed for non-scalar types, and '?'\n // non-specific tag is only automatically assigned to plain scalars.\n //\n // We only need to check kind conformity in case user explicitly assigns '?'\n // tag, for example like this: \"!<?> [0]\"\n //\n if (state.result !== null && state.kind !== 'scalar') {\n throwError(state, 'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"' + state.kind + '\"');\n }\n\n for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {\n type = state.implicitTypes[typeIndex];\n\n if (type.resolve(state.result)) { // `state.result` updated in resolver if matched\n state.result = type.construct(state.result);\n state.tag = type.tag;\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n break;\n }\n }\n } else if (state.tag !== '!') {\n if (_hasOwnProperty$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) {\n type = state.typeMap[state.kind || 'fallback'][state.tag];\n } else {\n // looking for multi type\n type = null;\n typeList = state.typeMap.multi[state.kind || 'fallback'];\n\n for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {\n if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {\n type = typeList[typeIndex];\n break;\n }\n }\n }\n\n if (!type) {\n throwError(state, 'unknown tag !<' + state.tag + '>');\n }\n\n if (state.result !== null && type.kind !== state.kind) {\n throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be \"' + type.kind + '\", not \"' + state.kind + '\"');\n }\n\n if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched\n throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');\n } else {\n state.result = type.construct(state.result, state.tag);\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n }\n\n if (state.listener !== null) {\n state.listener('close', state);\n }\n return state.tag !== null || state.anchor !== null || hasContent;\n}\n\nfunction readDocument(state) {\n var documentStart = state.position,\n _position,\n directiveName,\n directiveArgs,\n hasDirectives = false,\n ch;\n\n state.version = null;\n state.checkLineBreaks = state.legacy;\n state.tagMap = Object.create(null);\n state.anchorMap = Object.create(null);\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if (state.lineIndent > 0 || ch !== 0x25/* % */) {\n break;\n }\n\n hasDirectives = true;\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveName = state.input.slice(_position, state.position);\n directiveArgs = [];\n\n if (directiveName.length < 1) {\n throwError(state, 'directive name must not be less than one character in length');\n }\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && !is_EOL(ch));\n break;\n }\n\n if (is_EOL(ch)) break;\n\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveArgs.push(state.input.slice(_position, state.position));\n }\n\n if (ch !== 0) readLineBreak(state);\n\n if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {\n directiveHandlers[directiveName](state, directiveName, directiveArgs);\n } else {\n throwWarning(state, 'unknown document directive \"' + directiveName + '\"');\n }\n }\n\n skipSeparationSpace(state, true, -1);\n\n if (state.lineIndent === 0 &&\n state.input.charCodeAt(state.position) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 1) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 2) === 0x2D/* - */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n\n } else if (hasDirectives) {\n throwError(state, 'directives end mark is expected');\n }\n\n composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n skipSeparationSpace(state, true, -1);\n\n if (state.checkLineBreaks &&\n PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {\n throwWarning(state, 'non-ASCII line breaks are interpreted as content');\n }\n\n state.documents.push(state.result);\n\n if (state.position === state.lineStart && testDocumentSeparator(state)) {\n\n if (state.input.charCodeAt(state.position) === 0x2E/* . */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n }\n return;\n }\n\n if (state.position < (state.length - 1)) {\n throwError(state, 'end of the stream or a document separator is expected');\n } else {\n return;\n }\n}\n\n\nfunction loadDocuments(input, options) {\n input = String(input);\n options = options || {};\n\n if (input.length !== 0) {\n\n // Add tailing `\\n` if not exists\n if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ &&\n input.charCodeAt(input.length - 1) !== 0x0D/* CR */) {\n input += '\\n';\n }\n\n // Strip BOM\n if (input.charCodeAt(0) === 0xFEFF) {\n input = input.slice(1);\n }\n }\n\n var state = new State$1(input, options);\n\n var nullpos = input.indexOf('\\0');\n\n if (nullpos !== -1) {\n state.position = nullpos;\n throwError(state, 'null byte is not allowed in input');\n }\n\n // Use 0 as string terminator. That significantly simplifies bounds check.\n state.input += '\\0';\n\n while (state.input.charCodeAt(state.position) === 0x20/* Space */) {\n state.lineIndent += 1;\n state.position += 1;\n }\n\n while (state.position < (state.length - 1)) {\n readDocument(state);\n }\n\n return state.documents;\n}\n\n\nfunction loadAll$1(input, iterator, options) {\n if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') {\n options = iterator;\n iterator = null;\n }\n\n var documents = loadDocuments(input, options);\n\n if (typeof iterator !== 'function') {\n return documents;\n }\n\n for (var index = 0, length = documents.length; index < length; index += 1) {\n iterator(documents[index]);\n }\n}\n\n\nfunction load$1(input, options) {\n var documents = loadDocuments(input, options);\n\n if (documents.length === 0) {\n /*eslint-disable no-undefined*/\n return undefined;\n } else if (documents.length === 1) {\n return documents[0];\n }\n throw new exception('expected a single document in the stream, but found more');\n}\n\n\nvar loadAll_1 = loadAll$1;\nvar load_1 = load$1;\n\nvar loader = {\n\tloadAll: loadAll_1,\n\tload: load_1\n};\n\n/*eslint-disable no-use-before-define*/\n\n\n\n\n\nvar _toString = Object.prototype.toString;\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar CHAR_BOM = 0xFEFF;\nvar CHAR_TAB = 0x09; /* Tab */\nvar CHAR_LINE_FEED = 0x0A; /* LF */\nvar CHAR_CARRIAGE_RETURN = 0x0D; /* CR */\nvar CHAR_SPACE = 0x20; /* Space */\nvar CHAR_EXCLAMATION = 0x21; /* ! */\nvar CHAR_DOUBLE_QUOTE = 0x22; /* \" */\nvar CHAR_SHARP = 0x23; /* # */\nvar CHAR_PERCENT = 0x25; /* % */\nvar CHAR_AMPERSAND = 0x26; /* & */\nvar CHAR_SINGLE_QUOTE = 0x27; /* ' */\nvar CHAR_ASTERISK = 0x2A; /* * */\nvar CHAR_COMMA = 0x2C; /* , */\nvar CHAR_MINUS = 0x2D; /* - */\nvar CHAR_COLON = 0x3A; /* : */\nvar CHAR_EQUALS = 0x3D; /* = */\nvar CHAR_GREATER_THAN = 0x3E; /* > */\nvar CHAR_QUESTION = 0x3F; /* ? */\nvar CHAR_COMMERCIAL_AT = 0x40; /* @ */\nvar CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */\nvar CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */\nvar CHAR_GRAVE_ACCENT = 0x60; /* ` */\nvar CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */\nvar CHAR_VERTICAL_LINE = 0x7C; /* | */\nvar CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */\n\nvar ESCAPE_SEQUENCES = {};\n\nESCAPE_SEQUENCES[0x00] = '\\\\0';\nESCAPE_SEQUENCES[0x07] = '\\\\a';\nESCAPE_SEQUENCES[0x08] = '\\\\b';\nESCAPE_SEQUENCES[0x09] = '\\\\t';\nESCAPE_SEQUENCES[0x0A] = '\\\\n';\nESCAPE_SEQUENCES[0x0B] = '\\\\v';\nESCAPE_SEQUENCES[0x0C] = '\\\\f';\nESCAPE_SEQUENCES[0x0D] = '\\\\r';\nESCAPE_SEQUENCES[0x1B] = '\\\\e';\nESCAPE_SEQUENCES[0x22] = '\\\\\"';\nESCAPE_SEQUENCES[0x5C] = '\\\\\\\\';\nESCAPE_SEQUENCES[0x85] = '\\\\N';\nESCAPE_SEQUENCES[0xA0] = '\\\\_';\nESCAPE_SEQUENCES[0x2028] = '\\\\L';\nESCAPE_SEQUENCES[0x2029] = '\\\\P';\n\nvar DEPRECATED_BOOLEANS_SYNTAX = [\n 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON',\n 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF'\n];\n\nvar DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;\n\nfunction compileStyleMap(schema, map) {\n var result, keys, index, length, tag, style, type;\n\n if (map === null) return {};\n\n result = {};\n keys = Object.keys(map);\n\n for (index = 0, length = keys.length; index < length; index += 1) {\n tag = keys[index];\n style = String(map[tag]);\n\n if (tag.slice(0, 2) === '!!') {\n tag = 'tag:yaml.org,2002:' + tag.slice(2);\n }\n type = schema.compiledTypeMap['fallback'][tag];\n\n if (type && _hasOwnProperty.call(type.styleAliases, style)) {\n style = type.styleAliases[style];\n }\n\n result[tag] = style;\n }\n\n return result;\n}\n\nfunction encodeHex(character) {\n var string, handle, length;\n\n string = character.toString(16).toUpperCase();\n\n if (character <= 0xFF) {\n handle = 'x';\n length = 2;\n } else if (character <= 0xFFFF) {\n handle = 'u';\n length = 4;\n } else if (character <= 0xFFFFFFFF) {\n handle = 'U';\n length = 8;\n } else {\n throw new exception('code point within a string may not be greater than 0xFFFFFFFF');\n }\n\n return '\\\\' + handle + common.repeat('0', length - string.length) + string;\n}\n\n\nvar QUOTING_TYPE_SINGLE = 1,\n QUOTING_TYPE_DOUBLE = 2;\n\nfunction State(options) {\n this.schema = options['schema'] || _default;\n this.indent = Math.max(1, (options['indent'] || 2));\n this.noArrayIndent = options['noArrayIndent'] || false;\n this.skipInvalid = options['skipInvalid'] || false;\n this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']);\n this.styleMap = compileStyleMap(this.schema, options['styles'] || null);\n this.sortKeys = options['sortKeys'] || false;\n this.lineWidth = options['lineWidth'] || 80;\n this.noRefs = options['noRefs'] || false;\n this.noCompatMode = options['noCompatMode'] || false;\n this.condenseFlow = options['condenseFlow'] || false;\n this.quotingType = options['quotingType'] === '\"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE;\n this.forceQuotes = options['forceQuotes'] || false;\n this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.explicitTypes = this.schema.compiledExplicit;\n\n this.tag = null;\n this.result = '';\n\n this.duplicates = [];\n this.usedDuplicates = null;\n}\n\n// Indents every line in a string. Empty lines (\\n only) are not indented.\nfunction indentString(string, spaces) {\n var ind = common.repeat(' ', spaces),\n position = 0,\n next = -1,\n result = '',\n line,\n length = string.length;\n\n while (position < length) {\n next = string.indexOf('\\n', position);\n if (next === -1) {\n line = string.slice(position);\n position = length;\n } else {\n line = string.slice(position, next + 1);\n position = next + 1;\n }\n\n if (line.length && line !== '\\n') result += ind;\n\n result += line;\n }\n\n return result;\n}\n\nfunction generateNextLine(state, level) {\n return '\\n' + common.repeat(' ', state.indent * level);\n}\n\nfunction testImplicitResolving(state, str) {\n var index, length, type;\n\n for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {\n type = state.implicitTypes[index];\n\n if (type.resolve(str)) {\n return true;\n }\n }\n\n return false;\n}\n\n// [33] s-white ::= s-space | s-tab\nfunction isWhitespace(c) {\n return c === CHAR_SPACE || c === CHAR_TAB;\n}\n\n// Returns true if the character can be printed without escaping.\n// From YAML 1.2: \"any allowed characters known to be non-printable\n// should also be escaped. [However,] This isn’t mandatory\"\n// Derived from nb-char - \\t - #x85 - #xA0 - #x2028 - #x2029.\nfunction isPrintable(c) {\n return (0x00020 <= c && c <= 0x00007E)\n || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029)\n || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM)\n || (0x10000 <= c && c <= 0x10FFFF);\n}\n\n// [34] ns-char ::= nb-char - s-white\n// [27] nb-char ::= c-printable - b-char - c-byte-order-mark\n// [26] b-char ::= b-line-feed | b-carriage-return\n// Including s-white (for some reason, examples doesn't match specs in this aspect)\n// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark\nfunction isNsCharOrWhitespace(c) {\n return isPrintable(c)\n && c !== CHAR_BOM\n // - b-char\n && c !== CHAR_CARRIAGE_RETURN\n && c !== CHAR_LINE_FEED;\n}\n\n// [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out\n// c = flow-in ⇒ ns-plain-safe-in\n// c = block-key ⇒ ns-plain-safe-out\n// c = flow-key ⇒ ns-plain-safe-in\n// [128] ns-plain-safe-out ::= ns-char\n// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator\n// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” )\n// | ( /* An ns-char preceding */ “#” )\n// | ( “:” /* Followed by an ns-plain-safe(c) */ )\nfunction isPlainSafe(c, prev, inblock) {\n var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c);\n var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c);\n return (\n // ns-plain-safe\n inblock ? // c = flow-in\n cIsNsCharOrWhitespace\n : cIsNsCharOrWhitespace\n // - c-flow-indicator\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n )\n // ns-plain-char\n && c !== CHAR_SHARP // false on '#'\n && !(prev === CHAR_COLON && !cIsNsChar) // false on ': '\n || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#'\n || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]'\n}\n\n// Simplified test for values allowed as the first character in plain style.\nfunction isPlainSafeFirst(c) {\n // Uses a subset of ns-char - c-indicator\n // where ns-char = nb-char - s-white.\n // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part\n return isPrintable(c) && c !== CHAR_BOM\n && !isWhitespace(c) // - s-white\n // - (c-indicator ::=\n // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}”\n && c !== CHAR_MINUS\n && c !== CHAR_QUESTION\n && c !== CHAR_COLON\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “\"”\n && c !== CHAR_SHARP\n && c !== CHAR_AMPERSAND\n && c !== CHAR_ASTERISK\n && c !== CHAR_EXCLAMATION\n && c !== CHAR_VERTICAL_LINE\n && c !== CHAR_EQUALS\n && c !== CHAR_GREATER_THAN\n && c !== CHAR_SINGLE_QUOTE\n && c !== CHAR_DOUBLE_QUOTE\n // | “%” | “@” | “`”)\n && c !== CHAR_PERCENT\n && c !== CHAR_COMMERCIAL_AT\n && c !== CHAR_GRAVE_ACCENT;\n}\n\n// Simplified test for values allowed as the last character in plain style.\nfunction isPlainSafeLast(c) {\n // just not whitespace or colon, it will be checked to be plain character later\n return !isWhitespace(c) && c !== CHAR_COLON;\n}\n\n// Same as 'string'.codePointAt(pos), but works in older browsers.\nfunction codePointAt(string, pos) {\n var first = string.charCodeAt(pos), second;\n if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) {\n second = string.charCodeAt(pos + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n return first;\n}\n\n// Determines whether block indentation indicator is required.\nfunction needIndentIndicator(string) {\n var leadingSpaceRe = /^\\n* /;\n return leadingSpaceRe.test(string);\n}\n\nvar STYLE_PLAIN = 1,\n STYLE_SINGLE = 2,\n STYLE_LITERAL = 3,\n STYLE_FOLDED = 4,\n STYLE_DOUBLE = 5;\n\n// Determines which scalar styles are possible and returns the preferred style.\n// lineWidth = -1 => no limit.\n// Pre-conditions: str.length > 0.\n// Post-conditions:\n// STYLE_PLAIN or STYLE_SINGLE => no \\n are in the string.\n// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).\n// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).\nfunction chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth,\n testAmbiguousType, quotingType, forceQuotes, inblock) {\n\n var i;\n var char = 0;\n var prevChar = null;\n var hasLineBreak = false;\n var hasFoldableLine = false; // only checked if shouldTrackWidth\n var shouldTrackWidth = lineWidth !== -1;\n var previousLineBreak = -1; // count the first line correctly\n var plain = isPlainSafeFirst(codePointAt(string, 0))\n && isPlainSafeLast(codePointAt(string, string.length - 1));\n\n if (singleLineOnly || forceQuotes) {\n // Case: no block styles.\n // Check for disallowed characters to rule out plain and single.\n for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n } else {\n // Case: block styles permitted.\n for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (char === CHAR_LINE_FEED) {\n hasLineBreak = true;\n // Check if any line can be folded.\n if (shouldTrackWidth) {\n hasFoldableLine = hasFoldableLine ||\n // Foldable line = too long, and not more-indented.\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' ');\n previousLineBreak = i;\n }\n } else if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n // in case the end is missing a \\n\n hasFoldableLine = hasFoldableLine || (shouldTrackWidth &&\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' '));\n }\n // Although every style can represent \\n without escaping, prefer block styles\n // for multiline, since they're more readable and they don't add empty lines.\n // Also prefer folding a super-long line.\n if (!hasLineBreak && !hasFoldableLine) {\n // Strings interpretable as another type have to be quoted;\n // e.g. the string 'true' vs. the boolean true.\n if (plain && !forceQuotes && !testAmbiguousType(string)) {\n return STYLE_PLAIN;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n }\n // Edge case: block indentation indicator can only have one digit.\n if (indentPerLevel > 9 && needIndentIndicator(string)) {\n return STYLE_DOUBLE;\n }\n // At this point we know block styles are valid.\n // Prefer literal style unless we want to fold.\n if (!forceQuotes) {\n return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n}\n\n// Note: line breaking/folding is implemented for only the folded style.\n// NB. We drop the last trailing newline (if any) of a returned block scalar\n// since the dumper adds its own newline. This always works:\n// • No ending newline => unaffected; already using strip \"-\" chomping.\n// • Ending newline => removed then restored.\n// Importantly, this keeps the \"+\" chomp indicator from gaining an extra line.\nfunction writeScalar(state, string, level, iskey, inblock) {\n state.dump = (function () {\n if (string.length === 0) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? '\"\"' : \"''\";\n }\n if (!state.noCompatMode) {\n if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? ('\"' + string + '\"') : (\"'\" + string + \"'\");\n }\n }\n\n var indent = state.indent * Math.max(1, level); // no 0-indent scalars\n // As indentation gets deeper, let the width decrease monotonically\n // to the lower bound min(state.lineWidth, 40).\n // Note that this implies\n // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound.\n // state.lineWidth > 40 + state.indent: width decreases until the lower bound.\n // This behaves better than a constant minimum width which disallows narrower options,\n // or an indent threshold which causes the width to suddenly increase.\n var lineWidth = state.lineWidth === -1\n ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);\n\n // Without knowing if keys are implicit/explicit, assume implicit for safety.\n var singleLineOnly = iskey\n // No block styles in flow mode.\n || (state.flowLevel > -1 && level >= state.flowLevel);\n function testAmbiguity(string) {\n return testImplicitResolving(state, string);\n }\n\n switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth,\n testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) {\n\n case STYLE_PLAIN:\n return string;\n case STYLE_SINGLE:\n return \"'\" + string.replace(/'/g, \"''\") + \"'\";\n case STYLE_LITERAL:\n return '|' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(string, indent));\n case STYLE_FOLDED:\n return '>' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(foldString(string, lineWidth), indent));\n case STYLE_DOUBLE:\n return '\"' + escapeString(string) + '\"';\n default:\n throw new exception('impossible error: invalid scalar style');\n }\n }());\n}\n\n// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.\nfunction blockHeader(string, indentPerLevel) {\n var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';\n\n // note the special case: the string '\\n' counts as a \"trailing\" empty line.\n var clip = string[string.length - 1] === '\\n';\n var keep = clip && (string[string.length - 2] === '\\n' || string === '\\n');\n var chomp = keep ? '+' : (clip ? '' : '-');\n\n return indentIndicator + chomp + '\\n';\n}\n\n// (See the note for writeScalar.)\nfunction dropEndingNewline(string) {\n return string[string.length - 1] === '\\n' ? string.slice(0, -1) : string;\n}\n\n// Note: a long line without a suitable break point will exceed the width limit.\n// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.\nfunction foldString(string, width) {\n // In folded style, $k$ consecutive newlines output as $k+1$ newlines—\n // unless they're before or after a more-indented line, or at the very\n // beginning or end, in which case $k$ maps to $k$.\n // Therefore, parse each chunk as newline(s) followed by a content line.\n var lineRe = /(\\n+)([^\\n]*)/g;\n\n // first line (possibly an empty line)\n var result = (function () {\n var nextLF = string.indexOf('\\n');\n nextLF = nextLF !== -1 ? nextLF : string.length;\n lineRe.lastIndex = nextLF;\n return foldLine(string.slice(0, nextLF), width);\n }());\n // If we haven't reached the first content line yet, don't add an extra \\n.\n var prevMoreIndented = string[0] === '\\n' || string[0] === ' ';\n var moreIndented;\n\n // rest of the lines\n var match;\n while ((match = lineRe.exec(string))) {\n var prefix = match[1], line = match[2];\n moreIndented = (line[0] === ' ');\n result += prefix\n + (!prevMoreIndented && !moreIndented && line !== ''\n ? '\\n' : '')\n + foldLine(line, width);\n prevMoreIndented = moreIndented;\n }\n\n return result;\n}\n\n// Greedy line breaking.\n// Picks the longest line under the limit each time,\n// otherwise settles for the shortest line over the limit.\n// NB. More-indented lines *cannot* be folded, as that would add an extra \\n.\nfunction foldLine(line, width) {\n if (line === '' || line[0] === ' ') return line;\n\n // Since a more-indented line adds a \\n, breaks can't be followed by a space.\n var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.\n var match;\n // start is an inclusive index. end, curr, and next are exclusive.\n var start = 0, end, curr = 0, next = 0;\n var result = '';\n\n // Invariants: 0 <= start <= length-1.\n // 0 <= curr <= next <= max(0, length-2). curr - start <= width.\n // Inside the loop:\n // A match implies length >= 2, so curr and next are <= length-2.\n while ((match = breakRe.exec(line))) {\n next = match.index;\n // maintain invariant: curr - start <= width\n if (next - start > width) {\n end = (curr > start) ? curr : next; // derive end <= length-2\n result += '\\n' + line.slice(start, end);\n // skip the space that was output as \\n\n start = end + 1; // derive start <= length-1\n }\n curr = next;\n }\n\n // By the invariants, start <= length-1, so there is something left over.\n // It is either the whole string or a part starting from non-whitespace.\n result += '\\n';\n // Insert a break if the remainder is too long and there is a break available.\n if (line.length - start > width && curr > start) {\n result += line.slice(start, curr) + '\\n' + line.slice(curr + 1);\n } else {\n result += line.slice(start);\n }\n\n return result.slice(1); // drop extra \\n joiner\n}\n\n// Escapes a double-quoted string.\nfunction escapeString(string) {\n var result = '';\n var char = 0;\n var escapeSeq;\n\n for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n escapeSeq = ESCAPE_SEQUENCES[char];\n\n if (!escapeSeq && isPrintable(char)) {\n result += string[i];\n if (char >= 0x10000) result += string[i + 1];\n } else {\n result += escapeSeq || encodeHex(char);\n }\n }\n\n return result;\n}\n\nfunction writeFlowSequence(state, level, object) {\n var _result = '',\n _tag = state.tag,\n index,\n length,\n value;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n\n // Write only valid elements, put null instead of invalid elements.\n if (writeNode(state, level, value, false, false) ||\n (typeof value === 'undefined' &&\n writeNode(state, level, null, false, false))) {\n\n if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : '');\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = '[' + _result + ']';\n}\n\nfunction writeBlockSequence(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n index,\n length,\n value;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n\n // Write only valid elements, put null instead of invalid elements.\n if (writeNode(state, level + 1, value, true, true, false, true) ||\n (typeof value === 'undefined' &&\n writeNode(state, level + 1, null, true, true, false, true))) {\n\n if (!compact || _result !== '') {\n _result += generateNextLine(state, level);\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n _result += '-';\n } else {\n _result += '- ';\n }\n\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = _result || '[]'; // Empty sequence if no valid values.\n}\n\nfunction writeFlowMapping(state, level, object) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n pairBuffer;\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n\n pairBuffer = '';\n if (_result !== '') pairBuffer += ', ';\n\n if (state.condenseFlow) pairBuffer += '\"';\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n\n if (!writeNode(state, level, objectKey, false, false)) {\n continue; // Skip this pair because of invalid key;\n }\n\n if (state.dump.length > 1024) pairBuffer += '? ';\n\n pairBuffer += state.dump + (state.condenseFlow ? '\"' : '') + ':' + (state.condenseFlow ? '' : ' ');\n\n if (!writeNode(state, level, objectValue, false, false)) {\n continue; // Skip this pair because of invalid value.\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = '{' + _result + '}';\n}\n\nfunction writeBlockMapping(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n explicitPair,\n pairBuffer;\n\n // Allow sorting keys so that the output file is deterministic\n if (state.sortKeys === true) {\n // Default sorting\n objectKeyList.sort();\n } else if (typeof state.sortKeys === 'function') {\n // Custom sort function\n objectKeyList.sort(state.sortKeys);\n } else if (state.sortKeys) {\n // Something is wrong\n throw new exception('sortKeys must be a boolean or a function');\n }\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n pairBuffer = '';\n\n if (!compact || _result !== '') {\n pairBuffer += generateNextLine(state, level);\n }\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n\n if (!writeNode(state, level + 1, objectKey, true, true, true)) {\n continue; // Skip this pair because of invalid key.\n }\n\n explicitPair = (state.tag !== null && state.tag !== '?') ||\n (state.dump && state.dump.length > 1024);\n\n if (explicitPair) {\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += '?';\n } else {\n pairBuffer += '? ';\n }\n }\n\n pairBuffer += state.dump;\n\n if (explicitPair) {\n pairBuffer += generateNextLine(state, level);\n }\n\n if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {\n continue; // Skip this pair because of invalid value.\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += ':';\n } else {\n pairBuffer += ': ';\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = _result || '{}'; // Empty mapping if no valid pairs.\n}\n\nfunction detectType(state, object, explicit) {\n var _result, typeList, index, length, type, style;\n\n typeList = explicit ? state.explicitTypes : state.implicitTypes;\n\n for (index = 0, length = typeList.length; index < length; index += 1) {\n type = typeList[index];\n\n if ((type.instanceOf || type.predicate) &&\n (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) &&\n (!type.predicate || type.predicate(object))) {\n\n if (explicit) {\n if (type.multi && type.representName) {\n state.tag = type.representName(object);\n } else {\n state.tag = type.tag;\n }\n } else {\n state.tag = '?';\n }\n\n if (type.represent) {\n style = state.styleMap[type.tag] || type.defaultStyle;\n\n if (_toString.call(type.represent) === '[object Function]') {\n _result = type.represent(object, style);\n } else if (_hasOwnProperty.call(type.represent, style)) {\n _result = type.represent[style](object, style);\n } else {\n throw new exception('!<' + type.tag + '> tag resolver accepts not \"' + style + '\" style');\n }\n\n state.dump = _result;\n }\n\n return true;\n }\n }\n\n return false;\n}\n\n// Serializes `object` and writes it to global `result`.\n// Returns true on success, or false on invalid object.\n//\nfunction writeNode(state, level, object, block, compact, iskey, isblockseq) {\n state.tag = null;\n state.dump = object;\n\n if (!detectType(state, object, false)) {\n detectType(state, object, true);\n }\n\n var type = _toString.call(state.dump);\n var inblock = block;\n var tagStr;\n\n if (block) {\n block = (state.flowLevel < 0 || state.flowLevel > level);\n }\n\n var objectOrArray = type === '[object Object]' || type === '[object Array]',\n duplicateIndex,\n duplicate;\n\n if (objectOrArray) {\n duplicateIndex = state.duplicates.indexOf(object);\n duplicate = duplicateIndex !== -1;\n }\n\n if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) {\n compact = false;\n }\n\n if (duplicate && state.usedDuplicates[duplicateIndex]) {\n state.dump = '*ref_' + duplicateIndex;\n } else {\n if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {\n state.usedDuplicates[duplicateIndex] = true;\n }\n if (type === '[object Object]') {\n if (block && (Object.keys(state.dump).length !== 0)) {\n writeBlockMapping(state, level, state.dump, compact);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowMapping(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object Array]') {\n if (block && (state.dump.length !== 0)) {\n if (state.noArrayIndent && !isblockseq && level > 0) {\n writeBlockSequence(state, level - 1, state.dump, compact);\n } else {\n writeBlockSequence(state, level, state.dump, compact);\n }\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowSequence(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object String]') {\n if (state.tag !== '?') {\n writeScalar(state, state.dump, level, iskey, inblock);\n }\n } else if (type === '[object Undefined]') {\n return false;\n } else {\n if (state.skipInvalid) return false;\n throw new exception('unacceptable kind of an object to dump ' + type);\n }\n\n if (state.tag !== null && state.tag !== '?') {\n // Need to encode all characters except those allowed by the spec:\n //\n // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */\n // [36] ns-hex-digit ::= ns-dec-digit\n // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */\n // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */\n // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-”\n // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#”\n // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,”\n // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]”\n //\n // Also need to encode '!' because it has special meaning (end of tag prefix).\n //\n tagStr = encodeURI(\n state.tag[0] === '!' ? state.tag.slice(1) : state.tag\n ).replace(/!/g, '%21');\n\n if (state.tag[0] === '!') {\n tagStr = '!' + tagStr;\n } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') {\n tagStr = '!!' + tagStr.slice(18);\n } else {\n tagStr = '!<' + tagStr + '>';\n }\n\n state.dump = tagStr + ' ' + state.dump;\n }\n }\n\n return true;\n}\n\nfunction getDuplicateReferences(object, state) {\n var objects = [],\n duplicatesIndexes = [],\n index,\n length;\n\n inspectNode(object, objects, duplicatesIndexes);\n\n for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {\n state.duplicates.push(objects[duplicatesIndexes[index]]);\n }\n state.usedDuplicates = new Array(length);\n}\n\nfunction inspectNode(object, objects, duplicatesIndexes) {\n var objectKeyList,\n index,\n length;\n\n if (object !== null && typeof object === 'object') {\n index = objects.indexOf(object);\n if (index !== -1) {\n if (duplicatesIndexes.indexOf(index) === -1) {\n duplicatesIndexes.push(index);\n }\n } else {\n objects.push(object);\n\n if (Array.isArray(object)) {\n for (index = 0, length = object.length; index < length; index += 1) {\n inspectNode(object[index], objects, duplicatesIndexes);\n }\n } else {\n objectKeyList = Object.keys(object);\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);\n }\n }\n }\n }\n}\n\nfunction dump$1(input, options) {\n options = options || {};\n\n var state = new State(options);\n\n if (!state.noRefs) getDuplicateReferences(input, state);\n\n var value = input;\n\n if (state.replacer) {\n value = state.replacer.call({ '': value }, '', value);\n }\n\n if (writeNode(state, 0, value, true, true)) return state.dump + '\\n';\n\n return '';\n}\n\nvar dump_1 = dump$1;\n\nvar dumper = {\n\tdump: dump_1\n};\n\nfunction renamed(from, to) {\n return function () {\n throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' +\n 'Use yaml.' + to + ' instead, which is now safe by default.');\n };\n}\n\n\nvar Type = type;\nvar Schema = schema;\nvar FAILSAFE_SCHEMA = failsafe;\nvar JSON_SCHEMA = json;\nvar CORE_SCHEMA = core;\nvar DEFAULT_SCHEMA = _default;\nvar load = loader.load;\nvar loadAll = loader.loadAll;\nvar dump = dumper.dump;\nvar YAMLException = exception;\n\n// Re-export all types in case user wants to create custom schema\nvar types = {\n binary: binary,\n float: float,\n map: map,\n null: _null,\n pairs: pairs,\n set: set,\n timestamp: timestamp,\n bool: bool,\n int: int,\n merge: merge,\n omap: omap,\n seq: seq,\n str: str\n};\n\n// Removed functions from JS-YAML 3.0.x\nvar safeLoad = renamed('safeLoad', 'load');\nvar safeLoadAll = renamed('safeLoadAll', 'loadAll');\nvar safeDump = renamed('safeDump', 'dump');\n\nvar jsYaml = {\n\tType: Type,\n\tSchema: Schema,\n\tFAILSAFE_SCHEMA: FAILSAFE_SCHEMA,\n\tJSON_SCHEMA: JSON_SCHEMA,\n\tCORE_SCHEMA: CORE_SCHEMA,\n\tDEFAULT_SCHEMA: DEFAULT_SCHEMA,\n\tload: load,\n\tloadAll: loadAll,\n\tdump: dump,\n\tYAMLException: YAMLException,\n\ttypes: types,\n\tsafeLoad: safeLoad,\n\tsafeLoadAll: safeLoadAll,\n\tsafeDump: safeDump\n};\n\nexport { CORE_SCHEMA, DEFAULT_SCHEMA, FAILSAFE_SCHEMA, JSON_SCHEMA, Schema, Type, YAMLException, jsYaml as default, dump, load, loadAll, safeDump, safeLoad, safeLoadAll, types };\n","import { z } from 'zod'\n\n// ── Reference syntax patterns ─────────────────────────────────────────────────\n// $env:VAR_NAME | $secret:name | $file:path | $func:now_iso | literal string\nconst refOrLiteral = z.string()\nconst refDesc =\n 'Supports reference syntax: \"$env:VAR_NAME\" (env var), \"$secret:name\" (secret manager), \"$file:path\" (file relative to agent.yaml), or a literal string value.'\n\n// ── Metadata ──────────────────────────────────────────────────────────────────\nconst MetadataSchema = z.object({\n name: z.string().min(1).regex(/^[a-z0-9-]+$/, 'Must be a lowercase slug'),\n version: z\n .string()\n .regex(/^\\d+\\.\\d+\\.\\d+$/, 'Must be semver (e.g. 1.0.0)'),\n description: z.string().min(1),\n tags: z.array(z.string()).optional()\n .describe('Free-form tags for filtering and discovery (e.g. [\"finance\", \"rag\", \"internal\"]).'),\n author: z.string().optional(),\n license: z.string().optional()\n .describe('SPDX license identifier (e.g. \"MIT\", \"Apache-2.0\", \"proprietary\").'),\n})\n\n// ── Model ─────────────────────────────────────────────────────────────────────\nconst ModelFallbackSchema = z.object({\n provider: z.string()\n .describe('LLM provider for the fallback model. Common values: \"openai\", \"anthropic\", \"groq\", \"google\", \"mistral\", \"azure\", \"bedrock\".'),\n id: z.string()\n .describe('Model ID for the fallback (e.g. \"gpt-4o-mini\", \"claude-haiku-4-5-20251001\"). Must be a valid ID for the declared provider.'),\n apiKey: refOrLiteral.describe(refDesc),\n triggerOn: z\n .array(z.enum(['rate_limit', 'timeout', 'error_5xx', 'error_4xx']))\n .optional()\n .describe('Conditions that trigger failover to this model. Omit to use the fallback for all errors.'),\n maxRetries: z.number().int().min(0).max(10).optional()\n .describe('Number of retry attempts before failing over. Defaults to 0 (immediate failover).'),\n})\n\nconst ModelSchema = z.object({\n provider: z.string()\n .describe('LLM provider. Common values: \"openai\", \"anthropic\", \"groq\", \"google\", \"mistral\", \"azure\", \"bedrock\". Determines the API client and base URL used.'),\n id: z.string()\n .describe('Exact model ID as accepted by the provider API (e.g. \"gpt-4o\", \"claude-sonnet-4-6\", \"llama-3.1-70b-versatile\"). Check provider docs for valid IDs.'),\n apiKey: refOrLiteral.describe(refDesc),\n parameters: z\n .object({\n temperature: z.number().min(0).max(2).optional()\n .describe('Sampling temperature. 0 = deterministic/focused, 1 = balanced, 2 = highly creative. Most providers recommend 0–1 for production agents.'),\n maxTokens: z.number().int().min(1).optional()\n .describe('Maximum tokens in the model response. Controls cost and latency. Check model context window limits.'),\n topP: z.number().min(0).max(1).optional()\n .describe('Nucleus sampling threshold. The model samples from the smallest set of tokens whose cumulative probability exceeds topP. Alternative to temperature — do not set both.'),\n frequencyPenalty: z.number().optional()\n .describe('Penalises tokens that have already appeared frequently in the output (-2.0–2.0). Positive values reduce repetition.'),\n presencePenalty: z.number().optional()\n .describe('Penalises tokens that appear at all in the output so far (-2.0–2.0). Positive values encourage the model to introduce new topics.'),\n })\n .optional(),\n fallback: ModelFallbackSchema.optional(),\n costControls: z\n .object({\n maxMonthlyUSD: z.number().positive().optional()\n .describe('Hard monthly spend cap in USD. Requests are rejected once this limit is reached.'),\n alertAtUSD: z.number().positive().optional()\n .describe('Send an alert when cumulative monthly spend crosses this USD threshold. Must be less than maxMonthlyUSD.'),\n })\n .optional(),\n})\n\n// ── Prompts ───────────────────────────────────────────────────────────────────\nconst PromptVariableSchema = z.object({\n name: z.string()\n .describe('Variable name used in the prompt template (e.g. \"user_name\" for {{user_name}}).'),\n value: refOrLiteral.describe(refDesc),\n})\n\nconst PromptsSchema = z.object({\n system: refOrLiteral\n .describe('System prompt. Use \"$file:prompts/system.md\" to load from a file (recommended for long prompts), or provide an inline string. ' + refDesc),\n fallback: z.string().optional()\n .describe('Inline fallback system prompt used if the primary system prompt file cannot be loaded. Only applies when \"system\" is a $file: reference.'),\n hotReload: z.boolean().optional().default(false)\n .describe('When true, the system prompt file is re-read on every request instead of being cached at startup. Useful for rapid iteration without restarts.'),\n variables: z.array(PromptVariableSchema).optional()\n .describe('Template variables injected into the system prompt at runtime. Values support reference syntax for secrets and env vars.'),\n})\n\n// ── Tools ─────────────────────────────────────────────────────────────────────\nconst ToolAnnotationsSchema = z.object({\n readOnlyHint: z.boolean().optional()\n .describe('MCP hint: tool does not modify state. Allows clients to show a read-only badge and skip confirmation prompts.'),\n destructiveHint: z.boolean().optional()\n .describe('MCP hint: tool may perform irreversible actions (delete, overwrite). Triggers human-in-the-loop approval when humanInTheLoop.approvalRequired includes \"before-destructive-tool\".'),\n idempotentHint: z.boolean().optional()\n .describe('MCP hint: calling the tool multiple times with the same inputs produces the same result. Allows safe retries.'),\n openWorldHint: z.boolean().optional()\n .describe('MCP hint: tool interacts with systems outside the agent\\'s controlled environment (e.g. the internet). Affects trust level in tool outputs.'),\n})\n\nconst ToolSchema = z.object({\n name: z\n .string()\n .min(1)\n .regex(/^[a-z0-9-]+$/, 'Tool name must be a lowercase slug'),\n type: z.enum(['function', 'mcp', 'builtin'])\n .describe('\"function\" = local code module, \"mcp\" = registered via an MCP server in spec.mcp, \"builtin\" = provided by the runtime (e.g. code-interpreter, web-search).'),\n description: z.string()\n .describe('Human-readable description of what the tool does and when the agent should use it. This text is included in the tool-call prompt.'),\n module: z.string().optional()\n .describe('Path to the module that implements this tool. Use \"$file:tools/my_tool.py\" syntax. Only required for type \"function\".'),\n function: z.string().optional()\n .describe('Name of the callable function exported from the module (e.g. \"search\", \"run_query\"). Only required for type \"function\".'),\n annotations: ToolAnnotationsSchema.optional(),\n})\n\n// ── MCP Servers ───────────────────────────────────────────────────────────────\nconst McpServerSchema = z.object({\n name: z.string(),\n transport: z.enum(['stdio', 'sse', 'http'])\n .describe('\"stdio\" = spawn a local process (requires \"command\"), \"sse\" = Server-Sent Events over HTTP, \"http\" = streamable HTTP (requires \"url\").'),\n command: z.string().optional()\n .describe('Shell command to spawn the MCP server process. Required for transport \"stdio\" (e.g. \"npx\", \"python\").'),\n args: z.array(z.string()).optional()\n .describe('Arguments passed to the command (e.g. [\"-m\", \"my_mcp_server\"]). Only used for transport \"stdio\".'),\n url: z.string().url().optional()\n .describe('Base URL of the remote MCP server. Required for transport \"sse\" or \"http\". ' + refDesc),\n env: z.record(z.string(), refOrLiteral).optional()\n .describe('Environment variables injected into the MCP server process. Values support reference syntax. Use \"$env:API_KEY\" to forward secrets without hardcoding.'),\n healthCheck: z\n .object({\n timeoutSeconds: z.number().int().min(1).max(60).default(5)\n .describe('Seconds to wait for the MCP server to respond during health checks. Increase for slow-starting processes.'),\n })\n .optional(),\n})\n\nconst McpSchema = z.object({\n servers: z.array(McpServerSchema),\n})\n\n// ── Memory ────────────────────────────────────────────────────────────────────\nconst ShortTermMemorySchema = z.object({\n backend: z.enum(['in-memory', 'redis', 'sqlite']),\n maxTurns: z.number().int().min(1).optional()\n .describe('Maximum number of conversation turns (user + assistant message pairs) to retain in context. Older turns are evicted first. Use with maxTokens for dual-bounded windows.'),\n maxTokens: z.number().int().min(1).optional()\n .describe('Maximum total tokens across all retained messages. When exceeded, oldest turns are evicted. Required by MEM-05 compliance rule.'),\n ttlSeconds: z.number().int().min(0).optional()\n .describe('Time-to-live in seconds for memory entries. 0 = session-scoped (cleared when connection closes). Omitting means no expiry — increases PII exposure risk (MEM-02).'),\n connection: refOrLiteral.optional()\n .describe('Connection string for redis or sqlite backends. ' + refDesc),\n})\n\nconst LongTermMemorySchema = z.object({\n backend: z.enum(['postgres', 'sqlite', 'mongodb']),\n connectionString: refOrLiteral\n .describe('Database connection URI. ' + refDesc),\n table: z.string().optional()\n .describe('Table or collection name where agent memories are stored. Defaults to \"agent_memories\" if omitted. Use a per-agent name to avoid cross-agent data leakage.'),\n ttlDays: z.number().int().min(1).optional()\n .describe('Time-to-live in days for long-term memory records. Omitting means no expiry — a compliance risk (MEM-02). Required by GDPR Article 5 data minimisation principle.'),\n})\n\nconst VectorMemorySchema = z.object({\n backend: z.enum(['pgvector', 'pinecone', 'weaviate', 'qdrant', 'chroma']),\n connectionString: refOrLiteral.optional()\n .describe('Connection URI for self-hosted backends (pgvector, weaviate, qdrant, chroma). ' + refDesc),\n apiKey: refOrLiteral.optional()\n .describe('API key for managed backends (Pinecone, Weaviate Cloud). ' + refDesc),\n dimension: z.number().int().min(1)\n .describe('Embedding vector dimension. Must exactly match the output dimension of your embedding model (e.g. 1536 for text-embedding-3-small, 768 for nomic-embed-text). Mismatch causes insertion errors.'),\n topK: z.number().int().min(1).optional()\n .describe('Number of nearest-neighbour results to retrieve per similarity search. Higher values improve recall at the cost of latency and context token usage.'),\n namespace: z.string().optional()\n .describe('Logical partition within the vector store. Required by MEM-04 to prevent cross-agent data leakage. Recommended value: the agent name (spec.metadata.name).'),\n})\n\nconst MemoryHygieneSchema = z.object({\n piiScrubFields: z.array(z.string()).optional()\n .describe(\n 'PII field names to scrub before writing to long-term or vector memory. Required when longTerm is set (MEM-01). ' +\n 'Use recogniser names compatible with your scrubbing library (e.g. Microsoft Presidio entity types): ' +\n '\"email\", \"phone_number\", \"credit_card\", \"iban\", \"ssn\", \"bank_account\", \"passport\", \"drivers_license\", ' +\n '\"person_name\", \"date_of_birth\", \"address\", \"ip_address\", \"api_key\", \"password\", \"medical_record\".'\n ),\n auditLog: z.boolean().optional().default(false)\n .describe('When true, all memory read and write operations are emitted as structured audit log events. Required for long-term memory (MEM-03) and HIPAA/SOC2 compliance.'),\n retentionPolicy: z.string().optional()\n .describe(\n 'Named governance or compliance retention policy applied to this agent\\'s memory. ' +\n 'Informational label — must be consistent with ttlSeconds/ttlDays on the backend configs. ' +\n 'Common values: \"session\" (cleared on disconnect), \"ephemeral\" (never persisted), ' +\n '\"30d\", \"90d\", \"1y\", \"persistent\" (explicit no-expiry opt-in), ' +\n '\"gdpr-30d\" (GDPR Art.5 minimum), \"hipaa-6y\" (HIPAA 45 CFR §164.530), \"pci-dss-1y\" (PCI DSS Req.10.7).'\n ),\n})\n\nconst MemorySchema = z.object({\n shortTerm: ShortTermMemorySchema.optional(),\n longTerm: LongTermMemorySchema.optional(),\n vector: VectorMemorySchema.optional(),\n hygiene: MemoryHygieneSchema.optional(),\n})\n\n// ── Sub-agents ────────────────────────────────────────────────────────────────\nconst SubagentRefSchema = z.union([\n z.object({ agentspec: z.string() }), // local file path\n z.object({\n a2a: z.object({\n url: refOrLiteral,\n auth: z\n .object({\n type: z.enum(['bearer', 'apikey', 'none']),\n token: refOrLiteral.optional(),\n header: z.string().optional()\n .describe('HTTP header name for the API key (e.g. \"X-API-Key\"). Only used when auth type is \"apikey\".'),\n })\n .optional(),\n }),\n }),\n])\n\nconst SubagentSchema = z.object({\n name: z.string(),\n ref: SubagentRefSchema,\n invocation: z.enum(['parallel', 'sequential', 'on-demand'])\n .describe('\"parallel\" = invoked concurrently with other subagents, \"sequential\" = invoked in order after previous subagents complete, \"on-demand\" = only invoked when the agent decides it is needed (triggered by LLM or triggerKeywords).'),\n passContext: z.boolean().optional().default(false)\n .describe('When true, the current conversation thread (messages so far) is forwarded to the subagent as context. Use with care — increases token usage and may leak sensitive conversation history.'),\n triggerKeywords: z.array(z.string()).optional()\n .describe('Keywords in user messages that automatically trigger this subagent (only applies when invocation is \"on-demand\"). Case-insensitive substring match.'),\n})\n\n// ── API ───────────────────────────────────────────────────────────────────────\nconst ChatEndpointSchema = z.object({\n path: z.string().optional().default('/v1/chat')\n .describe('URL path for the chat endpoint (e.g. \"/v1/chat\", \"/api/chat\"). Must start with \"/\".'),\n protocol: z.enum(['openai-compatible', 'custom']).optional().default('openai-compatible')\n .describe('\"openai-compatible\" = request/response shape matches the OpenAI Chat Completions API (enables drop-in compatibility with OpenAI SDKs). \"custom\" = proprietary shape defined by the agent.'),\n streaming: z.boolean().optional().default(true)\n .describe('When true, the endpoint supports Server-Sent Events streaming responses. Clients receive tokens as they are generated.'),\n sessionMode: z.enum(['stateful', 'stateless']).optional().default('stateful')\n .describe('\"stateful\" = conversation history is persisted per thread (requires threadIdHeader). \"stateless\" = each request is independent; no memory across calls.'),\n threadIdHeader: z.string().optional().default('X-Thread-Id')\n .describe('HTTP request header used to identify the conversation thread for stateful session routing (e.g. \"X-Thread-Id\", \"X-Session-Id\").'),\n})\n\nconst ApiSchema = z.object({\n type: z.enum(['rest', 'mcp', 'grpc', 'websocket']),\n port: z.number().int().min(1).max(65535).optional(),\n pathPrefix: z.string().optional()\n .describe('URL path prefix applied to all API routes (e.g. \"/api/v1\"). Useful when the agent runs behind a reverse proxy.'),\n auth: z\n .object({\n type: z.enum(['jwt', 'apikey', 'oauth2', 'none']),\n jwksUri: refOrLiteral.optional()\n .describe('JWKS endpoint URL used to fetch public keys for JWT signature verification (e.g. \"https://your-auth.example.com/.well-known/jwks.json\"). ' + refDesc),\n header: z.string().optional()\n .describe('HTTP header name carrying the credential (e.g. \"Authorization\" for JWT bearer, \"X-API-Key\" for apikey auth). Defaults to \"Authorization\".'),\n })\n .optional(),\n rateLimit: z\n .object({\n requestsPerMinute: z.number().int().min(1).optional()\n .describe('Maximum requests allowed per client per minute. Excess requests receive HTTP 429.'),\n requestsPerHour: z.number().int().min(1).optional()\n .describe('Maximum requests allowed per client per hour. Excess requests receive HTTP 429.'),\n })\n .optional(),\n streaming: z.boolean().optional().default(false)\n .describe('When true, the API supports streaming responses (SSE). Set true for conversational agents to reduce perceived latency.'),\n healthEndpoint: z.string().optional()\n .describe('URL path for the health check endpoint (e.g. \"/health\", \"/ready\"). Exposes agentspec health report. Defaults to \"/agentspec/health\" when using the SDK.'),\n metricsEndpoint: z.string().optional()\n .describe('URL path where Prometheus-format metrics are exposed (e.g. \"/metrics\"). Required for observability.metrics to be scraped.'),\n corsOrigins: z.array(z.string()).optional()\n .describe('Allowed CORS origins for browser clients (e.g. [\"https://app.example.com\", \"http://localhost:3000\"]). Use [\"*\"] only for fully public APIs.'),\n /** Declares the conversational chat endpoint for this agent */\n chatEndpoint: ChatEndpointSchema.optional(),\n})\n\n// ── Skills ────────────────────────────────────────────────────────────────────\nconst SkillSchema = z.object({\n id: z.string()\n .describe('Skill identifier as registered in the runtime skill registry (e.g. \"code-interpreter\", \"image-gen\").'),\n version: z.string().optional()\n .describe('Pinned skill version. Omit to use the latest available version. Semver range or exact version string.'),\n})\n\n// ── Guardrails ────────────────────────────────────────────────────────────────\nconst InputGuardrailSchema = z.discriminatedUnion('type', [\n z.object({\n type: z.literal('topic-filter'),\n blockedTopics: z.array(z.string())\n .describe('Topics or keywords that should be blocked in user input (e.g. [\"competitor-names\", \"legal-advice\"]). Case-insensitive substring match against the full message.'),\n action: z.enum(['reject', 'warn', 'log'])\n .describe('\"reject\" = refuse the request and return an error, \"warn\" = continue but emit a warning event, \"log\" = silently log the violation.'),\n message: z.string().optional()\n .describe('Custom error message returned to the user when a topic is blocked. Defaults to a generic refusal message.'),\n }),\n z.object({\n type: z.literal('pii-detector'),\n action: z.enum(['scrub', 'reject', 'warn'])\n .describe('\"scrub\" = replace detected PII with placeholders before passing to the model, \"reject\" = refuse the request, \"warn\" = pass through but emit a warning event.'),\n fields: z.array(z.string()).optional()\n .describe('Specific PII entity types to detect. When omitted, all PII types supported by the detection library are scanned. Use the same entity names as in spec.memory.hygiene.piiScrubFields.'),\n }),\n z.object({\n type: z.literal('prompt-injection'),\n action: z.enum(['reject', 'warn']),\n sensitivity: z.enum(['low', 'medium', 'high']).optional()\n .describe('Detection sensitivity. \"low\" = only block obvious injection patterns, \"medium\" = balanced (default), \"high\" = aggressive — may produce false positives on legitimate complex instructions.'),\n }),\n z.object({\n type: z.literal('custom'),\n module: z.string()\n .describe('Path to the module implementing the guardrail function. Use \"$file:guardrails/my_check.py\" syntax.'),\n function: z.string()\n .describe('Name of the guardrail function exported from the module. Signature: (input: str) -> None (raise to block) or (input: str) -> str (return scrubbed value).'),\n action: z.enum(['reject', 'warn', 'log']),\n }),\n])\n\nconst OutputGuardrailSchema = z.discriminatedUnion('type', [\n z.object({\n type: z.literal('hallucination-detector'),\n threshold: z.number().min(0).max(1)\n .describe('Confidence score below which a response is considered hallucinated (0.0–1.0). 0.0 = block everything, 1.0 = block nothing. Typical value: 0.5–0.7.'),\n action: z.enum(['reject', 'retry', 'warn'])\n .describe('\"reject\" = return error to user, \"retry\" = re-invoke the model (up to maxRetries), \"warn\" = return response with a warning annotation.'),\n maxRetries: z.number().int().min(1).max(5).optional()\n .describe('Maximum re-generation attempts before giving up. Only used when action is \"retry\". Defaults to 1.'),\n }),\n z.object({\n type: z.literal('toxicity-filter'),\n threshold: z.number().min(0).max(1)\n .describe('Toxicity score above which a response is blocked (0.0–1.0). 0.0 = block all output, 1.0 = block nothing. Typical production value: 0.7–0.85.'),\n action: z.enum(['reject', 'warn']),\n }),\n z.object({\n type: z.literal('pii-detector'),\n action: z.enum(['scrub', 'reject', 'warn'])\n .describe('\"scrub\" = replace PII in the model output before returning to the user, \"reject\" = discard the response and return an error, \"warn\" = return with a warning annotation.'),\n fields: z.array(z.string()).optional()\n .describe('Specific PII entity types to detect in model output. Omit to scan all types. Use the same entity names as in spec.memory.hygiene.piiScrubFields.'),\n }),\n z.object({\n type: z.literal('custom'),\n module: z.string()\n .describe('Path to the module implementing the output guardrail. Use \"$file:guardrails/output_check.py\" syntax.'),\n function: z.string()\n .describe('Name of the guardrail function. Signature: (output: str) -> None (raise to block) or (output: str) -> str (return transformed value).'),\n action: z.enum(['reject', 'warn', 'log']),\n }),\n])\n\nconst GuardrailsSchema = z.object({\n input: z.array(InputGuardrailSchema).optional()\n .describe('Guardrails applied to user input before it is sent to the model. Evaluated in order — first blocking rule wins.'),\n output: z.array(OutputGuardrailSchema).optional()\n .describe('Guardrails applied to model output before it is returned to the user. Evaluated in order — first blocking rule wins.'),\n})\n\n// ── Evaluation ────────────────────────────────────────────────────────────────\nconst EvalMetricEnum = z.enum([\n 'faithfulness', // RAG: does the answer only use information from the retrieved context?\n 'answer_relevancy', // Is the answer relevant to the question?\n 'answer_similarity', // Semantic similarity between actual and expected output (embedding-based).\n 'hallucination', // Does the answer contain claims not grounded in context or facts?\n 'toxicity', // Does the answer contain harmful, offensive, or unsafe content?\n 'context_precision', // RAG: are the retrieved chunks actually relevant to the question?\n 'context_recall', // RAG: do the retrieved chunks cover the ground-truth answer?\n 'bias', // Does the answer exhibit demographic or political bias?\n 'custom', // Custom scorer defined in the evaluation framework config.\n])\n\nconst datasetPathDesc =\n 'Path to the evaluation dataset file (JSONL format). ' +\n 'Use \"$file:evals/my_dataset.jsonl\" syntax. ' +\n 'Each line is a JSON object with the following fields:\\n' +\n ' input (required) – user query sent to the agent.\\n' +\n ' expected (required) – expected output; used for string_match and answer_similarity scoring.\\n' +\n ' context (optional) – string[] of retrieved chunks the agent actually used. ' +\n 'Required for faithfulness, context_precision, hallucination metrics.\\n' +\n ' reference_contexts (optional) – string[] of ground-truth relevant chunks. ' +\n 'Required for context_recall metric.\\n' +\n ' tags (optional) – string[] labels for filtering with --tag.\\n' +\n ' metadata (optional) – arbitrary key/value pairs for reporting (e.g. {\"difficulty\": \"hard\"}).\\n' +\n 'Example: {\"input\":\"What is RAG?\",\"expected\":\"Retrieval Augmented Generation\",\"context\":[\"RAG combines retrieval...\"],\"tags\":[\"rag\"]}'\n\nconst EvaluationSchema = z.object({\n framework: z.enum(['deepeval', 'braintrust', 'langsmith', 'ragas', 'custom']),\n datasets: z\n .array(\n z.object({\n name: z.string()\n .describe('Unique dataset identifier, referenced by \"agentspec evaluate --dataset <name>\".'),\n path: refOrLiteral.describe(datasetPathDesc),\n metrics: z.array(EvalMetricEnum).optional()\n .describe(\n 'Metrics to compute for this specific dataset. ' +\n 'Overrides (narrows) spec.evaluation.metrics for this dataset only. ' +\n 'When omitted, the global spec.evaluation.metrics list is used. ' +\n 'Example: a RAG dataset sets [\"faithfulness\",\"context_recall\"] while a safety dataset sets [\"toxicity\",\"bias\"].'\n ),\n }),\n )\n .optional()\n .describe('Evaluation datasets. Each entry maps a name to a JSONL file and optionally scopes which metrics to compute.'),\n metrics: z\n .array(EvalMetricEnum)\n .optional()\n .describe(\n 'Default metrics to compute across all datasets that do not declare their own metrics. ' +\n '\"faithfulness\", \"context_precision\", \"context_recall\" require the \"context\" field in dataset samples. ' +\n '\"context_recall\" additionally requires \"reference_contexts\". ' +\n '\"custom\" requires a scorer registered in the evaluation framework config.'\n ),\n thresholds: z.record(z.string(), z.number().min(0).max(1)).optional()\n .describe('Pass/fail thresholds per metric (0.0–1.0). Key = metric name, value = minimum required score. Example: {\"faithfulness\": 0.8, \"answer_relevancy\": 0.75}. Used by ciGate and \"agentspec evaluate\".'),\n ciGate: z.boolean().optional().default(false)\n .describe('When true, \"agentspec evaluate\" exits with code 1 if any metric falls below its threshold. Blocks CI pipelines on evaluation regression (EVAL-01).'),\n})\n\n// ── Observability ─────────────────────────────────────────────────────────────\nconst ObservabilitySchema = z.object({\n tracing: z\n .object({\n backend: z.enum([\n 'langfuse',\n 'langsmith',\n 'agentops',\n 'otel',\n 'honeycomb',\n 'datadog',\n ]),\n endpoint: refOrLiteral.optional()\n .describe('Tracing collector endpoint URL. Required for \"otel\", \"honeycomb\", and self-hosted backends. ' + refDesc),\n publicKey: refOrLiteral.optional()\n .describe('Public/project API key for the tracing backend (e.g. Langfuse public key). ' + refDesc),\n secretKey: refOrLiteral.optional()\n .describe('Secret API key for the tracing backend (e.g. Langfuse secret key). Always use \"$secret:\" or \"$env:\" — never hardcode. ' + refDesc),\n sampleRate: z.number().min(0).max(1).optional().default(1.0)\n .describe('Fraction of requests to trace (0.0–1.0). 1.0 = trace every request (default), 0.1 = trace 10% for high-traffic cost savings. Set to 1.0 during development.'),\n })\n .optional(),\n metrics: z\n .object({\n backend: z.enum(['opentelemetry', 'prometheus', 'datadog']),\n endpoint: refOrLiteral.optional()\n .describe('Metrics export endpoint (e.g. OTLP endpoint for OpenTelemetry, Datadog agent URL). ' + refDesc),\n serviceName: z.string().optional()\n .describe('Service name used to label all emitted metrics and traces. Defaults to metadata.name. Use a consistent name across deployments for accurate dashboards.'),\n })\n .optional(),\n logging: z\n .object({\n level: z.enum(['debug', 'info', 'warn', 'error']).optional().default('info'),\n structured: z.boolean().optional().default(true)\n .describe('When true, logs are emitted as JSON objects (structured logging). Required for log aggregation platforms (Datadog, Splunk, CloudWatch). Set false only for local development readability.'),\n redactFields: z.array(z.string()).optional()\n .describe('Field names to redact from structured log output before writing to log sinks. Use the same values as spec.memory.hygiene.piiScrubFields plus any application-specific sensitive keys (e.g. [\"password\", \"credit_card\", \"session_token\"]).'),\n })\n .optional(),\n})\n\n// ── Compliance ────────────────────────────────────────────────────────────────\nconst ComplianceSuppressionSchema = z.object({\n rule: z.string()\n .describe('Rule ID to suppress (e.g. \"SEC-LLM-03\", \"MEM-02\"). Must match an existing compliance rule ID.'),\n reason: z.string()\n .describe('Human-readable justification for suppressing this rule. Required for audit trails. Example: \"Hallucination detection handled by external Lakera Guard proxy.\"'),\n approvedBy: z.string().optional()\n .describe('Name or identifier of the person who approved this suppression (e.g. \"security-team\", \"alice@example.com\"). Used for compliance sign-off tracking.'),\n expires: z.string().optional()\n .describe('ISO 8601 date (YYYY-MM-DD) when this suppression expires and should be re-evaluated (e.g. \"2025-12-31\"). Suppressions without an expiry are flagged in audits.'),\n})\n\nconst ComplianceSchema = z.object({\n packs: z\n .array(\n z.enum([\n 'owasp-llm-top10',\n 'memory-hygiene',\n 'model-resilience',\n 'evaluation-coverage',\n 'observability',\n 'metadata-quality',\n ]),\n )\n .optional()\n .describe('Compliance rule packs to evaluate during \"agentspec audit\". Each pack groups related rules. Omit to run all packs.'),\n suppressions: z.array(ComplianceSuppressionSchema).optional()\n .describe('Rules to suppress in audit output. Each suppression requires a reason and optional expiry date. Over-suppression is itself flagged.'),\n auditSchedule: z.enum(['daily', 'weekly', 'monthly', 'on-change']).optional()\n .describe('How often the compliance audit should be re-run in CI. \"on-change\" = re-audit on every manifest change (recommended). Informational — enforcement depends on your CI configuration.'),\n})\n\n// ── Runtime Requirements ──────────────────────────────────────────────────────\nconst RequiresSchema = z.object({\n envVars: z.array(z.string()).optional()\n .describe('Environment variable names that must be set at agent startup. The SDK validates these at load time and throws a descriptive error if any are missing (e.g. [\"OPENAI_API_KEY\", \"DATABASE_URL\"]).'),\n services: z\n .array(\n z.object({\n type: z.enum(['postgres', 'redis', 'mysql', 'mongodb', 'elasticsearch']),\n connection: refOrLiteral\n .describe('Connection URI for this service. ' + refDesc),\n }),\n )\n .optional()\n .describe('External services that must be reachable at startup. The SDK health check verifies TCP connectivity to each service.'),\n minimumMemoryMB: z.number().int().min(128).optional()\n .describe('Minimum RAM required to run the agent in megabytes (e.g. 512, 2048). Used by orchestrators for resource scheduling. Does not enforce a limit — purely declarative.'),\n nodeVersion: z.string().optional()\n .describe('Minimum Node.js version required, as a semver range or exact version (e.g. \">=20.0.0\", \"20.x\"). Used by CI and orchestrators for compatibility checks.'),\n pythonVersion: z.string().optional()\n .describe('Minimum Python version required, as a semver range or exact version (e.g. \">=3.11\", \"3.12\"). Used by CI and orchestrators for compatibility checks.'),\n})\n\n// ── Human-in-the-Loop ─────────────────────────────────────────────────────────\nconst HumanInTheLoopSchema = z.object({\n enabled: z.boolean().optional().default(false),\n approvalRequired: z\n .array(\n z.enum([\n 'before-destructive-tool',\n 'before-external-call',\n 'on-low-confidence',\n 'on-high-cost',\n 'always',\n ]),\n )\n .optional()\n .describe('Conditions that pause execution and request human approval. \"before-destructive-tool\" = any tool with destructiveHint=true, \"on-low-confidence\" = model confidence below a threshold, \"on-high-cost\" = single call exceeds cost controls.'),\n timeoutSeconds: z.number().int().min(1).max(3600).optional().default(300)\n .describe('Seconds to wait for human approval before executing the timeoutAction. Default 300s (5 minutes). Max 3600s (1 hour).'),\n timeoutAction: z.enum(['reject', 'proceed', 'escalate']).optional().default('reject')\n .describe('\"reject\" = abort the action and return an error (default, safest), \"proceed\" = continue without approval (use only for low-risk actions), \"escalate\" = forward to a higher-level approver or on-call channel.'),\n notifyVia: z\n .array(z.enum(['slack', 'email', 'webhook', 'console']))\n .optional()\n .describe('Channels used to notify humans when approval is required. Multiple channels can be specified; all are notified simultaneously.'),\n webhookUrl: refOrLiteral.optional()\n .describe('URL to POST approval requests to when notifyVia includes \"webhook\". The payload contains the pending action and a callback token. ' + refDesc),\n})\n\n// ── Full Spec ─────────────────────────────────────────────────────────────────\nconst SpecSchema = z.object({\n model: ModelSchema,\n prompts: PromptsSchema,\n tools: z.array(ToolSchema).optional(),\n mcp: McpSchema.optional(),\n memory: MemorySchema.optional(),\n subagents: z.array(SubagentSchema).optional(),\n api: ApiSchema.optional(),\n skills: z.array(SkillSchema).optional(),\n guardrails: GuardrailsSchema.optional(),\n humanInTheLoop: HumanInTheLoopSchema.optional(),\n evaluation: EvaluationSchema.optional(),\n observability: ObservabilitySchema.optional(),\n compliance: ComplianceSchema.optional(),\n requires: RequiresSchema.optional(),\n})\n\n// ── Top-level Manifest ────────────────────────────────────────────────────────\nexport const ManifestSchema = z.object({\n apiVersion: z.literal('agentspec.io/v1'),\n kind: z.literal('AgentSpec'),\n metadata: MetadataSchema,\n spec: SpecSchema,\n})\n\nexport type AgentSpecManifest = z.infer<typeof ManifestSchema>\nexport type AgentSpecMetadata = z.infer<typeof MetadataSchema>\nexport type AgentSpecModel = z.infer<typeof ModelSchema>\nexport type AgentSpecPrompts = z.infer<typeof PromptsSchema>\nexport type AgentSpecTool = z.infer<typeof ToolSchema>\nexport type AgentSpecMcpServer = z.infer<typeof McpServerSchema>\nexport type AgentSpecMemory = z.infer<typeof MemorySchema>\nexport type AgentSpecGuardrails = z.infer<typeof GuardrailsSchema>\nexport type AgentSpecHumanInTheLoop = z.infer<typeof HumanInTheLoopSchema>\nexport type AgentSpecChatEndpoint = z.infer<typeof ChatEndpointSchema>\nexport type AgentSpecEvaluation = z.infer<typeof EvaluationSchema>\nexport type AgentSpecObservability = z.infer<typeof ObservabilitySchema>\nexport type AgentSpecCompliance = z.infer<typeof ComplianceSchema>\nexport type AgentSpecRequires = z.infer<typeof RequiresSchema>\n","import { zodToJsonSchema } from 'zod-to-json-schema'\nimport { ManifestSchema } from './manifest.schema.js'\n\n/**\n * Export the AgentSpec manifest as a JSON Schema.\n * Used for IDE autocompletion and editor validation.\n */\nexport function exportJsonSchema(): object {\n return zodToJsonSchema(ManifestSchema, {\n name: 'AgentSpecManifest',\n $refStrategy: 'none',\n })\n}\n","import { readFileSync } from 'node:fs'\nimport { resolve, dirname, sep } from 'node:path'\n\nexport type SecretBackend = 'env' | 'vault' | 'aws' | 'gcp' | 'azure'\n\nexport interface ResolverOptions {\n /** Directory where agent.yaml lives — used to resolve $file: paths */\n baseDir: string\n /** Override the secret backend (default: AGENTSPEC_SECRET_BACKEND || 'env') */\n secretBackend?: SecretBackend\n /** If true, throw on missing $env vars. Default: true */\n failOnMissingEnv?: boolean\n}\n\n// Detect the reference type from a value string\nexport type RefType = 'env' | 'secret' | 'file' | 'func' | 'literal'\n\nexport function detectRefType(value: string): RefType {\n if (value.startsWith('$env:')) return 'env'\n if (value.startsWith('$secret:')) return 'secret'\n if (value.startsWith('$file:')) return 'file'\n if (value.startsWith('$func:')) return 'func'\n return 'literal'\n}\n\n/** Built-in $func: implementations */\nconst BUILTINS: Record<string, () => string> = {\n now_iso: () => new Date().toISOString(),\n now_unix: () => String(Math.floor(Date.now() / 1000)),\n now_date: () => new Date().toISOString().split('T')[0]!,\n}\n\n/**\n * Resolve a single reference value.\n * Returns the resolved string or null if optional and missing.\n */\nexport function resolveRef(\n value: string,\n opts: ResolverOptions,\n { optional = false }: { optional?: boolean } = {},\n): string {\n const refType = detectRefType(value)\n\n if (refType === 'literal') return value\n\n if (refType === 'env') {\n const varName = value.slice('$env:'.length)\n const resolved = process.env[varName]\n if (resolved === undefined) {\n if (optional || opts.failOnMissingEnv === false) return ''\n throw new Error(\n `Missing environment variable: ${varName}\\n` +\n ` Referenced as ${value}\\n` +\n ` Set ${varName} in your .env file or environment`,\n )\n }\n return resolved\n }\n\n if (refType === 'secret') {\n const secretName = value.slice('$secret:'.length)\n const backend: SecretBackend =\n opts.secretBackend ??\n ((process.env['AGENTSPEC_SECRET_BACKEND'] as SecretBackend) || 'env')\n return resolveSecret(secretName, backend)\n }\n\n if (refType === 'file') {\n const filePath = value.slice('$file:'.length)\n const absPath = resolve(opts.baseDir, filePath)\n\n // Path traversal guard: the resolved path must remain within baseDir\n const normalizedBase = resolve(opts.baseDir) + sep\n if (!absPath.startsWith(normalizedBase) && absPath !== resolve(opts.baseDir)) {\n throw new Error(\n `Path traversal detected in ${value}\\n` +\n ` Resolved to: ${absPath}\\n` +\n ` Which is outside baseDir: ${opts.baseDir}\\n` +\n ` Use paths relative to agent.yaml location only`,\n )\n }\n\n try {\n return readFileSync(absPath, 'utf-8')\n } catch {\n if (optional) return ''\n throw new Error(\n `Cannot read file referenced by ${value}\\n` +\n ` Resolved path: ${absPath}`,\n )\n }\n }\n\n if (refType === 'func') {\n const funcName = value.slice('$func:'.length)\n const fn = BUILTINS[funcName]\n if (!fn) {\n throw new Error(\n `Unknown $func: ${funcName}\\n` +\n ` Available functions: ${Object.keys(BUILTINS).join(', ')}`,\n )\n }\n return fn()\n }\n\n return value\n}\n\nfunction resolveSecret(name: string, backend: SecretBackend): string {\n switch (backend) {\n case 'env': {\n // Fallback: treat $secret:name as env var AGENTSPEC_SECRET_<NAME>\n const envKey = `AGENTSPEC_SECRET_${name.toUpperCase().replace(/-/g, '_')}`\n const val = process.env[envKey]\n if (!val) {\n throw new Error(\n `Secret \"${name}\" not found.\\n` +\n ` In 'env' backend, set environment variable: ${envKey}`,\n )\n }\n return val\n }\n case 'vault':\n case 'aws':\n case 'gcp':\n case 'azure':\n // In runtime, callers should have pre-resolved secrets before loading.\n // Throw a clear \"not implemented\" to guide users.\n throw new Error(\n `Secret backend \"${backend}\" requires async resolution.\\n` +\n ` Use loadManifestWithSecrets() which pre-fetches all secrets,\\n` +\n ` or set AGENTSPEC_SECRET_BACKEND=env and map secrets to env vars.`,\n )\n }\n}\n\n/**\n * Deeply walk a parsed YAML object and resolve all reference strings.\n * Returns a new object with all $ref values replaced.\n */\nexport function resolveRefs(\n obj: unknown,\n opts: ResolverOptions,\n): unknown {\n if (typeof obj === 'string') {\n return resolveRef(obj, opts, { optional: true })\n }\n if (Array.isArray(obj)) {\n return obj.map((item) => resolveRefs(item, opts))\n }\n if (obj !== null && typeof obj === 'object') {\n const result: Record<string, unknown> = {}\n for (const [key, val] of Object.entries(obj as Record<string, unknown>)) {\n result[key] = resolveRefs(val, opts)\n }\n return result\n }\n return obj\n}\n\n/**\n * Collect all $env: references from the raw manifest for health-check reporting.\n * Does NOT resolve them — just lists which env vars are referenced.\n */\nexport function collectEnvRefs(obj: unknown, refs: Set<string> = new Set()): Set<string> {\n if (typeof obj === 'string' && obj.startsWith('$env:')) {\n refs.add(obj.slice('$env:'.length))\n } else if (Array.isArray(obj)) {\n for (const item of obj) collectEnvRefs(item, refs)\n } else if (obj !== null && typeof obj === 'object') {\n for (const val of Object.values(obj as Record<string, unknown>)) {\n collectEnvRefs(val, refs)\n }\n }\n return refs\n}\n\n/**\n * Collect all $file: references from the raw manifest.\n */\nexport function collectFileRefs(obj: unknown, refs: Set<string> = new Set()): Set<string> {\n if (typeof obj === 'string' && obj.startsWith('$file:')) {\n refs.add(obj.slice('$file:'.length))\n } else if (Array.isArray(obj)) {\n for (const item of obj) collectFileRefs(item, refs)\n } else if (obj !== null && typeof obj === 'object') {\n for (const val of Object.values(obj as Record<string, unknown>)) {\n collectFileRefs(val, refs)\n }\n }\n return refs\n}\n","import { readFileSync } from 'node:fs'\nimport { resolve, dirname } from 'node:path'\nimport yaml from 'js-yaml'\nimport { ManifestSchema, type AgentSpecManifest } from '../schema/manifest.schema.js'\nimport { resolveRefs, type ResolverOptions } from './resolvers.js'\n\nexport interface LoadOptions {\n /**\n * Whether to resolve $env:, $secret:, $file:, $func: references.\n * Default: false — validation only, no I/O side effects.\n */\n resolve?: boolean\n /**\n * Override secret backend. Default: process.env.AGENTSPEC_SECRET_BACKEND || 'env'\n */\n secretBackend?: ResolverOptions['secretBackend']\n /**\n * Fail on missing env vars during resolution. Default: true\n */\n failOnMissingEnv?: boolean\n}\n\nexport interface ParsedManifest {\n /** The validated manifest (references NOT resolved unless opts.resolve=true) */\n manifest: AgentSpecManifest\n /** Absolute path to the agent.yaml file */\n filePath: string\n /** Directory containing agent.yaml — base for $file: resolution */\n baseDir: string\n /** Raw YAML string */\n raw: string\n}\n\n/**\n * Load and validate an agent.yaml manifest.\n *\n * @param filePath - absolute or relative path to agent.yaml\n * @param opts - loading options\n * @throws ZodError if the manifest fails validation\n * @throws Error if the file cannot be read or references cannot be resolved\n */\nexport function loadManifest(\n filePath: string,\n opts: LoadOptions = {},\n): ParsedManifest {\n const absPath = resolve(filePath)\n const baseDir = dirname(absPath)\n\n let raw: string\n try {\n raw = readFileSync(absPath, 'utf-8')\n } catch (err) {\n throw new Error(`Cannot read manifest: ${absPath}\\n ${String(err)}`)\n }\n\n let parsed: unknown\n try {\n // Use JSON_SCHEMA to prevent !!js/function and other unsafe YAML types\n // from executing code or extracting env vars when loading untrusted manifests.\n parsed = yaml.load(raw, { schema: yaml.JSON_SCHEMA })\n } catch (err) {\n throw new Error(`Invalid YAML in ${absPath}\\n ${String(err)}`)\n }\n\n // Optionally resolve all $-references before validation\n const toValidate =\n opts.resolve === true\n ? resolveRefs(parsed, {\n baseDir,\n secretBackend: opts.secretBackend,\n failOnMissingEnv: opts.failOnMissingEnv ?? true,\n })\n : parsed\n\n // Validate with Zod schema\n const manifest = ManifestSchema.parse(toValidate)\n\n return { manifest, filePath: absPath, baseDir, raw }\n}\n\n/**\n * Same as loadManifest but returns a Result instead of throwing.\n */\nexport function tryLoadManifest(\n filePath: string,\n opts: LoadOptions = {},\n): { ok: true; data: ParsedManifest } | { ok: false; error: Error } {\n try {\n return { ok: true, data: loadManifest(filePath, opts) }\n } catch (err) {\n return { ok: false, error: err instanceof Error ? err : new Error(String(err)) }\n }\n}\n","import type { Migration } from './index.js'\n\n/**\n * Migrates manifests from agentspec/v1alpha1 (pre-release) to agentspec.io/v1 (stable).\n *\n * Changes:\n * - apiVersion: agentspec/v1alpha1 → agentspec.io/v1\n * - kind defaults to 'AgentSpec' if missing\n */\nexport const v1alpha1ToV1: Migration = {\n from: 'agentspec/v1alpha1',\n to: 'agentspec.io/v1',\n\n migrate(raw: Record<string, unknown>): Record<string, unknown> {\n return {\n ...raw,\n apiVersion: 'agentspec.io/v1',\n kind: raw.kind ?? 'AgentSpec',\n }\n },\n}\n","import { v1alpha1ToV1 } from './v1alpha1-to-v1.js'\n\nexport interface Migration {\n from: string\n to: string\n migrate(raw: Record<string, unknown>): Record<string, unknown>\n}\n\nconst migrations: Migration[] = [v1alpha1ToV1]\n\nexport const LATEST_API_VERSION = 'agentspec.io/v1'\n\nexport function migrateManifest(raw: Record<string, unknown>): {\n result: Record<string, unknown>\n migrationsApplied: string[]\n} {\n let current = raw\n const migrationsApplied: string[] = []\n\n for (const m of migrations) {\n const version = (current.apiVersion as string | undefined) ?? ''\n if (version === m.from || version.startsWith(m.from)) {\n current = m.migrate(current)\n migrationsApplied.push(`${m.from} → ${m.to}`)\n }\n }\n\n return { result: current, migrationsApplied }\n}\n\nexport function detectVersion(raw: Record<string, unknown>): string {\n return (raw.apiVersion as string | undefined) ?? 'unknown'\n}\n\nexport function isLatestVersion(raw: Record<string, unknown>): boolean {\n return detectVersion(raw) === LATEST_API_VERSION\n}\n","import { existsSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport type { AgentSpecManifest } from '../../schema/manifest.schema.js'\nimport { collectEnvRefs, collectFileRefs } from '../../loader/resolvers.js'\nimport type { HealthCheck } from '../index.js'\n\nexport function runEnvChecks(\n manifest: AgentSpecManifest,\n rawManifest: unknown,\n): HealthCheck[] {\n const checks: HealthCheck[] = []\n\n // Collect all $env: references from the raw manifest\n const envRefs = collectEnvRefs(rawManifest)\n\n // Also include explicitly declared envVars from spec.requires\n const declared = manifest.spec.requires?.envVars ?? []\n for (const v of declared) envRefs.add(v)\n\n for (const varName of envRefs) {\n const present = process.env[varName] !== undefined && process.env[varName] !== ''\n checks.push({\n id: `env:${varName}`,\n category: 'env',\n status: present ? 'pass' : 'fail',\n severity: 'error',\n message: present\n ? undefined\n : `Environment variable ${varName} is not set`,\n remediation: present\n ? undefined\n : `Set ${varName} in your .env file or environment`,\n })\n }\n\n return checks\n}\n\nexport function runFileChecks(\n rawManifest: unknown,\n baseDir: string,\n): HealthCheck[] {\n const checks: HealthCheck[] = []\n const fileRefs = collectFileRefs(rawManifest)\n\n for (const filePath of fileRefs) {\n const absPath = resolve(baseDir, filePath)\n const exists = existsSync(absPath)\n checks.push({\n id: `file:${filePath}`,\n category: 'file',\n status: exists ? 'pass' : 'fail',\n severity: 'error',\n message: exists ? undefined : `Referenced file not found: ${filePath}`,\n remediation: exists\n ? undefined\n : `Create the file at ${absPath} or update the $file: reference`,\n })\n }\n\n return checks\n}\n","import type { AgentSpecModel } from '../../schema/manifest.schema.js'\nimport type { HealthCheck } from '../index.js'\n\nconst PROVIDER_ENDPOINTS: Record<string, string> = {\n openai: 'https://api.openai.com/v1/models',\n anthropic: 'https://api.anthropic.com/v1/models',\n groq: 'https://api.groq.com/openai/v1/models',\n azure: 'https://management.azure.com',\n google: 'https://generativelanguage.googleapis.com',\n mistral: 'https://api.mistral.ai/v1/models',\n cohere: 'https://api.cohere.ai/v1',\n together: 'https://api.together.xyz/v1/models',\n fireworks: 'https://api.fireworks.ai/inference/v1/models',\n}\n\nasync function checkModelEndpoint(\n provider: string,\n apiKey: string,\n timeoutMs = 5000,\n): Promise<{ reachable: boolean; latencyMs?: number; error?: string }> {\n const url = PROVIDER_ENDPOINTS[provider.toLowerCase()]\n if (!url) {\n return {\n reachable: true, // Unknown provider — assume reachable, can't check\n }\n }\n\n const start = Date.now()\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), timeoutMs)\n\n try {\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n }\n if (provider.toLowerCase() === 'anthropic') {\n headers['x-api-key'] = apiKey\n headers['anthropic-version'] = '2023-06-01'\n delete headers['Authorization']\n }\n\n const res = await fetch(url, { method: 'GET', headers, signal: controller.signal })\n const latencyMs = Date.now() - start\n\n // 200 or 401 means the endpoint is reachable (401 = bad key, but server is up)\n // 5xx means the server responded but returned an error — treat as unreachable\n const reachable = res.status < 500\n return {\n reachable,\n latencyMs,\n error: !reachable ? `HTTP ${res.status}` : undefined,\n }\n } catch (err) {\n const latencyMs = Date.now() - start\n const isTimeout = err instanceof Error && err.name === 'AbortError'\n return {\n reachable: false,\n latencyMs,\n error: isTimeout ? 'Request timed out' : String(err),\n }\n } finally {\n clearTimeout(timeout)\n }\n}\n\n/**\n * Resolve an API key reference to its actual value.\n * - `$env:VAR_NAME` → read from process.env (returns '' if not set)\n * - `$secret:...` → cannot resolve here, return ''\n * - `$file:...` → cannot resolve here, return ''\n * - literal value → returned as-is\n */\nfunction resolveApiKey(ref: string): string {\n if (ref.startsWith('$env:')) return process.env[ref.slice(5)] ?? ''\n if (ref.startsWith('$')) return '' // $secret:, $file:, etc. — cannot resolve\n return ref // literal value\n}\n\nexport async function runModelChecks(model: AgentSpecModel): Promise<HealthCheck[]> {\n const checks: HealthCheck[] = []\n\n // Resolve the api key — handles $env:VAR_NAME references from process.env\n const apiKey = resolveApiKey(model.apiKey)\n\n if (apiKey) {\n const { reachable, latencyMs, error } = await checkModelEndpoint(model.provider, apiKey)\n checks.push({\n id: `model:${model.provider}/${model.id}`,\n category: 'model',\n status: reachable ? 'pass' : 'fail',\n severity: 'error',\n latencyMs,\n message: reachable\n ? undefined\n : `Model endpoint for ${model.provider} is unreachable: ${error}`,\n remediation: reachable\n ? undefined\n : `Check that ${model.apiKey.startsWith('$') ? model.apiKey : '[api-key]'} is set and the ${model.provider} API is reachable`,\n })\n } else {\n // API key is unresolved — env check will catch it\n checks.push({\n id: `model:${model.provider}/${model.id}`,\n category: 'model',\n status: 'skip',\n severity: 'error',\n message: `Cannot check model endpoint: API key reference not resolved (${model.apiKey})`,\n })\n }\n\n // Check fallback model\n if (model.fallback) {\n const fallbackKey = resolveApiKey(model.fallback.apiKey)\n if (fallbackKey) {\n const { reachable, latencyMs, error } = await checkModelEndpoint(\n model.fallback.provider,\n fallbackKey,\n )\n checks.push({\n id: `model-fallback:${model.fallback.provider}/${model.fallback.id}`,\n category: 'model-fallback',\n status: reachable ? 'pass' : 'fail',\n severity: 'warning',\n latencyMs,\n message: reachable\n ? undefined\n : `Fallback model endpoint unreachable: ${error}`,\n remediation: reachable\n ? undefined\n : `Check that ${model.fallback.apiKey.startsWith('$') ? model.fallback.apiKey : '[api-key]'} is set and ${model.fallback.provider} API is reachable`,\n })\n } else {\n checks.push({\n id: `model-fallback:${model.fallback.provider}/${model.fallback.id}`,\n category: 'model-fallback',\n status: 'skip',\n severity: 'warning',\n message: `Cannot check fallback model: API key not resolved (${model.fallback.apiKey})`,\n })\n }\n }\n\n return checks\n}\n","import type { AgentSpecMcpServer } from '../../schema/manifest.schema.js'\nimport type { HealthCheck } from '../index.js'\n\nexport async function runMcpChecks(servers: AgentSpecMcpServer[]): Promise<HealthCheck[]> {\n const checks: HealthCheck[] = []\n\n for (const server of servers) {\n if (server.transport === 'sse' || server.transport === 'http') {\n // HTTP-based: can do a simple fetch health check\n const url = server.url\n if (url && !url.startsWith('$')) {\n const check = await checkHttpMcpServer(server.name, url)\n checks.push(check)\n } else {\n checks.push({\n id: `mcp:${server.name}`,\n category: 'mcp',\n status: 'skip',\n severity: 'warning',\n message: `Cannot check MCP server ${server.name}: URL not resolved`,\n })\n }\n } else if (server.transport === 'stdio') {\n // stdio: check if the command exists\n const check = await checkStdioMcpServer(server)\n checks.push(check)\n }\n }\n\n return checks\n}\n\nasync function checkHttpMcpServer(name: string, url: string): Promise<HealthCheck> {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), 5000)\n const start = Date.now()\n\n try {\n const res = await fetch(url, { signal: controller.signal })\n const latencyMs = Date.now() - start\n return {\n id: `mcp:${name}`,\n category: 'mcp',\n status: res.ok || res.status === 404 ? 'pass' : 'fail',\n severity: 'warning',\n latencyMs,\n message:\n res.status >= 500\n ? `MCP server ${name} returned HTTP ${res.status}`\n : undefined,\n }\n } catch (err) {\n const latencyMs = Date.now() - start\n const isTimeout = err instanceof Error && err.name === 'AbortError'\n return {\n id: `mcp:${name}`,\n category: 'mcp',\n status: 'fail',\n severity: 'warning',\n latencyMs,\n message: isTimeout\n ? `MCP server ${name} health check timed out`\n : `MCP server ${name} unreachable: ${String(err)}`,\n remediation: `Check that the MCP server ${name} is running and accessible`,\n }\n } finally {\n clearTimeout(timeout)\n }\n}\n\nasync function checkStdioMcpServer(server: AgentSpecMcpServer): Promise<HealthCheck> {\n // For stdio, we check if the command is available using `which` / `where`\n const command = server.command\n if (!command) {\n return {\n id: `mcp:${server.name}`,\n category: 'mcp',\n status: 'skip',\n severity: 'warning',\n message: `MCP server ${server.name} has no command specified`,\n }\n }\n\n // Validate command name to contain only safe characters (no shell metacharacters)\n if (!/^[a-zA-Z0-9._-]+$/.test(command)) {\n return {\n id: `mcp:${server.name}`,\n category: 'mcp',\n status: 'fail',\n severity: 'warning',\n message: `MCP server ${server.name} has unsafe command name: \"${command}\"`,\n remediation: 'MCP server command must match /^[a-zA-Z0-9._-]+$/',\n }\n }\n\n try {\n // Use execFileSync (not execSync) — does NOT invoke a shell, prevents injection\n const { execFileSync } = await import('node:child_process')\n const whichBin = process.platform === 'win32' ? 'where' : 'which'\n execFileSync(whichBin, [command], { stdio: 'ignore' })\n return {\n id: `mcp:${server.name}`,\n category: 'mcp',\n status: 'pass',\n severity: 'warning',\n message: undefined,\n }\n } catch {\n return {\n id: `mcp:${server.name}`,\n category: 'mcp',\n status: 'fail',\n severity: 'warning',\n message: `MCP server ${server.name} command not found: ${command}`,\n remediation: `Install ${command} or add it to PATH`,\n }\n }\n}\n","import type { AgentSpecMemory } from '../../schema/manifest.schema.js'\nimport type { HealthCheck } from '../index.js'\n\nexport async function runMemoryChecks(memory: AgentSpecMemory): Promise<HealthCheck[]> {\n const checks: HealthCheck[] = []\n\n if (memory.shortTerm) {\n const st = memory.shortTerm\n const connection = st.connection\n\n if (st.backend === 'redis' && connection && !connection.startsWith('$')) {\n checks.push(await checkRedis(connection))\n } else if (st.backend === 'in-memory') {\n checks.push({\n id: 'memory.shortTerm:in-memory',\n category: 'memory',\n status: 'pass',\n severity: 'warning',\n message: undefined,\n })\n } else {\n checks.push({\n id: `memory.shortTerm:${st.backend}`,\n category: 'memory',\n status: 'skip',\n severity: 'warning',\n message: `Cannot check ${st.backend} connection: connection string not resolved`,\n })\n }\n }\n\n if (memory.longTerm) {\n const lt = memory.longTerm\n const conn = lt.connectionString\n\n if (!conn.startsWith('$')) {\n if (lt.backend === 'postgres') {\n checks.push(await checkPostgres(conn))\n } else {\n checks.push({\n id: `memory.longTerm:${lt.backend}`,\n category: 'memory',\n status: 'skip',\n severity: 'warning',\n message: `${lt.backend} connectivity check not yet supported`,\n })\n }\n } else {\n checks.push({\n id: `memory.longTerm:${lt.backend}`,\n category: 'memory',\n status: 'skip',\n severity: 'warning',\n message: `Cannot check ${lt.backend}: connection string not resolved (${conn})`,\n })\n }\n }\n\n if (memory.vector) {\n const v = memory.vector\n const conn = v.connectionString ?? v.apiKey\n\n if (conn && !conn.startsWith('$')) {\n if (v.backend === 'pgvector') {\n checks.push(await checkPostgres(conn, 'memory.vector:pgvector'))\n } else {\n checks.push({\n id: `memory.vector:${v.backend}`,\n category: 'memory',\n status: 'skip',\n severity: 'warning',\n message: `${v.backend} connectivity check not yet supported`,\n })\n }\n } else {\n checks.push({\n id: `memory.vector:${v.backend}`,\n category: 'memory',\n status: 'skip',\n severity: 'warning',\n message: `Cannot check ${v.backend}: connection not resolved`,\n })\n }\n }\n\n return checks\n}\n\nasync function checkRedis(url: string): Promise<HealthCheck> {\n const start = Date.now()\n try {\n // Basic TCP connectivity check using Node's net module\n const { createConnection } = await import('node:net')\n const parsed = new URL(url)\n const port = parseInt(parsed.port || '6379', 10)\n const host = parsed.hostname || 'localhost'\n\n await new Promise<void>((resolve, reject) => {\n const socket = createConnection({ port, host }, () => {\n socket.destroy()\n resolve()\n })\n // Ensure socket is destroyed on both timeout and error to prevent resource leak\n const timer = setTimeout(() => {\n socket.destroy()\n reject(new Error('timeout'))\n }, 3000)\n socket.on('error', (err) => {\n clearTimeout(timer)\n reject(err)\n })\n socket.on('connect', () => clearTimeout(timer))\n })\n\n return {\n id: 'memory.shortTerm:redis',\n category: 'memory',\n status: 'pass',\n severity: 'warning',\n latencyMs: Date.now() - start,\n }\n } catch (err) {\n return {\n id: 'memory.shortTerm:redis',\n category: 'memory',\n status: 'fail',\n severity: 'warning',\n latencyMs: Date.now() - start,\n message: `Redis not reachable: ${String(err)}`,\n remediation: 'Check REDIS_URL and ensure your Redis instance is running',\n }\n }\n}\n\nasync function checkPostgres(connStr: string, id = 'memory.longTerm:postgres'): Promise<HealthCheck> {\n const start = Date.now()\n try {\n const parsed = new URL(connStr)\n const port = parseInt(parsed.port || '5432', 10)\n const host = parsed.hostname || 'localhost'\n\n const { createConnection } = await import('node:net')\n await new Promise<void>((resolve, reject) => {\n const socket = createConnection({ port, host }, () => {\n socket.destroy()\n resolve()\n })\n // Ensure socket is destroyed on both timeout and error to prevent resource leak\n const timer = setTimeout(() => {\n socket.destroy()\n reject(new Error('timeout'))\n }, 3000)\n socket.on('error', (err) => {\n clearTimeout(timer)\n reject(err)\n })\n socket.on('connect', () => clearTimeout(timer))\n })\n\n return {\n id,\n category: 'memory',\n status: 'pass',\n severity: 'warning',\n latencyMs: Date.now() - start,\n }\n } catch (err) {\n return {\n id,\n category: 'memory',\n status: 'fail',\n severity: 'warning',\n latencyMs: Date.now() - start,\n message: `PostgreSQL not reachable: ${String(err)}`,\n remediation: 'Check DATABASE_URL and ensure your PostgreSQL instance is running',\n }\n }\n}\n","import type { HealthCheck } from '../index.js'\n\n/**\n * Secret backend reachability check.\n *\n * Reads AGENTSPEC_SECRET_BACKEND env var (default: 'env').\n * - env: always passes — no external backend required\n * - vault: attempts HTTP GET to VAULT_ADDR/v1/sys/health with 3s timeout\n * - aws: attempts AWS STS metadata endpoint (no credentials needed for the check itself)\n * - gcp: skipped (GCP ADC not trivially verifiable without a real call)\n * - azure: skipped (Azure MSI not trivially verifiable without a real call)\n */\nexport async function runSecretChecks(): Promise<HealthCheck[]> {\n const backend = process.env['AGENTSPEC_SECRET_BACKEND'] ?? 'env'\n\n if (backend === 'env') {\n return [\n {\n id: 'secret:backend',\n category: 'env',\n status: 'pass',\n severity: 'info',\n message: 'Secret backend is env — no external secret manager required',\n },\n ]\n }\n\n if (backend === 'vault') {\n return [await checkVault()]\n }\n\n if (backend === 'aws') {\n return [await checkAws()]\n }\n\n // gcp / azure: skip with informational message\n return [\n {\n id: 'secret:backend',\n category: 'env',\n status: 'skip',\n severity: 'info',\n message: `Secret backend '${backend}' reachability check not yet supported — verify manually`,\n },\n ]\n}\n\nasync function checkVault(): Promise<HealthCheck> {\n const vaultAddr = process.env['VAULT_ADDR']\n if (!vaultAddr) {\n return {\n id: 'secret:vault',\n category: 'env',\n status: 'skip',\n severity: 'warning',\n message: 'AGENTSPEC_SECRET_BACKEND=vault but VAULT_ADDR is not set',\n remediation: 'Set VAULT_ADDR to your Vault server address (e.g. https://vault.example.com)',\n }\n }\n\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 3000)\n const start = Date.now()\n\n try {\n const url = `${vaultAddr.replace(/\\/$/, '')}/v1/sys/health`\n const res = await fetch(url, { signal: controller.signal })\n // Vault /v1/sys/health returns 200, 429, 472, 473, or 501/503\n // Any reachable response means the server is up\n const ok = res.status < 600\n return {\n id: 'secret:vault',\n category: 'env',\n status: ok ? 'pass' : 'fail',\n severity: 'error',\n latencyMs: Date.now() - start,\n message: ok ? undefined : `Vault returned unexpected status ${res.status}`,\n }\n } catch (err) {\n const isTimeout = err instanceof Error && err.name === 'AbortError'\n return {\n id: 'secret:vault',\n category: 'env',\n status: 'fail',\n severity: 'error',\n latencyMs: Date.now() - start,\n message: isTimeout\n ? `Vault health check timed out (VAULT_ADDR=${vaultAddr})`\n : `Vault not reachable at ${vaultAddr}: ${String(err)}`,\n remediation: 'Check that VAULT_ADDR is correct and the Vault server is running',\n }\n } finally {\n clearTimeout(timer)\n }\n}\n\nasync function checkAws(): Promise<HealthCheck> {\n // AWS STS regional endpoint — returns 200 for any valid request\n // We don't need credentials to confirm reachability\n const stsEndpoint = 'https://sts.amazonaws.com'\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 3000)\n const start = Date.now()\n\n try {\n // A plain GET returns an XML error (no credentials), but the server IS reachable\n await fetch(stsEndpoint, { signal: controller.signal })\n return {\n id: 'secret:aws',\n category: 'env',\n status: 'pass',\n severity: 'info',\n latencyMs: Date.now() - start,\n message: 'AWS STS endpoint is reachable',\n }\n } catch (err) {\n const isTimeout = err instanceof Error && err.name === 'AbortError'\n return {\n id: 'secret:aws',\n category: 'env',\n status: 'fail',\n severity: 'error',\n latencyMs: Date.now() - start,\n message: isTimeout\n ? 'AWS STS endpoint check timed out'\n : `AWS STS endpoint unreachable: ${String(err)}`,\n remediation: 'Check network connectivity and AWS credentials configuration',\n }\n } finally {\n clearTimeout(timer)\n }\n}\n","/**\n * service.check.ts — TCP port reachability checks for spec.requires.services.\n *\n * Uses raw TCP connections (node:net) — no Redis/Postgres drivers required.\n * Resolves connection strings from environment variables when necessary.\n *\n * Design: fail-safe. If a connection string references an unresolved $env: var,\n * the check returns 'skip' rather than 'fail' (the env check will surface the\n * underlying problem).\n *\n * Security: link-local (169.254.x.x), loopback (127.x.x.x, ::1), and RFC 1918 private\n * address ranges (10.x, 172.16-31.x, 192.168.x) are always rejected to prevent\n * unintentional SSRF in container deployments.\n */\n\nimport type { HealthCheck } from '../index.js'\nimport { isIP } from 'node:net'\n\ninterface ServiceSpec {\n type: string\n connection: string\n}\n\nconst TIMEOUT_MS = 3_000\n\n/**\n * Runs TCP connectivity checks for all declared services.\n * Returns one HealthCheck per service entry.\n */\nexport async function runServiceChecks(services: ServiceSpec[]): Promise<HealthCheck[]> {\n return Promise.all(services.map((svc) => checkService(svc)))\n}\n\nasync function checkService(svc: ServiceSpec): Promise<HealthCheck> {\n const id = `service:${svc.type}`\n const connection = resolveConnection(svc.connection)\n\n if (!connection) {\n return {\n id,\n category: 'service',\n status: 'skip',\n severity: 'warning',\n message: `Cannot check ${svc.type}: connection string not resolved (${svc.connection})`,\n }\n }\n\n const parsed = parseConnectionUrl(connection)\n if (!parsed) {\n return {\n id,\n category: 'service',\n status: 'skip',\n severity: 'warning',\n message: `Cannot check ${svc.type}: unrecognised connection string format`,\n }\n }\n\n // Reject link-local and loopback addresses to prevent SSRF probes from the\n // SDK running inside a container reaching instance metadata services.\n const hostRisk = classifyHost(parsed.host)\n if (hostRisk) {\n return {\n id,\n category: 'service',\n status: 'skip',\n severity: 'warning',\n message: `Cannot check ${svc.type}: ${hostRisk}`,\n }\n }\n\n if (!isSupportedType(svc.type)) {\n return {\n id,\n category: 'service',\n status: 'skip',\n severity: 'info',\n message: `TCP check not implemented for service type \"${svc.type}\"`,\n }\n }\n\n return tcpCheck(id, parsed.host, parsed.port)\n}\n\n/** Resolve $env:VAR_NAME references from the environment. Returns null if unresolved. */\nfunction resolveConnection(connection: string): string | null {\n if (!connection.startsWith('$')) return connection\n\n const envMatch = connection.match(/^\\$env:(.+)$/)\n if (envMatch) {\n return process.env[envMatch[1]] ?? null\n }\n\n // Other reference types ($secret:, $file:, etc.) cannot be resolved here\n return null\n}\n\n/** Parse host and port from a connection URL or host:port string. */\nfunction parseConnectionUrl(connection: string): { host: string; port: number } | null {\n try {\n // Try URL parsing first (redis://host:port, postgres://host:port, etc.)\n const url = new URL(connection)\n const host = url.hostname || 'localhost'\n const defaultPort = getDefaultPort(url.protocol.replace(':', ''))\n const port = url.port ? parseInt(url.port, 10) : defaultPort\n if (!port || isNaN(port) || port < 1 || port > 65535) return null\n return { host, port }\n } catch {\n // Try host:port format\n const colonIdx = connection.lastIndexOf(':')\n if (colonIdx > 0) {\n const host = connection.slice(0, colonIdx)\n const port = parseInt(connection.slice(colonIdx + 1), 10)\n if (!isNaN(port) && port >= 1 && port <= 65535) return { host, port }\n }\n return null\n }\n}\n\n/**\n * Returns a rejection reason string if the host is a sensitive address,\n * or null if the host is acceptable for a TCP connectivity check.\n *\n * Rejects (IP literals only — hostname strings are not matched by IP ranges):\n * - IPv4 loopback (127.0.0.0/8)\n * - IPv4 link-local (169.254.0.0/16) — AWS/GCP instance metadata\n * - IPv4 private ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) — RFC 1918\n * - IPv6 loopback (::1)\n * - IPv6 link-local (fe80::/10)\n * - Unspecified address (0.0.0.0)\n *\n * Note: DNS-rebinding attacks (hostname → private IP) are not mitigated here because\n * synchronous DNS resolution inside a health check would block the event loop and\n * add significant latency. The primary threat model is an operator-controlled\n * manifest that directly references private IPs.\n */\nfunction classifyHost(host: string): string | null {\n // Normalize IPv6 bracket notation\n const h = host.replace(/^\\[(.+)\\]$/, '$1').toLowerCase()\n\n // Always block regardless of whether it looks like an IP or hostname\n if (h === 'localhost') return 'loopback address is not probed from service checks'\n\n // Determine whether the value is an IP literal. Hostname strings (e.g. \"10.example.com\")\n // must NOT be matched against IP range prefixes — that would be a false positive.\n const ipVersion = isIP(h) // 4, 6, or 0 (not an IP literal)\n\n if (ipVersion === 4) {\n if (h === '0.0.0.0') return 'unspecified address 0.0.0.0 is not a valid service host'\n if (h.startsWith('127.')) return 'IPv4 loopback (127.x.x.x) is not probed from service checks'\n if (h.startsWith('169.254.')) return 'link-local address (169.254.x.x) blocked to prevent instance-metadata SSRF'\n // RFC 1918 private ranges\n if (h.startsWith('10.')) return 'RFC 1918 private address (10.0.0.0/8) blocked to prevent internal SSRF'\n if (h.startsWith('192.168.')) return 'RFC 1918 private address (192.168.0.0/16) blocked to prevent internal SSRF'\n if (h.startsWith('172.')) {\n const second = parseInt(h.split('.')[1] ?? '0', 10)\n if (second >= 16 && second <= 31) {\n return 'RFC 1918 private address (172.16.0.0/12) blocked to prevent internal SSRF'\n }\n }\n }\n\n if (ipVersion === 6) {\n if (h === '::1') return 'loopback address is not probed from service checks'\n if (h.startsWith('fe80:')) return 'IPv6 link-local (fe80::/10) blocked to prevent SSRF'\n }\n\n return null\n}\n\nfunction getDefaultPort(scheme: string): number {\n const ports: Record<string, number> = {\n redis: 6379,\n rediss: 6379,\n postgres: 5432,\n postgresql: 5432,\n mysql: 3306,\n mongodb: 27017,\n elasticsearch: 9200,\n }\n return ports[scheme] ?? 0\n}\n\nfunction isSupportedType(type: string): boolean {\n return ['redis', 'postgres', 'mysql', 'mongodb', 'elasticsearch'].includes(type)\n}\n\nasync function tcpCheck(id: string, host: string, port: number): Promise<HealthCheck> {\n const start = Date.now()\n\n try {\n const { createConnection } = await import('node:net')\n\n await new Promise<void>((resolve, reject) => {\n const socket = createConnection({ host, port })\n\n const timer = setTimeout(() => {\n socket.destroy()\n reject(new Error(`TCP connection timed out after ${TIMEOUT_MS}ms`))\n }, TIMEOUT_MS)\n\n socket.on('connect', () => {\n clearTimeout(timer)\n socket.destroy()\n resolve()\n })\n\n socket.on('error', (err) => {\n clearTimeout(timer)\n reject(err)\n })\n })\n\n return {\n id,\n category: 'service',\n status: 'pass',\n severity: 'info',\n latencyMs: Date.now() - start,\n }\n } catch (err) {\n return {\n id,\n category: 'service',\n status: 'fail',\n severity: 'warning',\n latencyMs: Date.now() - start,\n message: `Service unreachable at ${host}:${port} — ${String(err)}`,\n remediation: `Check the connection string for ${id} and ensure the service is running and accessible`,\n }\n }\n}\n","import { existsSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport type { AgentSpecManifest } from '../schema/manifest.schema.js'\nimport { runEnvChecks, runFileChecks } from './checks/env.check.js'\nimport { runModelChecks } from './checks/model.check.js'\nimport { runMcpChecks } from './checks/mcp.check.js'\nimport { runMemoryChecks } from './checks/memory.check.js'\nimport { runSecretChecks } from './checks/secret.check.js'\nimport { runServiceChecks } from './checks/service.check.js'\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type CheckStatus = 'pass' | 'fail' | 'warn' | 'skip'\nexport type CheckSeverity = 'error' | 'warning' | 'info'\n\nexport interface HealthCheck {\n id: string\n category:\n | 'env'\n | 'file'\n | 'model'\n | 'model-fallback'\n | 'mcp'\n | 'memory'\n | 'subagent'\n | 'eval'\n | 'service' // spec.requires.services TCP connectivity\n | 'tool' // registered tool handler availability (agent-side)\n status: CheckStatus\n severity: CheckSeverity\n latencyMs?: number\n message?: string\n remediation?: string\n}\n\nexport type HealthStatus = 'healthy' | 'degraded' | 'unhealthy'\n\nexport interface HealthReport {\n agentName: string\n timestamp: string\n status: HealthStatus\n summary: {\n passed: number\n failed: number\n warnings: number\n skipped: number\n }\n checks: HealthCheck[]\n}\n\nexport interface HealthCheckOptions {\n /** Run model API reachability checks (makes HTTP requests). Default: true */\n checkModel?: boolean\n /** Run MCP server checks. Default: true */\n checkMcp?: boolean\n /** Run memory backend checks. Default: true */\n checkMemory?: boolean\n /** Run spec.requires.services TCP connectivity checks. Default: true */\n checkServices?: boolean\n /** Override base directory for $file resolution */\n baseDir?: string\n /** Raw parsed YAML object (for $env/$file ref collection) */\n rawManifest?: unknown\n}\n\n// ── Private helpers ───────────────────────────────────────────────────────────\n\nasync function runSubagentChecks(\n manifest: AgentSpecManifest,\n opts: Pick<HealthCheckOptions, 'baseDir'>,\n): Promise<HealthCheck[]> {\n const checks: HealthCheck[] = []\n if (!manifest.spec.subagents) return checks\n\n for (const sub of manifest.spec.subagents) {\n const ref = sub.ref\n if ('agentspec' in ref && opts.baseDir) {\n const subPath = resolve(opts.baseDir, ref.agentspec)\n const exists = existsSync(subPath)\n checks.push({\n id: `subagent:${sub.name}`,\n category: 'subagent',\n status: exists ? 'pass' : 'fail',\n severity: 'warning',\n message: exists\n ? undefined\n : `Sub-agent manifest not found: ${ref.agentspec}`,\n remediation: exists\n ? undefined\n : `Create the sub-agent manifest at ${subPath}`,\n })\n } else if ('a2a' in ref) {\n const rawUrl = ref.a2a.url\n if (!rawUrl.startsWith('$')) {\n const check = await checkA2aEndpoint(sub.name, rawUrl)\n checks.push(check)\n } else {\n checks.push({\n id: `subagent:${sub.name}`,\n category: 'subagent',\n status: 'skip',\n severity: 'warning',\n message: `Cannot check A2A endpoint: URL not resolved (${rawUrl})`,\n })\n }\n }\n }\n return checks\n}\n\nfunction runEvalChecks(\n manifest: AgentSpecManifest,\n opts: Pick<HealthCheckOptions, 'baseDir'>,\n): HealthCheck[] {\n const checks: HealthCheck[] = []\n if (!manifest.spec.evaluation?.datasets || !opts.baseDir) return checks\n\n for (const dataset of manifest.spec.evaluation.datasets) {\n const path = dataset.path\n if (!path.startsWith('$')) {\n const absPath = resolve(opts.baseDir, path)\n const exists = existsSync(absPath)\n checks.push({\n id: `eval:dataset:${dataset.name}`,\n category: 'eval',\n status: exists ? 'pass' : 'fail',\n severity: 'info',\n message: exists\n ? undefined\n : `Eval dataset not found: ${path}`,\n remediation: exists\n ? undefined\n : `Create the dataset file at ${absPath}`,\n })\n }\n }\n return checks\n}\n\nfunction computeHealthStatus(checks: HealthCheck[]): {\n status: HealthStatus\n summary: { passed: number; failed: number; warnings: number; skipped: number }\n} {\n const failed = checks.filter((c) => c.status === 'fail')\n const warnings = checks.filter((c) => c.status === 'warn')\n const passed = checks.filter((c) => c.status === 'pass')\n const skipped = checks.filter((c) => c.status === 'skip')\n\n const hasErrors = failed.some((c) => c.severity === 'error')\n const hasWarnings = failed.some((c) => c.severity === 'warning') || warnings.length > 0\n\n const status: HealthStatus = hasErrors ? 'unhealthy' : hasWarnings ? 'degraded' : 'healthy'\n\n return {\n status,\n summary: {\n passed: passed.length,\n failed: failed.length,\n warnings: warnings.length,\n skipped: skipped.length,\n },\n }\n}\n\n// ── Main health check runner ──────────────────────────────────────────────────\n\nexport async function runHealthCheck(\n manifest: AgentSpecManifest,\n opts: HealthCheckOptions = {},\n): Promise<HealthReport> {\n const checks: HealthCheck[] = []\n\n // Build raw manifest for ref collection (when not provided)\n const rawManifest = opts.rawManifest ?? manifest\n\n // 1. Env var checks\n checks.push(...runEnvChecks(manifest, rawManifest))\n\n // 1b. Secret backend reachability\n checks.push(...await runSecretChecks())\n\n // 2. File reference checks\n if (opts.baseDir) {\n checks.push(...runFileChecks(rawManifest, opts.baseDir))\n }\n\n // 3. Model endpoint checks\n if (opts.checkModel !== false && manifest.spec.model) {\n checks.push(...await runModelChecks(manifest.spec.model))\n }\n\n // 4. MCP server checks\n if (opts.checkMcp !== false && manifest.spec.mcp?.servers?.length) {\n checks.push(...await runMcpChecks(manifest.spec.mcp.servers))\n }\n\n // 5. Memory backend checks\n if (opts.checkMemory !== false && manifest.spec.memory) {\n checks.push(...await runMemoryChecks(manifest.spec.memory))\n }\n\n // 6. Service connectivity checks (spec.requires.services)\n if (opts.checkServices !== false && manifest.spec.requires?.services?.length) {\n checks.push(...await runServiceChecks(manifest.spec.requires.services))\n }\n\n // 7. Sub-agent local file / A2A endpoint checks\n checks.push(...await runSubagentChecks(manifest, opts))\n\n // 8. Eval dataset file checks\n checks.push(...runEvalChecks(manifest, opts))\n\n const { status, summary } = computeHealthStatus(checks)\n\n return {\n agentName: manifest.metadata.name,\n timestamp: new Date().toISOString(),\n status,\n summary,\n checks,\n }\n}\n\nasync function checkA2aEndpoint(name: string, url: string): Promise<HealthCheck> {\n // Validate URL scheme — only http/https permitted (prevents file://, javascript:, etc.)\n let parsed: URL\n try {\n parsed = new URL(url)\n } catch {\n return {\n id: `subagent:${name}`,\n category: 'subagent',\n status: 'fail',\n severity: 'warning',\n message: `A2A endpoint for ${name} has an invalid URL`,\n remediation: `Set ref.a2a.url to a valid http:// or https:// URL`,\n }\n }\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n return {\n id: `subagent:${name}`,\n category: 'subagent',\n status: 'fail',\n severity: 'warning',\n message: `A2A endpoint for ${name} uses disallowed scheme \"${parsed.protocol}\"`,\n remediation: `Use an http:// or https:// URL for ref.a2a.url`,\n }\n }\n // Reject loopback and link-local addresses (SSRF guard)\n const host = parsed.hostname.replace(/^\\[(.+)\\]$/, '$1') // unwrap IPv6 brackets\n if (\n host === 'localhost' ||\n host === '127.0.0.1' ||\n host === '::1' ||\n host.startsWith('169.254.') || // link-local (AWS metadata, etc.)\n host.startsWith('fe80:')\n ) {\n return {\n id: `subagent:${name}`,\n category: 'subagent',\n status: 'skip',\n severity: 'warning',\n message: `Skipping A2A check for ${name} — loopback/link-local address not checked`,\n }\n }\n\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), 5000)\n const start = Date.now()\n\n try {\n await fetch(url, { signal: controller.signal })\n return {\n id: `subagent:${name}`,\n category: 'subagent',\n status: 'pass',\n severity: 'warning',\n latencyMs: Date.now() - start,\n }\n } catch (err) {\n const isTimeout = err instanceof Error && err.name === 'AbortError'\n return {\n id: `subagent:${name}`,\n category: 'subagent',\n status: 'fail',\n severity: 'warning',\n latencyMs: Date.now() - start,\n message: isTimeout\n ? `A2A endpoint for ${name} timed out`\n : `A2A endpoint for ${name} unreachable: ${String(err)}`,\n remediation: `Check that the A2A endpoint is reachable`,\n }\n } finally {\n clearTimeout(timeout)\n }\n}\n","import type { AgentSpecManifest } from '../../schema/manifest.schema.js'\nimport type { AuditRule, RuleResult } from '../index.js'\n\nexport const modelRules: AuditRule[] = [\n {\n id: 'MODEL-01',\n pack: 'model-resilience',\n title: 'Model fallback declared',\n description: 'A fallback model should be configured to handle rate limits and errors',\n severity: 'high',\n evidenceLevel: 'external',\n proofTool: 'LiteLLM chaos test',\n proofToolUrl: 'https://docs.litellm.ai/docs/proxy/reliability#mock-testing-fallbacks',\n check(manifest: AgentSpecManifest): RuleResult {\n const hasFallback = !!manifest.spec.model.fallback\n return {\n pass: hasFallback,\n message: hasFallback\n ? undefined\n : 'No fallback model declared. Configure spec.model.fallback',\n path: '/spec/model/fallback',\n recommendation: 'Add a fallback model with triggerOn: [rate_limit, timeout, error_5xx]',\n references: [],\n }\n },\n },\n\n {\n id: 'MODEL-02',\n pack: 'model-resilience',\n title: 'Model version pinned',\n description: 'Model ID should not use \"latest\" — pin a specific version for reproducibility',\n severity: 'medium',\n evidenceLevel: 'probed',\n proofTool: 'agentspec health',\n proofToolUrl: 'https://agentspec.io/docs/reference/cli#agentspec-health',\n check(manifest: AgentSpecManifest): RuleResult {\n const id = manifest.spec.model.id\n const isLatest = id === 'latest' || id.endsWith(':latest')\n return {\n pass: !isLatest,\n message: isLatest\n ? `Model ID \"${id}\" uses \"latest\" — this is not reproducible`\n : undefined,\n path: '/spec/model/id',\n recommendation: 'Pin a specific model version, e.g. \"llama-3.3-70b-versatile\" or \"gpt-4-0125-preview\"',\n references: [],\n }\n },\n },\n\n {\n id: 'MODEL-03',\n pack: 'model-resilience',\n title: 'Cost controls declared',\n description: 'Monthly cost limits prevent unexpected API bills',\n severity: 'medium',\n evidenceLevel: 'external',\n proofTool: 'LiteLLM Spend Tracking',\n proofToolUrl: 'https://docs.litellm.ai/docs/proxy/cost_tracking',\n check(manifest: AgentSpecManifest): RuleResult {\n const hasCostControls = !!manifest.spec.model.costControls?.maxMonthlyUSD\n return {\n pass: hasCostControls,\n message: hasCostControls\n ? undefined\n : 'No cost controls declared. Configure spec.model.costControls',\n path: '/spec/model/costControls',\n recommendation: 'Add costControls.maxMonthlyUSD and costControls.alertAtUSD',\n references: [],\n }\n },\n },\n\n {\n id: 'MODEL-04',\n pack: 'model-resilience',\n title: 'Fallback retry strategy configured',\n description: 'Fallback should have maxRetries to avoid infinite loops',\n severity: 'low',\n evidenceLevel: 'external',\n proofTool: 'pytest-mockllm',\n proofToolUrl: 'https://pypi.org/project/pytest-mockllm/',\n check(manifest: AgentSpecManifest): RuleResult {\n if (!manifest.spec.model.fallback) return { pass: true }\n const hasRetries = manifest.spec.model.fallback.maxRetries !== undefined\n return {\n pass: hasRetries,\n message: hasRetries\n ? undefined\n : 'Fallback model has no maxRetries configured',\n path: '/spec/model/fallback/maxRetries',\n recommendation: 'Add maxRetries: 2 to spec.model.fallback',\n references: [],\n }\n },\n },\n]\n","import type { AgentSpecManifest } from '../../schema/manifest.schema.js'\nimport type { AuditRule, RuleResult } from '../index.js'\n\nexport const securityRules: AuditRule[] = [\n {\n id: 'SEC-LLM-01',\n pack: 'owasp-llm-top10',\n title: 'Prompt injection guard: input guardrail required',\n description:\n 'OWASP LLM Top 10 #1: Agents should have input guardrails to detect prompt injection',\n severity: 'high',\n evidenceLevel: 'behavioral',\n proofTool: 'AgentSpec EventPush + sidecar gap analysis',\n proofToolUrl: 'https://agentspec.io/docs/concepts/probe-coverage',\n check(manifest: AgentSpecManifest): RuleResult {\n const hasGuardrail =\n manifest.spec.guardrails?.input?.some(\n (g) => g.type === 'prompt-injection' || g.type === 'topic-filter',\n ) ?? false\n return {\n pass: hasGuardrail,\n message: hasGuardrail\n ? undefined\n : 'No input guardrail configured. Prompt injection attacks are unmitigated.',\n path: '/spec/guardrails/input',\n recommendation:\n 'Add a prompt-injection guardrail to spec.guardrails.input',\n references: [\n 'https://owasp.org/www-project-top-10-for-large-language-model-applications/#llm01-prompt-injection',\n ],\n }\n },\n },\n\n {\n id: 'SEC-LLM-02',\n pack: 'owasp-llm-top10',\n title: 'Insecure output handling: output guardrail required',\n description: 'OWASP LLM Top 10 #2: Agents should validate and sanitize LLM outputs',\n severity: 'high',\n evidenceLevel: 'behavioral',\n proofTool: 'AgentSpec EventPush + sidecar gap analysis',\n proofToolUrl: 'https://agentspec.io/docs/concepts/probe-coverage',\n check(manifest: AgentSpecManifest): RuleResult {\n const hasGuardrail = (manifest.spec.guardrails?.output?.length ?? 0) > 0\n return {\n pass: hasGuardrail,\n message: hasGuardrail\n ? undefined\n : 'No output guardrail configured. LLM outputs are not sanitized.',\n path: '/spec/guardrails/output',\n recommendation:\n 'Add a toxicity-filter or hallucination-detector to spec.guardrails.output',\n references: [\n 'https://owasp.org/www-project-top-10-for-large-language-model-applications/#llm02-insecure-output-handling',\n ],\n }\n },\n },\n\n {\n id: 'SEC-LLM-03',\n pack: 'owasp-llm-top10',\n title: 'Training/prompt data poisoning: prompt files referenced',\n description:\n 'OWASP LLM Top 10 #3: Prompt content should be loaded from versioned files, not inlined in the manifest',\n severity: 'medium',\n evidenceLevel: 'probed',\n proofTool: 'agentspec health',\n proofToolUrl: 'https://agentspec.io/docs/reference/cli#agentspec-health',\n check(manifest: AgentSpecManifest): RuleResult {\n const system = manifest.spec.prompts.system\n const usesFile = system.startsWith('$file:')\n return {\n pass: usesFile,\n message: usesFile\n ? undefined\n : 'System prompt is inlined in the manifest rather than loaded from a versioned file. Inline prompts bypass version control and integrity checks.',\n path: '/spec/prompts/system',\n recommendation:\n 'Use $file:prompts/system.md to load prompt from a versioned file that can be reviewed and audited.',\n references: [\n 'https://owasp.org/www-project-top-10-for-large-language-model-applications/#llm03-training-data-poisoning',\n ],\n }\n },\n },\n\n {\n id: 'SEC-LLM-04',\n pack: 'owasp-llm-top10',\n title: 'Model DoS: rate limiting + cost controls declared',\n description: 'OWASP LLM Top 10 #4: Protect against denial-of-service via rate limiting',\n severity: 'medium',\n evidenceLevel: 'external',\n proofTool: 'k6 load test',\n proofToolUrl: 'https://k6.io',\n check(manifest: AgentSpecManifest): RuleResult {\n const hasRateLimit = !!manifest.spec.api?.rateLimit?.requestsPerMinute\n const hasCostControls = !!manifest.spec.model.costControls?.maxMonthlyUSD\n const pass = hasRateLimit || hasCostControls\n return {\n pass,\n message: pass\n ? undefined\n : 'No rate limiting or cost controls declared.',\n path: '/spec/api/rateLimit',\n recommendation:\n 'Add spec.api.rateLimit.requestsPerMinute and spec.model.costControls.maxMonthlyUSD',\n references: [\n 'https://owasp.org/www-project-top-10-for-large-language-model-applications/#llm04-model-denial-of-service',\n ],\n }\n },\n },\n\n {\n id: 'SEC-LLM-05',\n pack: 'owasp-llm-top10',\n title: 'Supply chain: model provider and version pinned',\n description: 'OWASP LLM Top 10 #5: Pin model versions to prevent supply chain drift',\n severity: 'medium',\n evidenceLevel: 'probed',\n proofTool: 'agentspec health',\n proofToolUrl: 'https://agentspec.io/docs/reference/cli#agentspec-health',\n check(manifest: AgentSpecManifest): RuleResult {\n const hasProvider = !!manifest.spec.model.provider\n const hasVersion = !!manifest.spec.model.id && manifest.spec.model.id !== 'latest'\n const pass = hasProvider && hasVersion\n return {\n pass,\n message: pass\n ? undefined\n : 'Model provider or version not pinned.',\n path: '/spec/model',\n recommendation: 'Specify both spec.model.provider and a specific spec.model.id',\n references: [\n 'https://owasp.org/www-project-top-10-for-large-language-model-applications/#llm05-supply-chain-vulnerabilities',\n ],\n }\n },\n },\n\n {\n id: 'SEC-LLM-06',\n pack: 'owasp-llm-top10',\n title: 'Sensitive data disclosure: PII scrub in memory hygiene',\n description:\n 'OWASP LLM Top 10 #6: Agents storing long-term memory must scrub PII',\n severity: 'critical',\n evidenceLevel: 'external',\n proofTool: 'Microsoft Presidio',\n proofToolUrl: 'https://microsoft.github.io/presidio/',\n check(manifest: AgentSpecManifest): RuleResult {\n if (!manifest.spec.memory?.longTerm) return { pass: true }\n const hasPiiScrub =\n (manifest.spec.memory.hygiene?.piiScrubFields?.length ?? 0) > 0\n return {\n pass: hasPiiScrub,\n message: hasPiiScrub\n ? undefined\n : 'Long-term memory declared without piiScrubFields — PII may be persisted.',\n path: '/spec/memory/hygiene/piiScrubFields',\n recommendation:\n 'Add spec.memory.hygiene.piiScrubFields with sensitive fields like [ssn, credit_card, bank_account]',\n references: [\n 'https://owasp.org/www-project-top-10-for-large-language-model-applications/#llm06-sensitive-information-disclosure',\n ],\n }\n },\n },\n\n {\n id: 'SEC-LLM-07',\n pack: 'owasp-llm-top10',\n title: 'Insecure plugin design: tool annotations declared',\n description: 'OWASP LLM Top 10 #7: Tools should declare their access scope via annotations',\n severity: 'medium',\n evidenceLevel: 'external',\n proofTool: 'Promptfoo',\n proofToolUrl: 'https://promptfoo.dev',\n check(manifest: AgentSpecManifest): RuleResult {\n if (!manifest.spec.tools?.length) return { pass: true }\n const allAnnotated = manifest.spec.tools.every((t) => t.annotations !== undefined)\n return {\n pass: allAnnotated,\n message: allAnnotated\n ? undefined\n : 'Some tools lack annotations (readOnlyHint, destructiveHint).',\n path: '/spec/tools',\n recommendation:\n 'Add annotations to each tool: { readOnlyHint: boolean, destructiveHint: boolean }',\n references: [\n 'https://owasp.org/www-project-top-10-for-large-language-model-applications/#llm07-insecure-plugin-design',\n ],\n }\n },\n },\n\n {\n id: 'SEC-LLM-08',\n pack: 'owasp-llm-top10',\n title: 'Excessive agency: destructiveHint declared on tools',\n description:\n 'OWASP LLM Top 10 #8: Destructive tools must be explicitly flagged to limit agent autonomy',\n severity: 'high',\n evidenceLevel: 'external',\n proofTool: 'Promptfoo',\n proofToolUrl: 'https://promptfoo.dev',\n check(manifest: AgentSpecManifest): RuleResult {\n if (!manifest.spec.tools?.length) return { pass: true }\n const allHaveDestructiveHint = manifest.spec.tools.every(\n (t) => t.annotations?.destructiveHint !== undefined,\n )\n return {\n pass: allHaveDestructiveHint,\n message: allHaveDestructiveHint\n ? undefined\n : 'Some tools do not declare destructiveHint — excessive agency risk.',\n path: '/spec/tools',\n recommendation:\n 'Add annotations.destructiveHint: true|false to every tool',\n references: [\n 'https://owasp.org/www-project-top-10-for-large-language-model-applications/#llm08-excessive-agency',\n ],\n }\n },\n },\n\n {\n id: 'SEC-LLM-09',\n pack: 'owasp-llm-top10',\n title: 'Overreliance: evaluation framework + CI gate configured',\n description:\n 'OWASP LLM Top 10 #9: Evaluation with a CI gate reduces overreliance on LLM outputs',\n severity: 'medium',\n evidenceLevel: 'probed',\n proofTool: 'agentspec health',\n proofToolUrl: 'https://agentspec.io/docs/reference/cli#agentspec-health',\n check(manifest: AgentSpecManifest): RuleResult {\n const hasEval = !!manifest.spec.evaluation?.framework\n const hasCiGate = manifest.spec.evaluation?.ciGate === true\n const pass = hasEval && hasCiGate\n return {\n pass,\n message: pass\n ? undefined\n : !hasEval\n ? 'No evaluation framework configured.'\n : 'Evaluation CI gate is not enabled.',\n path: '/spec/evaluation',\n recommendation:\n 'Configure spec.evaluation.framework and set spec.evaluation.ciGate: true',\n references: [\n 'https://owasp.org/www-project-top-10-for-large-language-model-applications/#llm09-overreliance',\n ],\n }\n },\n },\n\n {\n id: 'SEC-LLM-10',\n pack: 'owasp-llm-top10',\n title: 'Model theft: API keys use $secret, not $env',\n description:\n 'OWASP LLM Top 10 #10: API keys should use $secret: not $env: to go through a secret manager',\n severity: 'high',\n evidenceLevel: 'probed',\n proofTool: 'agentspec health',\n proofToolUrl: 'https://agentspec.io/docs/reference/cli#agentspec-health',\n check(manifest: AgentSpecManifest): RuleResult {\n const apiKey = manifest.spec.model.apiKey\n const usesSecret = apiKey.startsWith('$secret:')\n const usesEnv = apiKey.startsWith('$env:')\n const isLiteral = !apiKey.startsWith('$')\n // Only $secret: references pass — $env: and literal keys both fail\n return {\n pass: usesSecret,\n message: isLiteral\n ? 'Model API key appears to be a hardcoded literal value — credential exposure risk.'\n : usesEnv\n ? `Model API key uses $env: (${apiKey}). Prefer $secret: for production deployments.`\n : undefined,\n path: '/spec/model/apiKey',\n recommendation:\n 'Use $secret:groq-api-key instead of $env:GROQ_API_KEY for production deployments',\n references: [\n 'https://owasp.org/www-project-top-10-for-large-language-model-applications/#llm10-model-theft',\n ],\n }\n },\n },\n]\n","import type { AgentSpecManifest } from '../../schema/manifest.schema.js'\nimport type { AuditRule, RuleResult } from '../index.js'\n\nexport const memoryRules: AuditRule[] = [\n {\n id: 'MEM-01',\n pack: 'memory-hygiene',\n title: 'PII scrub fields declared for long-term memory',\n description:\n 'Agents with long-term memory must declare which fields to scrub for PII compliance',\n severity: 'critical',\n evidenceLevel: 'external',\n proofTool: 'Microsoft Presidio',\n proofToolUrl: 'https://microsoft.github.io/presidio/',\n check(manifest: AgentSpecManifest): RuleResult {\n if (!manifest.spec.memory?.longTerm) return { pass: true }\n const hasScrub = (manifest.spec.memory.hygiene?.piiScrubFields?.length ?? 0) > 0\n return {\n pass: hasScrub,\n message: hasScrub\n ? undefined\n : 'Long-term memory enabled without PII scrub fields',\n path: '/spec/memory/hygiene/piiScrubFields',\n recommendation:\n 'Add spec.memory.hygiene.piiScrubFields: [ssn, credit_card, bank_account]',\n references: [],\n }\n },\n },\n\n {\n id: 'MEM-02',\n pack: 'memory-hygiene',\n title: 'Retention policy / TTL set for all memory backends',\n description: 'Memory without TTL grows unbounded and increases PII exposure risk',\n severity: 'high',\n evidenceLevel: 'probed',\n proofTool: 'agentspec health',\n proofToolUrl: 'https://agentspec.io/docs/reference/cli#agentspec-health',\n check(manifest: AgentSpecManifest): RuleResult {\n const mem = manifest.spec.memory\n if (!mem) return { pass: true }\n\n const stOk = !mem.shortTerm || mem.shortTerm.ttlSeconds !== undefined\n const ltOk = !mem.longTerm || mem.longTerm.ttlDays !== undefined\n\n const pass = stOk && ltOk\n return {\n pass,\n message: pass\n ? undefined\n : [\n !stOk ? 'Short-term memory has no ttlSeconds' : '',\n !ltOk ? 'Long-term memory has no ttlDays' : '',\n ]\n .filter(Boolean)\n .join('; '),\n path: '/spec/memory',\n recommendation:\n 'Set spec.memory.shortTerm.ttlSeconds and spec.memory.longTerm.ttlDays',\n references: [],\n }\n },\n },\n\n {\n id: 'MEM-03',\n pack: 'memory-hygiene',\n title: 'Audit log enabled for long-term memory',\n description:\n 'Audit logging enables compliance investigations and debugging',\n severity: 'medium',\n evidenceLevel: 'probed',\n proofTool: 'agentspec health',\n proofToolUrl: 'https://agentspec.io/docs/reference/cli#agentspec-health',\n check(manifest: AgentSpecManifest): RuleResult {\n if (!manifest.spec.memory?.longTerm) return { pass: true }\n const hasAuditLog = manifest.spec.memory.hygiene?.auditLog === true\n return {\n pass: hasAuditLog,\n message: hasAuditLog\n ? undefined\n : 'Long-term memory enabled without audit log',\n path: '/spec/memory/hygiene/auditLog',\n recommendation: 'Set spec.memory.hygiene.auditLog: true',\n references: [],\n }\n },\n },\n\n {\n id: 'MEM-04',\n pack: 'memory-hygiene',\n title: 'Vector store namespace isolated',\n description:\n 'Shared vector store namespaces risk data leakage between agents',\n severity: 'medium',\n evidenceLevel: 'probed',\n proofTool: 'agentspec health',\n proofToolUrl: 'https://agentspec.io/docs/reference/cli#agentspec-health',\n check(manifest: AgentSpecManifest): RuleResult {\n if (!manifest.spec.memory?.vector) return { pass: true }\n const hasNamespace = !!manifest.spec.memory.vector.namespace\n return {\n pass: hasNamespace,\n message: hasNamespace\n ? undefined\n : 'Vector store has no namespace — may share space with other agents',\n path: '/spec/memory/vector/namespace',\n recommendation:\n `Add spec.memory.vector.namespace: \"${manifest.metadata.name}\"`,\n references: [],\n }\n },\n },\n\n {\n id: 'MEM-05',\n pack: 'memory-hygiene',\n title: 'Short-term memory max tokens bounded',\n description: 'Unbounded short-term memory can cause token budget overruns',\n severity: 'low',\n evidenceLevel: 'probed',\n proofTool: 'agentspec health',\n proofToolUrl: 'https://agentspec.io/docs/reference/cli#agentspec-health',\n check(manifest: AgentSpecManifest): RuleResult {\n if (!manifest.spec.memory?.shortTerm) return { pass: true }\n const hasBound = manifest.spec.memory.shortTerm.maxTokens !== undefined\n return {\n pass: hasBound,\n message: hasBound\n ? undefined\n : 'Short-term memory has no maxTokens bound',\n path: '/spec/memory/shortTerm/maxTokens',\n recommendation: 'Set spec.memory.shortTerm.maxTokens: 8000',\n references: [],\n }\n },\n },\n]\n","import type { AgentSpecManifest } from '../../schema/manifest.schema.js'\nimport type { AuditRule, RuleResult } from '../index.js'\n\nexport const evaluationRules: AuditRule[] = [\n {\n id: 'EVAL-01',\n pack: 'evaluation-coverage',\n title: 'Evaluation dataset declared',\n description: 'At least one evaluation dataset is required for quality assurance',\n severity: 'medium',\n evidenceLevel: 'probed',\n proofTool: 'agentspec health',\n proofToolUrl: 'https://agentspec.io/docs/reference/cli#agentspec-health',\n check(manifest: AgentSpecManifest): RuleResult {\n const hasDataset = (manifest.spec.evaluation?.datasets?.length ?? 0) > 0\n return {\n pass: hasDataset,\n message: hasDataset ? undefined : 'No evaluation datasets declared',\n path: '/spec/evaluation/datasets',\n recommendation:\n 'Add spec.evaluation.datasets with at least one .jsonl dataset',\n references: [],\n }\n },\n },\n\n {\n id: 'EVAL-02',\n pack: 'evaluation-coverage',\n title: 'CI gate enabled',\n description: 'Evaluation CI gate prevents regressions from reaching production',\n severity: 'medium',\n evidenceLevel: 'probed',\n proofTool: 'agentspec health',\n proofToolUrl: 'https://agentspec.io/docs/reference/cli#agentspec-health',\n check(manifest: AgentSpecManifest): RuleResult {\n const hasCiGate = manifest.spec.evaluation?.ciGate === true\n return {\n pass: hasCiGate,\n message: hasCiGate ? undefined : 'Evaluation CI gate is not enabled',\n path: '/spec/evaluation/ciGate',\n recommendation: 'Set spec.evaluation.ciGate: true',\n references: [],\n }\n },\n },\n\n {\n id: 'EVAL-03',\n pack: 'evaluation-coverage',\n title: 'Hallucination metric threshold configured',\n description: 'A hallucination threshold below 0.1 is required for production agents',\n severity: 'medium',\n evidenceLevel: 'probed',\n proofTool: 'agentspec health',\n proofToolUrl: 'https://agentspec.io/docs/reference/cli#agentspec-health',\n check(manifest: AgentSpecManifest): RuleResult {\n const metrics = manifest.spec.evaluation?.metrics ?? []\n const hasHallucinationMetric = metrics.includes('hallucination')\n const threshold = manifest.spec.evaluation?.thresholds?.['hallucination']\n const pass = hasHallucinationMetric && threshold !== undefined\n return {\n pass,\n message: pass\n ? undefined\n : !hasHallucinationMetric\n ? 'hallucination metric not in spec.evaluation.metrics'\n : 'No hallucination threshold configured',\n path: '/spec/evaluation/thresholds/hallucination',\n recommendation:\n 'Add hallucination to spec.evaluation.metrics and set spec.evaluation.thresholds.hallucination: 0.05',\n references: [],\n }\n },\n },\n]\n","import type { AgentSpecManifest } from '../../schema/manifest.schema.js'\nimport type { AuditRule, RuleResult } from '../index.js'\n\nexport const observabilityRules: AuditRule[] = [\n {\n id: 'OBS-01',\n pack: 'observability',\n title: 'Tracing backend declared',\n description: 'Agents should declare a tracing backend so runs are observable and debuggable',\n severity: 'medium',\n evidenceLevel: 'probed',\n proofTool: 'agentspec health',\n proofToolUrl: 'https://agentspec.io/docs/reference/cli#agentspec-health',\n check(manifest: AgentSpecManifest): RuleResult {\n const pass = !!manifest.spec.observability?.tracing?.backend\n return {\n pass,\n message: pass\n ? undefined\n : 'No tracing backend configured — agent runs are unobservable.',\n path: '/spec/observability/tracing/backend',\n recommendation:\n 'Add spec.observability.tracing.backend (langfuse, langsmith, agentops, otel)',\n }\n },\n },\n\n {\n id: 'OBS-02',\n pack: 'observability',\n title: 'Structured logging enabled',\n description: 'Structured logging makes log aggregation and searching reliable',\n severity: 'low',\n evidenceLevel: 'behavioral',\n proofTool: 'AgentSpec EventPush + sidecar gap analysis',\n proofToolUrl: 'https://agentspec.io/docs/concepts/probe-coverage',\n check(manifest: AgentSpecManifest): RuleResult {\n const pass = manifest.spec.observability?.logging?.structured !== false\n return {\n pass,\n message: pass ? undefined : 'Structured logging is disabled.',\n path: '/spec/observability/logging/structured',\n recommendation: 'Set spec.observability.logging.structured: true',\n }\n },\n },\n\n {\n id: 'OBS-03',\n pack: 'observability',\n title: 'Sensitive fields redacted from logs',\n description: 'Log redaction prevents secrets and PII from appearing in log aggregators',\n severity: 'medium',\n evidenceLevel: 'external',\n proofTool: 'Microsoft Presidio',\n proofToolUrl: 'https://microsoft.github.io/presidio/',\n check(manifest: AgentSpecManifest): RuleResult {\n const pass = (manifest.spec.observability?.logging?.redactFields?.length ?? 0) > 0\n return {\n pass,\n message: pass\n ? undefined\n : 'No log redaction fields declared — sensitive data may appear in logs.',\n path: '/spec/observability/logging/redactFields',\n recommendation:\n 'Add spec.observability.logging.redactFields: [api_key, account_number, ...]',\n }\n },\n },\n]\n","import type { AgentSpecManifest } from '../../schema/manifest.schema.js'\nimport type { AuditRule, RuleResult } from '../index.js'\n\nexport const metadataRules: AuditRule[] = [\n {\n id: 'META-01',\n pack: 'metadata-quality',\n title: 'Agent description declared',\n description: 'Agents should have a non-empty description for fleet discovery and documentation',\n severity: 'low',\n evidenceLevel: 'declarative',\n check(manifest: AgentSpecManifest): RuleResult {\n const desc = manifest.metadata.description\n const pass = typeof desc === 'string' && desc.trim().length > 0\n return {\n pass,\n message: pass\n ? undefined\n : 'No description declared in metadata. Agents without descriptions are hard to discover in a fleet.',\n path: '/metadata/description',\n recommendation:\n 'Add a concise metadata.description explaining what the agent does',\n references: [],\n }\n },\n },\n\n {\n id: 'META-02',\n pack: 'metadata-quality',\n title: 'Model temperature is production-safe',\n description: 'Temperature above 1.5 causes unpredictable outputs that are unsuitable for production',\n severity: 'medium',\n evidenceLevel: 'declarative',\n check(manifest: AgentSpecManifest): RuleResult {\n const temperature = manifest.spec.model.parameters?.temperature\n if (temperature === undefined) return { pass: true }\n const pass = temperature <= 1.5\n return {\n pass,\n message: pass\n ? undefined\n : `Model temperature is ${temperature} — values above 1.5 produce unreliable outputs in production.`,\n path: '/spec/model/parameters/temperature',\n recommendation:\n 'Set spec.model.parameters.temperature to 1.0 or lower for production agents',\n references: [],\n }\n },\n },\n]\n","import type { AgentSpecManifest } from '../schema/manifest.schema.js'\nimport { modelRules } from './rules/model.rules.js'\nimport { securityRules } from './rules/security.rules.js'\nimport { memoryRules } from './rules/memory.rules.js'\nimport { evaluationRules } from './rules/evaluation.rules.js'\nimport { observabilityRules } from './rules/observability.rules.js'\nimport { metadataRules } from './rules/metadata.rules.js'\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type RuleSeverity = 'critical' | 'high' | 'medium' | 'low' | 'info'\n/** Canonical severity type shared across packages. Alias of RuleSeverity. */\nexport type Severity = RuleSeverity\nexport type CompliancePack =\n | 'owasp-llm-top10'\n | 'model-resilience'\n | 'memory-hygiene'\n | 'evaluation-coverage'\n | 'observability'\n | 'metadata-quality'\n\nexport type EvidenceLevel = 'declarative' | 'probed' | 'behavioral' | 'external'\n\nexport interface RuleResult {\n pass: boolean\n message?: string\n path?: string\n recommendation?: string\n references?: string[]\n}\n\nexport interface AuditRule {\n id: string\n pack: CompliancePack\n title: string\n description: string\n severity: RuleSeverity\n /** What kind of evidence supports this rule's verdict */\n evidenceLevel: EvidenceLevel\n /**\n * Human-readable name of the external tool that can prove this rule.\n * Defined for 'external' evidence level rules; optional on 'probed'.\n */\n proofTool?: string\n /** URL to integration guide or documentation for the proof tool */\n proofToolUrl?: string\n check(manifest: AgentSpecManifest): RuleResult\n}\n\nexport interface AuditViolation {\n ruleId: string\n severity: RuleSeverity\n title: string\n message: string\n path?: string\n recommendation?: string\n references?: string[]\n /** What kind of evidence supports this violation */\n evidenceLevel: EvidenceLevel\n /** Proof tool recommendation (for 'external' rules) */\n proofTool?: string\n /** Proof tool URL (for 'external' rules) */\n proofToolUrl?: string\n}\n\nexport interface EvidenceBreakdown {\n declarative: { passed: number; total: number }\n probed: { passed: number; total: number }\n behavioral: { passed: number; total: number }\n external: { passed: number; total: number }\n}\n\n/** A proof record submitted by an external tool to the sidecar's /proof endpoint */\nexport interface ProofRecord {\n ruleId: string\n verifiedAt: string\n verifiedBy: string\n method: string\n expiresAt?: string\n}\n\nexport interface AuditReport {\n agentName: string\n timestamp: string\n overallScore: number\n grade: 'A' | 'B' | 'C' | 'D' | 'F'\n categoryScores: Record<string, number>\n violations: AuditViolation[]\n suppressions: SuppressionRecord[]\n passedRules: number\n totalRules: number\n packBreakdown: Record<CompliancePack, { passed: number; total: number }>\n evidenceBreakdown: EvidenceBreakdown\n /**\n * Score based only on proved rules (probed + behavioral + external with proof records).\n * Only present when proofRecords are provided to runAudit (e.g. via --url flag).\n */\n provedScore?: number\n /** Grade corresponding to provedScore */\n provedGrade?: 'A' | 'B' | 'C' | 'D' | 'F'\n /** Number of 'external' rules that pass declaratively but lack a proof record */\n pendingProofCount?: number\n}\n\nexport interface SuppressionRecord {\n ruleId: string\n reason: string\n approvedBy?: string\n expires?: string\n}\n\nexport interface AuditOptions {\n /** Run only rules from these packs. Default: all */\n packs?: CompliancePack[]\n /** Include rules from the manifest's compliance.packs. Default: true */\n useManifestPacks?: boolean\n /**\n * Proof records fetched from the sidecar's GET /proof endpoint.\n * When provided, provedScore and pendingProofCount are computed.\n */\n proofRecords?: ProofRecord[]\n}\n\n// ── Severity weights ──────────────────────────────────────────────────────────\nconst SEVERITY_WEIGHTS: Record<RuleSeverity, number> = {\n critical: 4,\n high: 3,\n medium: 2,\n low: 1,\n info: 0,\n}\n\n// ── All rules registry ────────────────────────────────────────────────────────\nconst ALL_RULES: AuditRule[] = [\n ...modelRules,\n ...securityRules,\n ...memoryRules,\n ...evaluationRules,\n ...observabilityRules,\n ...metadataRules,\n]\n\n/** Set of all valid audit rule IDs — single source of truth for validation. */\nexport const AUDIT_RULE_IDS: ReadonlySet<string> = new Set(ALL_RULES.map((r) => r.id))\n\n/** Type guard: returns true if `r` is a structurally valid ProofRecord. */\nexport function isProofRecord(r: unknown): r is ProofRecord {\n return (\n typeof r === 'object' &&\n r !== null &&\n typeof (r as Record<string, unknown>)['ruleId'] === 'string' &&\n typeof (r as Record<string, unknown>)['verifiedBy'] === 'string' &&\n typeof (r as Record<string, unknown>)['method'] === 'string'\n )\n}\n\n// ── Grade thresholds ──────────────────────────────────────────────────────────\nexport function scoreToGrade(score: number): 'A' | 'B' | 'C' | 'D' | 'F' {\n if (score >= 90) return 'A'\n if (score >= 75) return 'B'\n if (score >= 60) return 'C'\n if (score >= 45) return 'D'\n return 'F'\n}\n\n// ── Internal interfaces ───────────────────────────────────────────────────────\n\ninterface ScoringResult {\n violations: AuditViolation[]\n packBreakdown: Record<string, { passed: number; total: number }>\n evidenceBreakdown: EvidenceBreakdown\n totalWeight: number\n overallScore: number\n categoryScores: Record<string, number>\n}\n\ninterface ProvedResult {\n provedScore: number\n provedGrade: 'A' | 'B' | 'C' | 'D' | 'F'\n pendingProofCount: number\n}\n\n// ── Private helpers ───────────────────────────────────────────────────────────\n\nfunction resolveActiveRules(manifest: AgentSpecManifest, opts: AuditOptions): AuditRule[] {\n const manifestPacks = manifest.spec.compliance?.packs ?? []\n const activePacks: CompliancePack[] =\n opts.packs ??\n (opts.useManifestPacks !== false && manifestPacks.length > 0\n ? manifestPacks\n : ([...new Set(ALL_RULES.map((r) => r.pack))] as CompliancePack[]))\n return ALL_RULES.filter((r) => activePacks.includes(r.pack))\n}\n\nfunction collectSuppressions(manifest: AgentSpecManifest): {\n suppressions: SuppressionRecord[]\n suppressedIds: Set<string>\n} {\n const suppressions: SuppressionRecord[] =\n manifest.spec.compliance?.suppressions?.map((s) => ({\n ruleId: s.rule,\n reason: s.reason,\n approvedBy: s.approvedBy,\n expires: s.expires,\n })) ?? []\n\n const suppressedIds = new Set(\n suppressions\n .filter((s) => !s.expires || new Date(s.expires) > new Date())\n .map((s) => s.ruleId),\n )\n\n return { suppressions, suppressedIds }\n}\n\nfunction executeRuleChecks(\n rules: AuditRule[],\n manifest: AgentSpecManifest,\n suppressedIds: Set<string>,\n): Map<string, RuleResult> {\n const ruleResults = new Map<string, RuleResult>()\n for (const rule of rules) {\n ruleResults.set(\n rule.id,\n suppressedIds.has(rule.id) ? { pass: true } : rule.check(manifest),\n )\n }\n return ruleResults\n}\n\nfunction computeScoring(\n rules: AuditRule[],\n ruleResults: Map<string, RuleResult>,\n suppressedIds: Set<string>,\n): ScoringResult {\n const violations: AuditViolation[] = []\n const packBreakdown: Record<string, { passed: number; total: number }> = {}\n const evidenceBreakdown: EvidenceBreakdown = {\n declarative: { passed: 0, total: 0 },\n probed: { passed: 0, total: 0 },\n behavioral: { passed: 0, total: 0 },\n external: { passed: 0, total: 0 },\n }\n\n let totalWeight = 0\n let passedWeight = 0\n\n for (const rule of rules) {\n if (!packBreakdown[rule.pack]) {\n packBreakdown[rule.pack] = { passed: 0, total: 0 }\n }\n\n const suppressed = suppressedIds.has(rule.id)\n const weight = SEVERITY_WEIGHTS[rule.severity]\n const result = ruleResults.get(rule.id)!\n const tier = evidenceBreakdown[rule.evidenceLevel]\n\n packBreakdown[rule.pack]!.total += 1\n tier.total += 1\n\n if (suppressed) {\n packBreakdown[rule.pack]!.passed += 1\n tier.passed += 1\n continue\n }\n\n if (result.pass) {\n packBreakdown[rule.pack]!.passed += 1\n tier.passed += 1\n passedWeight += weight\n } else {\n violations.push({\n ruleId: rule.id,\n severity: rule.severity,\n title: rule.title,\n message: result.message ?? `Rule ${rule.id} failed`,\n path: result.path,\n recommendation: result.recommendation,\n references: result.references,\n evidenceLevel: rule.evidenceLevel,\n proofTool: rule.proofTool,\n proofToolUrl: rule.proofToolUrl,\n })\n }\n\n totalWeight += weight\n }\n\n const overallScore =\n totalWeight === 0 ? 100 : Math.round((passedWeight / totalWeight) * 100)\n\n const categoryScores: Record<string, number> = {}\n for (const [pack, { passed, total }] of Object.entries(packBreakdown)) {\n categoryScores[pack] = total === 0 ? 100 : Math.round((passed / total) * 100)\n }\n\n return { violations, packBreakdown, evidenceBreakdown, totalWeight, overallScore, categoryScores }\n}\n\nfunction computeProvedScore(\n rules: AuditRule[],\n ruleResults: Map<string, RuleResult>,\n suppressedIds: Set<string>,\n totalWeight: number,\n proofRecords: ProofRecord[],\n): ProvedResult {\n const now = new Date()\n const proofSet = new Set(\n proofRecords\n .filter((r) => !r.expiresAt || new Date(r.expiresAt) > now)\n .map((r) => r.ruleId),\n )\n\n let provedPassedWeight = 0\n for (const rule of rules) {\n if (suppressedIds.has(rule.id)) continue\n const result = ruleResults.get(rule.id)!\n const weight = SEVERITY_WEIGHTS[rule.severity]\n\n const isProved =\n (rule.evidenceLevel === 'probed' && result.pass) ||\n (rule.evidenceLevel === 'behavioral' && result.pass) ||\n (rule.evidenceLevel === 'external' && proofSet.has(rule.id))\n\n if (isProved) provedPassedWeight += weight\n }\n\n const provedScore =\n totalWeight === 0 ? 100 : Math.round((provedPassedWeight / totalWeight) * 100)\n\n const pendingProofCount = rules.filter(\n (r) =>\n r.evidenceLevel === 'external' &&\n !suppressedIds.has(r.id) &&\n ruleResults.get(r.id)!.pass &&\n !proofSet.has(r.id),\n ).length\n\n return { provedScore, provedGrade: scoreToGrade(provedScore), pendingProofCount }\n}\n\n// ── Main audit runner ─────────────────────────────────────────────────────────\n\nexport function runAudit(\n manifest: AgentSpecManifest,\n opts: AuditOptions = {},\n): AuditReport {\n const rules = resolveActiveRules(manifest, opts)\n const { suppressions, suppressedIds } = collectSuppressions(manifest)\n const ruleResults = executeRuleChecks(rules, manifest, suppressedIds)\n const { violations, packBreakdown,\n evidenceBreakdown, totalWeight,\n overallScore, categoryScores } = computeScoring(rules, ruleResults, suppressedIds)\n\n const proved = opts.proofRecords !== undefined\n ? computeProvedScore(rules, ruleResults, suppressedIds, totalWeight, opts.proofRecords)\n : {}\n\n return {\n agentName: manifest.metadata.name,\n timestamp: new Date().toISOString(),\n overallScore,\n grade: scoreToGrade(overallScore),\n categoryScores,\n violations,\n suppressions,\n passedRules: rules.length - violations.length,\n totalRules: rules.length,\n packBreakdown: packBreakdown as Record<CompliancePack, { passed: number; total: number }>,\n evidenceBreakdown,\n ...proved,\n }\n}\n","import type { AgentSpecManifest } from '../schema/manifest.schema.js'\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface GeneratedAgent {\n framework: string\n files: Record<string, string> // filename → content\n installCommands: string[]\n envVars: string[]\n readme: string\n}\n\nexport interface FrameworkAdapter<TOptions = unknown> {\n framework: string\n version: string\n generate(manifest: AgentSpecManifest, options?: TOptions): GeneratedAgent\n}\n\n// ── Adapter registry ──────────────────────────────────────────────────────────\n\nconst _registry = new Map<string, FrameworkAdapter>()\n\n/**\n * Register a framework adapter.\n * Called by adapter packages (e.g. @agentspec/adapter-langgraph) via side-effect import.\n */\nexport function registerAdapter(adapter: FrameworkAdapter): void {\n _registry.set(adapter.framework.toLowerCase(), adapter)\n}\n\n/**\n * Get a registered adapter by framework name.\n */\nexport function getAdapter(framework: string): FrameworkAdapter | undefined {\n return _registry.get(framework.toLowerCase())\n}\n\n/**\n * List all registered frameworks.\n */\nexport function listAdapters(): string[] {\n return [..._registry.keys()]\n}\n\n/**\n * Generate framework-specific agent code from a manifest.\n *\n * @throws Error if the framework adapter is not registered\n */\nexport function generateAdapter(\n manifest: AgentSpecManifest,\n framework: string,\n options?: unknown,\n): GeneratedAgent {\n const adapter = _registry.get(framework.toLowerCase())\n if (!adapter) {\n throw new Error(\n `No adapter registered for framework: ${framework}\\n` +\n ` Available: ${listAdapters().join(', ') || 'none'}\\n` +\n ` Install an adapter package, e.g: npm install @agentspec/adapter-langgraph`,\n )\n }\n return adapter.generate(manifest, options)\n}\n","/** In-process token usage counter — aggregates LLM call tokens between heartbeat pushes. */\n\n// ── Types (exported) ─────────────────────────────────────────────────────────\n\nexport interface ModelUsageEntry {\n modelId: string\n promptTokens: number\n completionTokens: number\n totalTokens: number\n callCount: number\n}\n\nexport interface UsageSnapshot {\n windowStartedAt: string\n models: ModelUsageEntry[]\n totalTokens: number\n totalCalls: number\n}\n\n// ── Private helpers ──────────────────────────────────────────────────────────\n\nfunction createEmptyEntry(modelId: string): ModelUsageEntry {\n return { modelId, promptTokens: 0, completionTokens: 0, totalTokens: 0, callCount: 0 }\n}\n\nfunction buildSnapshot(\n counters: Map<string, ModelUsageEntry>,\n windowStart: Date,\n): UsageSnapshot {\n // Shallow-copy each entry to avoid exposing mutable internal state\n const models = [...counters.values()].map((e) => ({ ...e }))\n let totalTokens = 0\n let totalCalls = 0\n for (const m of models) {\n totalTokens += m.totalTokens\n totalCalls += m.callCount\n }\n return {\n windowStartedAt: windowStart.toISOString(),\n models,\n totalTokens,\n totalCalls,\n }\n}\n\n// ── Public class ─────────────────────────────────────────────────────────────\n\nexport class UsageLedger {\n private counters = new Map<string, ModelUsageEntry>()\n private windowStart = new Date()\n\n /**\n * Record token usage for a single LLM call.\n * Call this once per LLM invocation with the model ID and token counts.\n */\n record(modelId: string, promptTokens: number, completionTokens: number): void {\n const p = Math.max(0, promptTokens)\n const c = Math.max(0, completionTokens)\n let entry = this.counters.get(modelId)\n if (!entry) {\n entry = createEmptyEntry(modelId)\n this.counters.set(modelId, entry)\n }\n entry.promptTokens += p\n entry.completionTokens += c\n entry.totalTokens += p + c\n entry.callCount += 1\n }\n\n /**\n * Return a frozen snapshot of the current usage window.\n *\n * @param reset - When true (default), clears all counters and starts a new\n * window. Use reset=true in the heartbeat push so each window is shipped\n * exactly once. Use reset=false for inspection without draining.\n */\n snapshot(reset = true): UsageSnapshot {\n const snap = buildSnapshot(this.counters, this.windowStart)\n if (reset) {\n this.counters = new Map()\n this.windowStart = new Date()\n }\n return snap\n }\n}\n","/**\n * AgentSpecReporter — agent-side SDK module.\n *\n * Runs live health checks (model, MCP, memory, services) inside the agent\n * process where full connectivity is available. Caches the result with a\n * configurable TTL and exposes it via a standard HTTP handler mounted at\n * GET /agentspec/health.\n *\n * Usage (Fastify):\n * const reporter = new AgentSpecReporter(manifest, { refreshIntervalMs: 30_000 })\n * reporter.start()\n * await app.register(agentSpecFastifyPlugin(reporter))\n *\n * Usage (Express):\n * const reporter = new AgentSpecReporter(manifest)\n * reporter.start()\n * app.use('/agentspec', agentSpecExpressRouter(reporter))\n */\n\nimport { runHealthCheck } from '../health/index.js'\nimport { runAudit } from '../audit/index.js'\nimport type { AgentSpecManifest } from '../schema/manifest.schema.js'\nimport type { HealthReport } from '../health/index.js'\nimport type { PushModeOptions } from './push.js'\nimport { UsageLedger } from './usage-ledger.js'\n\nexport interface ReporterOptions {\n /**\n * How often to refresh health checks in the background.\n * Default: 30_000 ms (30 seconds)\n */\n refreshIntervalMs?: number\n /**\n * Maximum age before a cached result is considered stale and triggers a\n * synchronous refresh on the next getReport() call.\n * Default: 60_000 ms (60 seconds)\n */\n staleAfterMs?: number\n}\n\ninterface CachedReport {\n report: HealthReport\n ts: number\n}\n\nexport class AgentSpecReporter {\n private cached: CachedReport | null = null\n private timer: ReturnType<typeof setInterval> | null = null\n private _pushTimer: ReturnType<typeof setInterval> | null = null\n private readonly refreshIntervalMs: number\n private readonly staleAfterMs: number\n private refreshing = false\n private stopped = false\n private readonly registeredTools = new Set<string>()\n\n /** In-process token usage accumulator. */\n readonly usage = new UsageLedger()\n\n constructor(\n private readonly manifest: AgentSpecManifest,\n private readonly opts: ReporterOptions = {},\n ) {\n this.refreshIntervalMs = opts.refreshIntervalMs ?? 30_000\n this.staleAfterMs = opts.staleAfterMs ?? 60_000\n }\n\n /**\n * Register a tool handler by name.\n * Only registered tools report status: 'pass' in the live health check.\n * Declared tools that are not registered report status: 'fail'.\n *\n * Call this once per tool after wiring up your tool handlers:\n * reporter.registerTool('search-arxiv', handler)\n *\n * The handler argument is accepted but not called — it is retained solely so\n * callers can pass the real function object for documentation purposes.\n */\n registerTool(name: string, _handler?: unknown): void {\n this.registeredTools.add(name)\n }\n\n /**\n * Start background refresh. Call once during app startup.\n * The first refresh runs immediately (non-blocking).\n */\n start(): void {\n if (this.timer !== null) return // already started\n\n // Kick off first refresh immediately (non-blocking, errors swallowed)\n void this.refresh()\n\n this.timer = setInterval(() => {\n void this.refresh()\n }, this.refreshIntervalMs)\n\n // Don't prevent Node.js from exiting if the app doesn't call stop()\n if (this.timer.unref) {\n this.timer.unref()\n }\n }\n\n /**\n * Stop background refresh. Call during graceful shutdown.\n * After stop(), getReport() will no longer trigger new checks.\n */\n stop(): void {\n this.stopped = true\n if (this.timer !== null) {\n clearInterval(this.timer)\n this.timer = null\n }\n }\n\n /**\n * Returns the cached HealthReport.\n * If no cached result exists or the cache is stale, runs checks synchronously.\n * After stop() is called, returns the last cached result (no new checks run).\n */\n async getReport(): Promise<HealthReport> {\n const now = Date.now()\n\n if (this.cached && (this.stopped || now - this.cached.ts < this.staleAfterMs)) {\n return this.cached.report\n }\n\n // First call or stale — run synchronously\n await this.refresh()\n return this.cached!.report\n }\n\n /**\n * Standard HTTP handler. Mount at GET /agentspec/health.\n * Returns 200 with the HealthReport as JSON.\n *\n * Compatible with any framework that accepts (req, res) handlers\n * with res.status() and res.json().\n */\n httpHandler(): (\n req: unknown,\n res: { json(body: unknown): void; status(code: number): { json(body: unknown): void } },\n ) => Promise<void> {\n return async (_req, res) => {\n try {\n const report = await this.getReport()\n res.status(200).json(report)\n } catch (err) {\n res.status(500).json({ error: String(err) })\n }\n }\n }\n\n /**\n * Start sending heartbeats to the control plane.\n * Fires immediately, then repeats every `intervalSeconds` (default 30).\n * Idempotent — calling twice does not create a second timer.\n */\n startPushMode(opts: PushModeOptions): void {\n if (this._pushTimer !== null) return // idempotent\n\n const intervalMs = (opts.intervalSeconds ?? 30) * 1_000\n\n // Fire immediately (non-blocking)\n void this._pushHeartbeat(opts)\n\n this._pushTimer = setInterval(() => {\n void this._pushHeartbeat(opts)\n }, intervalMs)\n\n // Don't prevent Node.js from exiting\n if (this._pushTimer.unref) {\n this._pushTimer.unref()\n }\n }\n\n private async _pushHeartbeat(opts: PushModeOptions): Promise<void> {\n try {\n const health = await this.getReport()\n const gap = runAudit(this.manifest)\n const usage = this.usage.snapshot(false)\n\n // Build payload, cap at 64 KB by trimming checks\n const trimmedChecks = [...health.checks]\n let body = JSON.stringify({ health, gap, usage })\n if (body.length > 65_536) {\n while (trimmedChecks.length > 0) {\n trimmedChecks.pop()\n body = JSON.stringify({ health: { ...health, checks: trimmedChecks }, gap, usage })\n if (body.length <= 65_536) break\n }\n }\n\n let res: Response\n try {\n res = await fetch(`${opts.controlPlaneUrl}/api/v1/heartbeat`, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${opts.apiKey}`,\n 'Content-Type': 'application/json',\n },\n body,\n })\n } catch (err) {\n const sanitized = String(err).split(opts.apiKey).join('[REDACTED]')\n opts.onError?.(new Error(sanitized))\n return\n }\n\n if (res.ok) {\n this.usage.snapshot(true)\n } else {\n opts.onError?.(new Error(`Heartbeat failed: HTTP ${res.status}`))\n }\n } catch (err) {\n const sanitized = String(err).split(opts.apiKey).join('[REDACTED]')\n opts.onError?.(new Error(sanitized))\n }\n }\n\n /** Stop sending heartbeats to the control plane. */\n stopPushMode(): void {\n if (this._pushTimer !== null) {\n clearInterval(this._pushTimer)\n this._pushTimer = null\n }\n }\n\n /** Returns true if heartbeats are currently being sent. */\n isPushModeActive(): boolean {\n return this._pushTimer !== null\n }\n\n private async refresh(): Promise<void> {\n if (this.stopped || this.refreshing) return // stopped or concurrent refresh in flight\n this.refreshing = true\n\n try {\n const report = await runHealthCheck(this.manifest, {\n checkModel: true,\n checkMcp: true,\n checkMemory: true,\n checkServices: true,\n })\n\n // Add tool checks for all declared tools.\n // A tool reports 'pass' only if registerTool() was called for it.\n // Unregistered tools report 'fail' — the caller must wire handlers explicitly.\n const toolChecks = (this.manifest.spec.tools ?? []).map((tool) => {\n const registered = this.registeredTools.has(tool.name)\n return {\n id: `tool:${tool.name}` as const,\n category: 'tool' as const,\n status: registered ? ('pass' as const) : ('fail' as const),\n severity: 'info' as const,\n ...(registered ? {} : { message: 'Handler not registered — call reporter.registerTool()' }),\n }\n })\n\n const toolPassed = toolChecks.filter((c) => c.status === 'pass').length\n const toolFailed = toolChecks.filter((c) => c.status === 'fail').length\n\n const enrichedReport: HealthReport = {\n ...report,\n checks: [...report.checks, ...toolChecks],\n summary: {\n ...report.summary,\n passed: report.summary.passed + toolPassed,\n failed: report.summary.failed + toolFailed,\n },\n }\n\n this.cached = { report: enrichedReport, ts: Date.now() }\n } catch {\n // Preserve the previous cache on error — don't reset to null.\n // Always advance the timestamp so repeated failures don't cause a retry\n // storm (getReport would re-trigger refresh on every call otherwise).\n if (!this.cached) {\n this.cached = {\n ts: Date.now(),\n report: {\n agentName: this.manifest.metadata.name,\n timestamp: new Date().toISOString(),\n status: 'unhealthy',\n summary: { passed: 0, failed: 1, warnings: 0, skipped: 0 },\n checks: [\n {\n id: 'reporter:internal-error',\n category: 'env',\n status: 'fail',\n severity: 'error',\n message: 'AgentSpecReporter failed to run health checks',\n },\n ],\n },\n }\n } else {\n // Advance the cached timestamp so the stale check in getReport() won't\n // immediately re-trigger another refresh that will also fail.\n this.cached = { ...this.cached, ts: Date.now() }\n }\n } finally {\n this.refreshing = false\n }\n }\n}\n","/**\n * Fastify plugin adapter for AgentSpecReporter.\n *\n * Registers GET /agentspec/health on the Fastify instance.\n *\n * Usage:\n * import { AgentSpecReporter } from '@agentspec/sdk'\n * import { agentSpecFastifyPlugin } from '@agentspec/sdk/agent/adapters/fastify'\n *\n * const reporter = new AgentSpecReporter(manifest, { refreshIntervalMs: 30_000 })\n * reporter.start()\n * await app.register(agentSpecFastifyPlugin(reporter))\n */\n\nimport type { AgentSpecReporter } from '../reporter.js'\n\n// Fastify types — declared inline to avoid adding fastify as a required dep\ntype FastifyReply = {\n status(code: number): FastifyReply\n send(body: unknown): void\n}\ntype FastifyRequest = unknown\ntype FastifyInstance = {\n get(path: string, handler: (req: FastifyRequest, reply: FastifyReply) => Promise<void>): void\n}\ntype FastifyPluginAsync = (app: FastifyInstance) => Promise<void>\n\n/**\n * Returns a Fastify plugin that registers the AgentSpec health endpoint.\n *\n * @param reporter - An AgentSpecReporter instance (should be started before registering)\n */\nexport function agentSpecFastifyPlugin(reporter: AgentSpecReporter): FastifyPluginAsync {\n return async (app: FastifyInstance): Promise<void> => {\n app.get('/agentspec/health', async (_req: FastifyRequest, reply: FastifyReply) => {\n try {\n const report = await reporter.getReport()\n reply.status(200).send(report)\n } catch (err) {\n reply.status(500).send({ error: String(err) })\n }\n })\n\n app.get('/agentspec/usage', async (_req: FastifyRequest, reply: FastifyReply) => {\n try {\n const snapshot = reporter.usage.snapshot(false)\n reply.status(200).send(snapshot)\n } catch (err) {\n reply.status(500).send({ error: String(err) })\n }\n })\n }\n}\n","/**\n * Express middleware adapter for AgentSpecReporter.\n *\n * Returns a plain Express middleware (req, res, next) that handles\n * GET /health and GET /usage relative to the mount point.\n *\n * Usage:\n * import { AgentSpecReporter } from '@agentspec/sdk'\n * import { agentSpecExpressRouter } from '@agentspec/sdk/agent/adapters/express'\n *\n * const reporter = new AgentSpecReporter(manifest)\n * reporter.start()\n * app.use('/agentspec', agentSpecExpressRouter(reporter))\n *\n * The middleware also exposes a ._routes array for introspection in tests.\n */\n\nimport type { AgentSpecReporter } from '../reporter.js'\n\n// Express types — declared inline to avoid adding express as a required dep\ntype ExpressRequest = { method?: string; path?: string; url?: string }\ntype ExpressResponse = {\n status(code: number): ExpressResponse\n json(body: unknown): void\n}\ntype NextFunction = (err?: unknown) => void\ntype ExpressMiddleware = (\n req: ExpressRequest,\n res: ExpressResponse,\n next: NextFunction,\n) => void\n\n/**\n * Creates an Express-compatible middleware that serves the AgentSpec health\n * endpoint at GET /health (relative to where it is mounted).\n *\n * Mount at /agentspec to expose GET /agentspec/health.\n *\n * @param reporter - An AgentSpecReporter instance (should be started before use)\n * @returns A plain Express middleware function (compatible with app.use())\n */\nexport function agentSpecExpressRouter(\n reporter: AgentSpecReporter,\n): ExpressMiddleware & { _routes: Array<{ path: string }> } {\n const handler: ExpressMiddleware = async (req, res, next) => {\n const method = req.method?.toUpperCase() ?? 'GET'\n const path = req.path ?? req.url ?? ''\n\n if (method !== 'GET') {\n next()\n return\n }\n\n if (path === '/health') {\n try {\n const report = await reporter.getReport()\n res.status(200).json(report)\n } catch (err) {\n try {\n res.status(500).json({ error: String(err) })\n } catch {\n next(err)\n }\n }\n return\n }\n\n if (path === '/usage') {\n try {\n const snapshot = reporter.usage.snapshot(false)\n res.status(200).json(snapshot)\n } catch (err) {\n try {\n res.status(500).json({ error: String(err) })\n } catch {\n next(err)\n }\n }\n return\n }\n\n next()\n }\n\n // Expose registered routes for test introspection\n ;(handler as ExpressMiddleware & { _routes: Array<{ path: string }> })._routes = [\n { path: '/health' },\n { path: '/usage' },\n ]\n\n return handler as ExpressMiddleware & { _routes: Array<{ path: string }> }\n}\n","function requireOpaMode(\n envVar: string,\n fallback: 'enforce' | 'track' | 'off',\n): 'enforce' | 'track' | 'off' {\n const raw = process.env[envVar]\n if (raw === undefined) return fallback\n if (raw === 'enforce' || raw === 'track' || raw === 'off') return raw\n throw new Error(\n `Invalid ${envVar}: \"${raw}\" — must be one of: enforce, track, off`,\n )\n}\n\nfunction requirePort(envVar: string, fallback: number): number {\n const raw = process.env[envVar]\n const port = raw !== undefined ? Number(raw) : fallback\n if (!Number.isInteger(port) || port < 1 || port > 65535) {\n throw new Error(\n `Invalid ${envVar}: \"${raw}\" — must be an integer between 1 and 65535`,\n )\n }\n return port\n}\n\n/**\n * Validates that the upstream URL is a legal http or https URL.\n * Throws at startup for fast failure rather than at request time.\n * Only http/https are permitted — file://, ftp://, etc. are rejected.\n */\nfunction requireHttpUrl(envVar: string, fallback: string): string {\n const raw = process.env[envVar] ?? fallback\n try {\n const parsed = new URL(raw)\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new Error(`must use http: or https: protocol, got \"${parsed.protocol}\"`)\n }\n // Strip any trailing slash for consistency\n return raw.replace(/\\/+$/, '')\n } catch (err) {\n throw new Error(\n `Invalid ${envVar}: \"${raw}\" — ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n}\n\n/**\n * Reads an env var and validates it is a positive integer (≥ 1).\n * Falls back to `fallback` when the env var is not set.\n * Exported so it can be unit-tested independently.\n */\nexport function requirePositiveInt(envVar: string, fallback: number): number {\n const raw = process.env[envVar]\n const val = raw !== undefined ? Number(raw) : fallback\n if (!Number.isInteger(val) || val < 1) {\n throw new Error(\n `Invalid ${envVar}: \"${raw ?? fallback}\" — must be a positive integer (≥ 1)`,\n )\n }\n return val\n}\n\nexport const config = {\n upstreamUrl: requireHttpUrl('UPSTREAM_URL', 'http://localhost:8000'),\n manifestPath: process.env['MANIFEST_PATH'] ?? '/manifest/agent.yaml',\n proxyPort: requirePort('PROXY_PORT', 4000),\n controlPlanePort: requirePort('CONTROL_PLANE_PORT', 4001),\n anthropicApiKey: process.env['ANTHROPIC_API_KEY'],\n auditRingSize: requirePositiveInt('AUDIT_RING_SIZE', 1000),\n /**\n * Optional OPA sidecar URL. When set, the /gap endpoint queries OPA for\n * policy violations derived from the agent.yaml manifest declarations.\n * Falls back gracefully if OPA is unreachable.\n *\n * Set OPA_URL=http://localhost:8181 in environments that run OPA as a sidecar.\n * Use `agentspec generate-policy agent.yaml --out policies/` to generate the bundle.\n */\n opaUrl: process.env['OPA_URL'] ?? null,\n\n /**\n * OPA proxy enforcement mode. Controls what happens when OPA reports violations\n * on a proxied request.\n *\n * enforce — block the request with 403 PolicyViolation before forwarding\n * track — record violations in the audit ring and response header, but forward\n * off — disable OPA per-request checks on the proxy entirely\n *\n * Defaults to 'track' so OPA is additive and never breaks existing traffic.\n * Set OPA_PROXY_MODE=enforce only once you have verified your policy bundle\n * and your agents set X-AgentSpec-Guardrails-Invoked correctly.\n */\n opaProxyMode: requireOpaMode('OPA_PROXY_MODE', 'track'),\n} as const\n","import type { FastifyInstance } from 'fastify'\nimport { AUDIT_RULE_IDS, type ProofRecord } from '@agentspec/sdk'\n\n// ── Constants ─────────────────────────────────────────────────────────────────\nconst MAX_FIELD_LENGTH = 2048\n\n// ── ProofStore ────────────────────────────────────────────────────────────────\n\n/**\n * In-memory store for proof records submitted by external tools.\n * Each ruleId holds at most one proof record (the latest submission overwrites).\n *\n * WARNING: Records are lost on sidecar restart. For production use,\n * re-submit proof records from your CI pipeline after deployment.\n * Set AGENTSPEC_PROOF_TOKEN to require bearer-token auth on mutating routes.\n */\nexport class ProofStore {\n private records = new Map<string, ProofRecord>()\n\n isValidRuleId(ruleId: string): boolean {\n return AUDIT_RULE_IDS.has(ruleId)\n }\n\n set(record: ProofRecord): void {\n this.records.set(record.ruleId, record)\n }\n\n get(ruleId: string): ProofRecord | undefined {\n return this.records.get(ruleId)\n }\n\n getAll(): ProofRecord[] {\n return [...this.records.values()]\n }\n\n delete(ruleId: string): boolean {\n return this.records.delete(ruleId)\n }\n\n clear(): void {\n this.records.clear()\n }\n}\n\n// ── Route builder ─────────────────────────────────────────────────────────────\n\nexport async function buildProofRoutes(\n app: FastifyInstance,\n store: ProofStore,\n): Promise<void> {\n const proofToken = process.env['AGENTSPEC_PROOF_TOKEN']\n\n /**\n * Authenticate mutating requests (POST, DELETE) when AGENTSPEC_PROOF_TOKEN is set.\n * GET requests are always allowed.\n */\n app.addHook('onRequest', async (req, reply) => {\n if (req.method === 'GET') return\n if (!proofToken) return // token not configured — allow (dev mode)\n const authHeader = req.headers['authorization'] ?? ''\n const token = authHeader.startsWith('Bearer ') ? authHeader.slice(7) : ''\n if (token !== proofToken) {\n return reply.status(401).send({ error: 'Unauthorized — provide a valid Bearer token in Authorization header' })\n }\n })\n\n /**\n * GET /proof\n * Returns all proof records as a JSON array.\n */\n app.get('/proof', async () => {\n return store.getAll()\n })\n\n /**\n * GET /proof/rule/:ruleId\n * Returns the proof record for a specific rule, or 404 if not found.\n */\n app.get<{ Params: { ruleId: string } }>('/proof/rule/:ruleId', async (req, reply) => {\n const { ruleId } = req.params\n const record = store.get(ruleId)\n if (!record) {\n return reply.status(404).send({ error: `No proof record for rule ${ruleId}` })\n }\n return record\n })\n\n /**\n * POST /proof/rule/:ruleId\n * Submit a proof record for a specific rule.\n * Body: { verifiedBy: string, method: string, expiresAt?: string }\n * Returns 201 Created with the stored ProofRecord.\n * Returns 400 if ruleId is not a known rule.\n */\n app.post<{\n Params: { ruleId: string }\n Body: { verifiedBy: string; method: string; expiresAt?: string }\n }>('/proof/rule/:ruleId', async (req, reply) => {\n const { ruleId } = req.params\n\n if (!store.isValidRuleId(ruleId)) {\n return reply.status(400).send({\n error: `Unknown rule ID: ${ruleId}`,\n validIds: [...AUDIT_RULE_IDS].sort(),\n })\n }\n\n const body = req.body as { verifiedBy?: unknown; method?: unknown; expiresAt?: unknown }\n\n if (typeof body?.verifiedBy !== 'string' || !body.verifiedBy) {\n return reply.status(400).send({ error: 'verifiedBy is required and must be a string' })\n }\n if (typeof body?.method !== 'string' || !body.method) {\n return reply.status(400).send({ error: 'method is required and must be a string' })\n }\n if (body.verifiedBy.length > MAX_FIELD_LENGTH) {\n return reply.status(400).send({ error: `verifiedBy exceeds ${MAX_FIELD_LENGTH} characters` })\n }\n if (body.method.length > MAX_FIELD_LENGTH) {\n return reply.status(400).send({ error: `method exceeds ${MAX_FIELD_LENGTH} characters` })\n }\n if (typeof body.expiresAt === 'string') {\n const d = new Date(body.expiresAt)\n if (isNaN(d.getTime())) {\n return reply.status(400).send({ error: 'expiresAt must be a valid ISO 8601 timestamp' })\n }\n }\n\n const record: ProofRecord = {\n ruleId,\n verifiedAt: new Date().toISOString(),\n verifiedBy: body.verifiedBy,\n method: body.method,\n ...(typeof body.expiresAt === 'string' ? { expiresAt: body.expiresAt } : {}),\n }\n\n store.set(record)\n return reply.status(201).send(record)\n })\n\n /**\n * DELETE /proof/rule/:ruleId\n * Remove a proof record. Returns 204 No Content.\n * Returns 404 if no record exists for the rule.\n */\n app.delete<{ Params: { ruleId: string } }>('/proof/rule/:ruleId', async (req, reply) => {\n const { ruleId } = req.params\n const existed = store.delete(ruleId)\n if (!existed) {\n return reply.status(404).send({ error: `No proof record for rule ${ruleId}` })\n }\n return reply.status(204).send()\n })\n}\n","import Fastify, { type FastifyInstance } from 'fastify'\nimport type { AgentSpecManifest } from '@agentspec/sdk'\nimport type { AuditRing } from '../audit-ring.js'\nimport { buildHealthRoutes } from './health.js'\nimport { buildCapabilitiesRoutes } from './capabilities.js'\nimport { buildMcpRoutes } from './mcp.js'\nimport { buildAuditRoutes } from './audit.js'\nimport { buildExplainRoutes } from './explain.js'\nimport { buildExploreRoutes } from './explore.js'\nimport { buildEvalRoutes } from './eval.js'\nimport { buildGapRoutes } from './gap.js'\nimport { buildEventsRoutes } from './events.js'\nimport { buildProofRoutes, ProofStore } from './proof.js'\nimport { buildUsageRoutes } from './usage.js'\nimport { config } from '../config.js'\n\nexport interface ControlPlaneOptions {\n logger?: boolean\n proxyUrl?: string\n startedAt?: number\n /** OPA URL to use for /events behavioral evaluation. Defaults to config.opaUrl. */\n opaUrl?: string | null\n /** Proof store instance to use. If not provided a fresh store is created. */\n proofStore?: ProofStore\n}\n\nexport async function buildControlPlaneApp(\n manifest: AgentSpecManifest,\n auditRing: AuditRing,\n opts: ControlPlaneOptions = {},\n): Promise<FastifyInstance> {\n const app = Fastify({ logger: opts.logger ?? false })\n\n await buildHealthRoutes(app, manifest)\n await buildCapabilitiesRoutes(app, manifest, { proxyUrl: opts.proxyUrl })\n await buildMcpRoutes(app, manifest)\n await buildAuditRoutes(app, auditRing)\n await buildExplainRoutes(app, auditRing)\n await buildExploreRoutes(app, manifest, { startedAt: opts.startedAt })\n await buildEvalRoutes(app, manifest)\n await buildGapRoutes(app, manifest, auditRing)\n await buildEventsRoutes(app, manifest, auditRing, { opaUrl: opts.opaUrl })\n await buildProofRoutes(app, opts.proofStore ?? new ProofStore())\n await buildUsageRoutes(app, auditRing, config.upstreamUrl)\n\n return app\n}\n\nexport { ProofStore }\n","/**\n * Agent SDK introspection probe.\n *\n * Attempts GET {upstreamUrl}/agentspec/health to discover whether the upstream\n * agent has integrated @agentspec/sdk's AgentSpecReporter. Returns a cached\n * AgentProbeResult:\n * - sdkAvailable: true → live HealthReport from the agent\n * - sdkAvailable: false → graceful fallback; callers use static manifest analysis\n */\n\nimport type { HealthReport } from '@agentspec/sdk'\n\nexport interface AgentProbeResult {\n /** true if GET /agentspec/health returned a valid HealthReport */\n sdkAvailable: boolean\n /** Live HealthReport from the agent (only when sdkAvailable: true) */\n report?: HealthReport\n /** Wall-clock time of the probe request */\n probeLatencyMs: number\n}\n\n/**\n * Attempts GET {upstreamUrl}/agentspec/health with a configurable timeout.\n * Returns { sdkAvailable: false } if the endpoint is absent (404), malformed,\n * times out, or is unreachable.\n */\nexport async function probeAgent(\n upstreamUrl: string,\n timeoutMs = 5_000,\n): Promise<AgentProbeResult> {\n const url = `${upstreamUrl}/agentspec/health`\n const start = Date.now()\n\n try {\n const res = await fetch(url, {\n signal: AbortSignal.timeout(timeoutMs),\n headers: { Accept: 'application/json' },\n })\n\n const probeLatencyMs = Date.now() - start\n\n if (!res.ok) {\n // 404 = SDK not integrated; other errors = degraded but not fatal\n return { sdkAvailable: false, probeLatencyMs }\n }\n\n const body = (await res.json()) as unknown\n\n if (!isHealthReport(body)) {\n return { sdkAvailable: false, probeLatencyMs }\n }\n\n return { sdkAvailable: true, report: body, probeLatencyMs }\n } catch {\n // Timeout, ECONNREFUSED, parse error — all treated as \"not available\"\n return { sdkAvailable: false, probeLatencyMs: Date.now() - start }\n }\n}\n\n/**\n * Minimal shape guard — validates the response looks like a HealthReport.\n * Does not validate every field; the sidecar treats unrecognised fields as\n * safe to ignore.\n */\nfunction isHealthReport(value: unknown): value is HealthReport {\n if (typeof value !== 'object' || value === null) return false\n const v = value as Record<string, unknown>\n return (\n typeof v['agentName'] === 'string' &&\n typeof v['timestamp'] === 'string' &&\n typeof v['status'] === 'string' &&\n Array.isArray(v['checks'])\n )\n}\n","import type { FastifyInstance } from 'fastify'\nimport { runHealthCheck, type AgentSpecManifest } from '@agentspec/sdk'\nimport { config } from '../config.js'\nimport { probeAgent } from './agent-probe.js'\n\nexport async function buildHealthRoutes(\n app: FastifyInstance,\n manifest: AgentSpecManifest,\n): Promise<void> {\n // Liveness — always 200 while the process is running\n app.get('/health/live', async () => {\n return { status: 'live' }\n })\n\n // Readiness — probes spec.requires.* dependencies via SDK runHealthCheck,\n // enriched with live agent data when @agentspec/sdk reporter is integrated.\n app.get('/health/ready', async (_req, reply) => {\n try {\n // Static manifest analysis (always available)\n const staticReport = await runHealthCheck(manifest, {\n checkModel: false, // skip model API calls — too slow/costly from sidecar\n checkMcp: true,\n checkMemory: true,\n })\n\n // Attempt live probe — graceful degradation if agent SDK not integrated\n const probe = await probeAgent(config.upstreamUrl)\n\n // Prefer live data from the agent when available\n const checks = probe.sdkAvailable ? probe.report!.checks : staticReport.checks\n const source: 'agent-sdk' | 'manifest-static' = probe.sdkAvailable\n ? 'agent-sdk'\n : 'manifest-static'\n\n // Recompute status from the resolved check set\n const failed = checks.filter((c) => c.status === 'fail')\n const warnings = checks.filter((c) => c.status === 'warn')\n const hasErrors = failed.some((c) => c.severity === 'error')\n const hasWarnings = failed.some((c) => c.severity === 'warning') || warnings.length > 0\n\n const reportStatus = hasErrors ? 'unhealthy' : hasWarnings ? 'degraded' : 'healthy'\n\n const status =\n reportStatus === 'healthy'\n ? 'ready'\n : reportStatus === 'degraded'\n ? 'degraded'\n : 'unavailable'\n\n const httpStatus = status === 'unavailable' ? 503 : 200\n reply.status(httpStatus)\n\n return {\n status,\n source,\n agentName: probe.sdkAvailable ? probe.report!.agentName : staticReport.agentName,\n timestamp: probe.sdkAvailable ? probe.report!.timestamp : staticReport.timestamp,\n summary: probe.sdkAvailable ? probe.report!.summary : staticReport.summary,\n checks,\n }\n } catch (err) {\n reply.status(503)\n return { status: 'unavailable', source: 'manifest-static', checks: [], error: String(err) }\n }\n })\n}\n","import type { FastifyInstance } from 'fastify'\nimport type { AgentSpecManifest } from '@agentspec/sdk'\nimport { config } from '../config.js'\n\nexport interface AgentCard {\n schema_version: string\n name: string\n description: string\n url: string\n capabilities: {\n streaming: boolean\n mcp: boolean\n }\n tools: Array<{\n name: string\n description: string\n annotations?: Record<string, boolean | undefined>\n }>\n subagents: Array<{\n name: string\n ref: unknown\n invocation: string\n }>\n compliance_packs: string[]\n agentspec_version: string\n}\n\nexport function buildAgentCard(\n manifest: AgentSpecManifest,\n proxyUrl: string,\n): AgentCard {\n return {\n schema_version: '1.0',\n name: manifest.metadata.name,\n description: manifest.metadata.description,\n url: proxyUrl,\n capabilities: {\n streaming: manifest.spec.api?.streaming ?? false,\n mcp: true,\n },\n tools: (manifest.spec.tools ?? []).map((t) => ({\n name: t.name,\n description: t.description,\n annotations: t.annotations\n ? {\n readOnlyHint: t.annotations.readOnlyHint,\n destructiveHint: t.annotations.destructiveHint,\n idempotentHint: t.annotations.idempotentHint,\n openWorldHint: t.annotations.openWorldHint,\n }\n : undefined,\n })),\n subagents: (manifest.spec.subagents ?? []).map((s) => ({\n name: s.name,\n ref: s.ref,\n invocation: s.invocation,\n })),\n compliance_packs: manifest.spec.compliance?.packs ?? [],\n agentspec_version: '1.0.0',\n }\n}\n\nexport async function buildCapabilitiesRoutes(\n app: FastifyInstance,\n manifest: AgentSpecManifest,\n opts: { proxyUrl?: string } = {},\n): Promise<void> {\n const proxyUrl =\n opts.proxyUrl ?? `http://localhost:${config.proxyPort}`\n const card = buildAgentCard(manifest, proxyUrl)\n\n app.get('/capabilities', async () => card)\n app.get('/.well-known/agent.json', async () => card)\n}\n","import type { FastifyInstance } from 'fastify'\nimport type { AgentSpecManifest } from '@agentspec/sdk'\nimport { config } from '../config.js'\n\n/**\n * Minimal MCP Streamable HTTP transport (2024-11-05 spec).\n * Exposes each spec.tools[] entry as an MCP tool.\n * Tool calls are proxied via POST /chat (or spec.api.chatEndpoint.path) to the upstream.\n */\n\ninterface McpRequest {\n jsonrpc: string\n id?: string | number\n method: string\n params?: Record<string, unknown>\n}\n\ninterface McpResponse {\n jsonrpc: '2.0'\n id?: string | number | null\n result?: unknown\n error?: { code: number; message: string }\n}\n\nfunction mcpError(\n id: string | number | null | undefined,\n code: number,\n message: string,\n): McpResponse {\n return { jsonrpc: '2.0', id: id ?? null, error: { code, message } }\n}\n\nexport async function buildMcpRoutes(\n app: FastifyInstance,\n manifest: AgentSpecManifest,\n): Promise<void> {\n const tools = (manifest.spec.tools ?? []).map((t) => ({\n name: t.name,\n description: t.description,\n inputSchema: {\n type: 'object',\n properties: {\n message: {\n type: 'string',\n description: `Input message for tool ${t.name}`,\n },\n },\n required: ['message'],\n },\n annotations: t.annotations,\n }))\n\n // MCP JSON-RPC handler — single endpoint per Streamable HTTP spec\n app.post<{ Body: McpRequest }>('/mcp', async (req, reply) => {\n const { jsonrpc, id, method, params } = req.body ?? {}\n\n if (jsonrpc !== '2.0') {\n reply.status(400)\n return mcpError(id, -32600, 'Invalid Request: jsonrpc must be \"2.0\"')\n }\n\n if (typeof method !== 'string') {\n reply.status(400)\n return mcpError(id, -32600, 'Invalid Request: method must be a string')\n }\n\n switch (method) {\n case 'initialize': {\n return {\n jsonrpc: '2.0',\n id,\n result: {\n protocolVersion: '2024-11-05',\n capabilities: { tools: {} },\n serverInfo: {\n name: `agentspec-sidecar/${manifest.metadata.name}`,\n version: '0.1.0',\n },\n },\n } satisfies McpResponse\n }\n\n case 'tools/list': {\n return {\n jsonrpc: '2.0',\n id,\n result: { tools },\n } satisfies McpResponse\n }\n\n case 'tools/call': {\n const rawName = params?.['name']\n if (typeof rawName !== 'string') {\n return mcpError(id, -32602, 'Invalid params: name must be a string')\n }\n const toolName: string = rawName\n const toolArgs = params?.['arguments'] as Record<string, unknown> | undefined\n\n const tool = tools.find((t) => t.name === toolName)\n if (!tool) {\n return mcpError(id, -32602, `Unknown tool: ${toolName}`)\n }\n\n // Proxy the tool call to upstream via chat endpoint\n try {\n const upstream = config.upstreamUrl\n const chatPath = manifest.spec.api?.chatEndpoint?.path ?? '/v1/chat'\n const message =\n (toolArgs?.['message'] as string | undefined) ??\n `Call tool ${toolName} with args: ${JSON.stringify(toolArgs)}`\n\n const res = await fetch(`${upstream}${chatPath}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ message, tool: toolName, args: toolArgs }),\n signal: AbortSignal.timeout(30_000),\n })\n\n const body = await res.text()\n return {\n jsonrpc: '2.0',\n id,\n result: {\n content: [{ type: 'text', text: body }],\n },\n } satisfies McpResponse\n } catch (err) {\n return mcpError(id, -32603, `Tool call failed: ${String(err)}`)\n }\n }\n\n default:\n return mcpError(id, -32601, `Method not found: ${method}`)\n }\n })\n\n // GET /mcp — returns MCP server info (for discovery)\n app.get('/mcp', async () => ({\n name: `agentspec-sidecar/${manifest.metadata.name}`,\n version: '0.1.0',\n protocol: 'mcp/2024-11-05',\n tools: tools.map((t) => ({ name: t.name, description: t.description })),\n endpoint: '/mcp',\n transport: 'http',\n }))\n}\n","import type { FastifyInstance } from 'fastify'\nimport type { AuditRing } from '../audit-ring.js'\n\nexport async function buildAuditRoutes(\n app: FastifyInstance,\n auditRing: AuditRing,\n): Promise<void> {\n // Return last N audit entries as JSON array\n app.get('/audit', async () => {\n return auditRing.getAll()\n })\n\n // SSE stream — push new entries as they arrive\n // reply.hijack() hands full control to us so Fastify won't attempt to\n // send its own response after the handler returns.\n app.get('/audit/stream', (req, reply) => {\n reply.hijack()\n\n reply.raw.writeHead(200, {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n 'X-Accel-Buffering': 'no',\n })\n // Flush headers immediately even when the ring is empty —\n // required so Node.js actually sends the HTTP response line to the client.\n reply.raw.flushHeaders()\n\n // Replay existing entries on connect\n for (const entry of auditRing.getAll()) {\n reply.raw.write(`data: ${JSON.stringify(entry)}\\n\\n`)\n }\n\n // Subscribe to future entries\n const unsubscribe = auditRing.subscribe((entry) => {\n if (!reply.raw.destroyed) {\n reply.raw.write(`data: ${JSON.stringify(entry)}\\n\\n`)\n }\n })\n\n // Clean up and close the underlying socket when the client disconnects\n req.raw.on('close', () => {\n unsubscribe()\n if (!reply.raw.destroyed) {\n reply.raw.end()\n }\n })\n })\n}\n","import type { FastifyInstance } from 'fastify'\nimport type { AuditRing } from '../audit-ring.js'\n\nexport interface ExplainStep {\n step: string\n result?: string\n tool?: string\n args?: Record<string, unknown>\n excerpt?: string\n}\n\nexport interface ExplainTrace {\n requestId: string\n timestamp: string\n method: string\n path: string\n durationMs?: number\n statusCode?: number\n steps: ExplainStep[]\n}\n\nexport async function buildExplainRoutes(\n app: FastifyInstance,\n auditRing: AuditRing,\n): Promise<void> {\n app.get<{ Params: { requestId: string } }>(\n '/explain/:requestId',\n async (req, reply) => {\n const entry = auditRing.findById(req.params.requestId)\n if (!entry) {\n reply.status(404)\n return { error: `No audit entry found for requestId: ${req.params.requestId}` }\n }\n\n // Reconstruct trace from audit entry.\n // When the Python SDK is present, it emits structured steps into the excerpt.\n // Without it, we infer basic steps from the request/response metadata.\n const steps: ExplainStep[] = []\n\n steps.push({ step: 'request_received', result: `${entry.method} ${entry.path}` })\n\n if (entry.statusCode !== undefined) {\n const isSuccess = entry.statusCode < 400\n steps.push({\n step: 'response',\n result: isSuccess ? 'success' : 'error',\n excerpt: entry.excerpt,\n })\n }\n\n const trace: ExplainTrace = {\n requestId: entry.requestId,\n timestamp: entry.timestamp,\n method: entry.method,\n path: entry.path,\n durationMs: entry.durationMs,\n statusCode: entry.statusCode,\n steps,\n }\n\n return trace\n },\n )\n}\n","import type { FastifyInstance } from 'fastify'\nimport type { AgentSpecManifest } from '@agentspec/sdk'\nimport { config } from '../config.js'\nimport { probeAgent } from './agent-probe.js'\n\nconst SIDECAR_VERSION = '0.1.0'\n\nexport async function buildExploreRoutes(\n app: FastifyInstance,\n manifest: AgentSpecManifest,\n opts: { startedAt?: number } = {},\n): Promise<void> {\n const startedAt = opts.startedAt ?? Date.now()\n\n app.get('/explore', async () => {\n // Attempt live probe — graceful degradation if agent SDK not integrated\n const probe = await probeAgent(config.upstreamUrl)\n\n // ── Tools ──────────────────────────────────────────────────────────────────\n const tools = (manifest.spec.tools ?? []).map((t) => {\n const liveCheck = probe.report?.checks.find((c) => c.id === `tool:${t.name}`)\n return {\n name: t.name,\n type: t.type,\n readOnly: t.annotations?.readOnlyHint ?? false,\n destructive: t.annotations?.destructiveHint ?? false,\n status: liveCheck?.status ?? (probe.sdkAvailable ? 'unknown' : 'unknown'),\n }\n })\n\n // ── Dependencies ────────────────────────────────────────────────────────────\n const services = manifest.spec.requires?.services ?? []\n const dependencies: Array<{\n type: string\n connection: string\n status: string\n latencyMs?: number\n }> = services.map((svc) => {\n if (probe.sdkAvailable) {\n // Use live connectivity data from the agent\n const check = probe.report!.checks.find((c) => c.id === `service:${svc.type}`)\n return {\n type: svc.type,\n connection: svc.connection,\n status: check?.status ?? 'unknown',\n latencyMs: check?.latencyMs,\n }\n }\n // Static fallback — connection ref not resolved, status unknown\n return {\n type: svc.type,\n connection: svc.connection,\n status: 'unknown',\n }\n })\n\n // ── Model ──────────────────────────────────────────────────────────────────\n const modelCheck = probe.report?.checks.find((c) => c.category === 'model')\n const model = {\n provider: manifest.spec.model.provider,\n id: manifest.spec.model.id,\n configStatus: modelCheck?.status ?? 'unknown',\n ...(modelCheck?.message && { message: modelCheck.message }),\n }\n\n // ── Sub-agents ─────────────────────────────────────────────────────────────\n const subagents = (manifest.spec.subagents ?? []).map((s) => ({\n name: s.name,\n ref: s.ref,\n invocation: s.invocation,\n reachable: null as boolean | null,\n }))\n\n return {\n agent: {\n name: manifest.metadata.name,\n version: manifest.metadata.version,\n },\n source: probe.sdkAvailable ? 'agent-sdk' : 'manifest-static',\n model,\n tools,\n subagents,\n dependencies,\n sidecar: {\n version: SIDECAR_VERSION,\n uptime: Math.floor((Date.now() - startedAt) / 1000),\n },\n }\n })\n}\n","import { createReadStream } from 'node:fs'\nimport { createInterface } from 'node:readline'\nimport type { FastifyInstance } from 'fastify'\nimport type { AgentSpecManifest } from '@agentspec/sdk'\nimport { config } from '../config.js'\n\ninterface EvalCase {\n input: string\n expected_output?: string\n tags?: string[]\n [key: string]: unknown\n}\n\ninterface EvalResult {\n caseIndex: number\n input: string\n tags: string[]\n passed: boolean\n reason?: string\n responseExcerpt?: string\n}\n\ninterface EvalRunRequest {\n dataset: string\n live?: boolean\n}\n\nasync function readJsonl(filePath: string): Promise<EvalCase[]> {\n return new Promise((resolve, reject) => {\n const cases: EvalCase[] = []\n const rl = createInterface({\n input: createReadStream(filePath),\n crlfDelay: Infinity,\n })\n rl.on('line', (line) => {\n const trimmed = line.trim()\n if (trimmed) {\n try {\n cases.push(JSON.parse(trimmed) as EvalCase)\n } catch {\n // skip malformed lines\n }\n }\n })\n rl.on('close', () => resolve(cases))\n rl.on('error', reject)\n })\n}\n\nexport async function buildEvalRoutes(\n app: FastifyInstance,\n manifest: AgentSpecManifest,\n): Promise<void> {\n app.post<{ Body: EvalRunRequest }>('/eval/run', async (req, reply) => {\n const { dataset, live = false } = req.body ?? {}\n\n if (!dataset) {\n reply.status(400)\n return { error: 'dataset name is required' }\n }\n\n const datasetConfig = manifest.spec.evaluation?.datasets?.find(\n (d) => d.name === dataset,\n )\n\n if (!datasetConfig) {\n reply.status(404)\n return {\n error: `Dataset \"${dataset}\" not found in spec.evaluation.datasets`,\n }\n }\n\n let cases: EvalCase[]\n try {\n cases = await readJsonl(datasetConfig.path)\n } catch (err) {\n reply.status(500)\n return {\n error: `Failed to read dataset file: ${datasetConfig.path}`,\n detail: String(err),\n }\n }\n\n const results: EvalResult[] = []\n\n for (let i = 0; i < cases.length; i++) {\n const evalCase = cases[i]!\n const tags: string[] = Array.isArray(evalCase.tags) ? evalCase.tags : []\n\n if (!live) {\n // Dry-run: report all cases as skipped\n results.push({\n caseIndex: i,\n input: evalCase.input,\n tags,\n passed: true,\n reason: 'dry-run (live: false)',\n })\n continue\n }\n\n // Live mode: POST to upstream chat endpoint\n try {\n const upstream = config.upstreamUrl\n const chatPath = manifest.spec.api?.chatEndpoint?.path ?? '/v1/chat'\n const res = await fetch(`${upstream}${chatPath}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ message: evalCase.input }),\n signal: AbortSignal.timeout(30_000),\n })\n\n const body = await res.text()\n const isGuardrailCase = tags.some((t) => t.startsWith('guardrail:'))\n\n let passed: boolean\n let reason: string | undefined\n\n if (isGuardrailCase) {\n passed =\n res.status === 400 ||\n res.status === 422 ||\n body.includes('GUARDRAIL_REJECTED') ||\n body.toLowerCase().includes('reject')\n reason = passed ? undefined : 'Expected guardrail rejection, got pass'\n } else {\n passed = res.status < 400\n reason = passed ? undefined : `Upstream returned ${res.status}`\n }\n\n results.push({\n caseIndex: i,\n input: evalCase.input,\n tags,\n passed,\n reason,\n responseExcerpt: body.slice(0, 200),\n })\n } catch (err) {\n results.push({\n caseIndex: i,\n input: evalCase.input,\n tags,\n passed: false,\n reason: `Request failed: ${String(err)}`,\n })\n }\n }\n\n const passed = results.filter((r) => r.passed).length\n const failed = results.filter((r) => !r.passed).length\n\n return {\n total: cases.length,\n passed,\n failed,\n dataset,\n live,\n cases: results,\n }\n })\n}\n","/**\n * OPA (Open Policy Agent) client for the agentspec sidecar.\n *\n * This module implements Layer 2 of the OPA integration:\n * 1. buildOPAInput — assembles the OPA `input` document from manifest + probe data\n * 2. queryOPA — POSTs the input to OPA and returns allow/deny decision\n *\n * OPA is expected to run as a sidecar container at OPA_URL (default: http://localhost:8181).\n * If OPA is unavailable the sidecar falls back gracefully — no violations, allow=true.\n * This ensures OPA is additive; removing or restarting OPA never breaks the gap endpoint.\n *\n * OPA query endpoint:\n * POST /v1/data/agentspec/agent/<agent_name>/deny\n * Body: { input: OPAInput }\n * Response: { result: string[] } — the set of deny rule IDs that fired\n *\n * Deny rule IDs correspond to rules generated by `agentspec generate-policy`:\n * \"pii_detector_not_invoked\", \"toxicity_threshold_exceeded\", ...\n */\n\nimport type { AgentSpecManifest, HealthReport } from '@agentspec/sdk'\nimport type { AgentProbeResult } from './agent-probe.js'\n\n// ── Public types ───────────────────────────────────────────────────────────────\n\n/**\n * The OPA input document sent with each query.\n *\n * In a full implementation, the framework sub-SDK (sdk-langgraph, sdk-crewai, …)\n * would populate fields like `guardrails_invoked`, `toxicity_score`, and\n * `tools_called` from live runtime events. For the sidecar's gap analysis,\n * we populate what we can from the manifest + probe, and leave runtime-only\n * fields at their zero values.\n */\nexport interface OPAInput {\n /** Agent name from metadata.name */\n agent_name: string\n /** Always \"llm_call\" for gap analysis queries */\n request_type: 'llm_call' | 'tool_call' | 'memory_write'\n /** Model identifier as \"provider/id\" */\n model_id: string\n /** Guardrail types declared in agent.yaml */\n guardrails_declared: string[]\n /**\n * Guardrail types actually invoked on this request.\n * Set by the framework sub-SDK from runtime events.\n * For sidecar gap analysis: empty (worst-case assumption).\n */\n guardrails_invoked: string[]\n /** Tool names registered in the agent (from probe or /capabilities) */\n tools_registered: string[]\n /** Whether the agent has integrated @agentspec/sdk (AgentSpecReporter) */\n sdk_available: boolean\n /** Whether the agent exposes GET /health */\n has_health_endpoint: boolean\n /** Whether the agent exposes GET /capabilities */\n has_capabilities_endpoint: boolean\n /** Whether all probe checks are passing */\n all_checks_passing: boolean\n\n // ── Runtime fields (populated by framework sub-SDKs, not sidecar) ──────────\n /** Tool names called in this request (populated by sdk-langgraph, etc.) */\n tools_called?: string[]\n /** Whether the user explicitly confirmed before destructive tool execution */\n user_confirmed?: boolean\n /** Toxicity score of model output (0.0–1.0) */\n toxicity_score?: number\n /** Hallucination score of model output (0.0–1.0) */\n hallucination_score?: number\n /** Memory write event — TTL and PII scrub status */\n memory_write?: { ttl_seconds: number; pii_scrubbed: boolean }\n /** Cumulative cost in USD for today */\n cost_today_usd?: number\n /** Cumulative token count for today */\n tokens_today?: number\n}\n\nexport interface OPAResult {\n /** true if no deny rules fired (or OPA unavailable) */\n allow: boolean\n /** Deny rule IDs that fired (empty when allow=true or OPA unavailable) */\n violations: string[]\n /**\n * true when OPA was not reachable.\n * Callers can use this to add an informational gap note.\n */\n opaUnavailable?: boolean\n}\n\n// ── Input builder ──────────────────────────────────────────────────────────────\n\n/**\n * Parse a comma-separated header value into an array of trimmed strings.\n * Handles both string and string[] header shapes from Fastify.\n *\n * \"pii-detector, toxicity-filter\" → [\"pii-detector\", \"toxicity-filter\"]\n * undefined → []\n */\nexport function parseCommaSeparatedHeader(\n value: string | string[] | undefined,\n): string[] {\n if (!value) return []\n // HTTP allows multiple header instances; join all values before splitting on commas\n const raw = Array.isArray(value) ? value.join(',') : value\n if (!raw.trim()) return []\n return raw\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n}\n\n/**\n * Build an OPAInput from real behavioral data reported by the agent.\n *\n * This is used by two reporting paths:\n * - HeaderReporting: sidecar reads X-AgentSpec-* response headers set by the agent\n * - EventPush: POST /agentspec/events pushes behavioral data out-of-band\n *\n * Unlike the old honor-system approach (reading client REQUEST headers),\n * this data comes from the agent's execution path via the sdk-langgraph sub-SDK.\n */\nexport function buildBehavioralOPAInput(\n manifest: AgentSpecManifest,\n guardrailsInvoked: string[],\n toolsCalled: string[],\n userConfirmed?: boolean,\n): OPAInput {\n const spec = manifest.spec\n\n const input: OPAInput = {\n agent_name: manifest.metadata.name,\n request_type: 'llm_call',\n model_id: `${spec.model.provider}/${spec.model.id}`,\n guardrails_declared: (spec.guardrails?.input ?? []).map((g) => g.type),\n guardrails_invoked: guardrailsInvoked,\n tools_registered: (spec.tools ?? []).map((t) => t.name),\n sdk_available: false,\n has_health_endpoint: false,\n has_capabilities_endpoint: false,\n all_checks_passing: false,\n }\n\n if (toolsCalled.length > 0) input.tools_called = toolsCalled\n if (userConfirmed) input.user_confirmed = true\n\n return input\n}\n\n/**\n * Assemble an OPAInput from the manifest, probe result, and observed endpoints.\n *\n * This is a pure function — no I/O. The sidecar calls this before querying OPA.\n */\nexport function buildOPAInput(\n manifest: AgentSpecManifest,\n probe: AgentProbeResult,\n observed: { hasHealth: boolean; hasCapabilities: boolean; tools: string[] },\n): OPAInput {\n const spec = manifest.spec\n\n // Declared input guardrail types\n const guardrailsDeclared = (spec.guardrails?.input ?? []).map((g) => g.type)\n\n // Registered tools: from probe checks (tool:*) when SDK available, else from /capabilities\n let toolsRegistered: string[]\n if (probe.sdkAvailable && probe.report) {\n toolsRegistered = probe.report.checks\n .filter((c) => c.category === 'tool')\n .map((c) => c.id.replace(/^tool:/, ''))\n } else {\n toolsRegistered = observed.tools\n }\n\n // Check whether all probe checks are passing\n let allChecksPassing = false\n if (probe.sdkAvailable && probe.report) {\n allChecksPassing = probe.report.checks.every((c) => c.status === 'pass')\n }\n\n return {\n agent_name: manifest.metadata.name,\n request_type: 'llm_call',\n model_id: `${spec.model.provider}/${spec.model.id}`,\n guardrails_declared: guardrailsDeclared,\n guardrails_invoked: [], // Runtime-only — populated by framework sub-SDK\n tools_registered: toolsRegistered,\n sdk_available: probe.sdkAvailable,\n has_health_endpoint: observed.hasHealth,\n has_capabilities_endpoint: observed.hasCapabilities,\n all_checks_passing: allChecksPassing,\n }\n}\n\n// ── OPA HTTP client ────────────────────────────────────────────────────────────\n\n/**\n * Sanitize an agent name for use in the OPA query path.\n *\n * Rego package identifiers cannot contain hyphens — they must be replaced\n * with underscores to match the package name generated by `agentspec generate-policy`.\n *\n * Throws if the resulting identifier contains path-traversal characters or\n * does not match the allowed character set (mirrors the Python SDK validation).\n *\n * Example: \"fitness-tracker\" → \"fitness_tracker\"\n * → POST /v1/data/agentspec/agent/fitness_tracker/deny\n */\nfunction sanitizeAgentName(name: string): string {\n const sanitized = name.replace(/-/g, '_')\n if (!/^[a-z][a-z0-9_]{0,63}$/.test(sanitized)) {\n throw new Error(\n `Invalid agent name for OPA query: \"${name}\". ` +\n 'Must start with a lowercase letter, contain only lowercase alphanumeric ' +\n 'characters, hyphens, or underscores, and be at most 64 characters.',\n )\n }\n return sanitized\n}\n\n/**\n * Query the OPA deny rule set for this agent.\n *\n * Returns allow=true (no violations) if OPA is unreachable — fail-open\n * for the gap endpoint (OPA is additive, never blocking).\n *\n * @param opaBaseUrl e.g. \"http://localhost:8181\"\n * @param agentName e.g. \"gymcoach\" or \"fitness-tracker\"\n * @param input The OPAInput document to evaluate\n */\nexport async function queryOPA(\n opaBaseUrl: string,\n agentName: string,\n input: OPAInput,\n): Promise<OPAResult> {\n const sanitized = sanitizeAgentName(agentName)\n const url = `${opaBaseUrl}/v1/data/agentspec/agent/${sanitized}/deny`\n\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ input }),\n signal: AbortSignal.timeout(3_000), // OPA must respond within 3 s\n })\n\n if (!res.ok) {\n return { allow: true, violations: [], opaUnavailable: true }\n }\n\n const body = (await res.json()) as { result?: unknown }\n const result = body.result\n\n // OPA returns the deny set as an array of strings.\n // If the policy hasn't been loaded yet, result is null/undefined.\n if (!Array.isArray(result) || result.length === 0) {\n return { allow: true, violations: [] }\n }\n\n // Filter to string violations only (defensive — should always be strings)\n const violations = result.filter((v): v is string => typeof v === 'string')\n return {\n allow: violations.length === 0,\n violations,\n }\n } catch {\n // ECONNREFUSED, timeout, parse error — OPA not available, fail-open\n return { allow: true, violations: [], opaUnavailable: true }\n }\n}\n\n// ── Gap issue converter ────────────────────────────────────────────────────────\n\n/**\n * Convert OPA violation IDs to GapIssue objects compatible with the gap report.\n *\n * Violation IDs are Rego rule names like \"pii_detector_not_invoked\".\n * We convert underscores back to readable text for the issue description.\n */\nexport function opaViolationsToGapIssues(\n violations: string[],\n): Array<{\n severity: 'critical' | 'high' | 'medium' | 'low'\n property: string\n description: string\n recommendation: string\n evidenceLevel: 'behavioral'\n}> {\n return violations.map((id) => {\n const description = id.replace(/_/g, ' ').replace(/\\b\\w/g, (c) => c.toUpperCase())\n return {\n severity: severityForViolation(id),\n property: `opa:${id}`,\n description: `OPA policy violation: ${description}`,\n recommendation: opaRemediation(id),\n evidenceLevel: 'behavioral' as const,\n }\n })\n}\n\nfunction severityForViolation(\n id: string,\n): 'critical' | 'high' | 'medium' | 'low' {\n if (id.includes('cost') || id.includes('destructive')) return 'critical'\n if (id.includes('pii') || id.includes('injection') || id.includes('ttl')) return 'high'\n if (id.includes('toxicity') || id.includes('hallucination')) return 'medium'\n return 'low'\n}\n\nfunction opaRemediation(id: string): string {\n const remediations: Record<string, string> = {\n pii_detector_not_invoked:\n 'Ensure the pii-detector guardrail is invoked before every LLM call. Use @agentspec/sdk-langgraph AgentSpecToolNode to auto-invoke guardrails.',\n topic_filter_not_invoked:\n 'Ensure the topic-filter guardrail runs on every input. Register it in your guardrail middleware.',\n prompt_injection_not_invoked:\n 'Invoke the prompt-injection guardrail on every user message before forwarding to the LLM.',\n toxicity_threshold_exceeded:\n 'The model output exceeded the declared toxicity threshold. Add output filtering or reduce the threshold.',\n hallucination_threshold_exceeded:\n 'The model output exceeded the hallucination threshold. Enable retrieval-augmented generation or increase context.',\n monthly_cost_limit_exceeded:\n 'Token spend is on track to exceed the declared maxMonthlyUSD limit. Add token budgeting to your agent.',\n memory_ttl_mismatch:\n 'Memory writes are not using the declared TTL. Ensure RedisSaver is configured with the correct TTL from the manifest.',\n destructive_tool_without_confirmation:\n 'A destructive tool was called without user confirmation. Add a human-in-the-loop approval step before destructive operations.',\n }\n return remediations[id] ?? `Review and remediate OPA policy violation: ${id}`\n}\n","import type { FastifyInstance } from 'fastify'\nimport type { AgentSpecManifest, HealthCheck, Severity } from '@agentspec/sdk'\nimport { config } from '../config.js'\nimport type { AuditRing, AuditEntry } from '../audit-ring.js'\nimport { probeAgent, type AgentProbeResult } from './agent-probe.js'\nimport { buildOPAInput, queryOPA, opaViolationsToGapIssues } from './opa-client.js'\n\nexport interface GapIssue {\n severity: Severity\n property: string\n description: string\n recommendation: string\n /** What kind of evidence supports this issue verdict */\n evidenceLevel: 'declarative' | 'probed' | 'behavioral'\n}\n\nexport interface GapReport {\n score: number\n issues: GapIssue[]\n source: 'agent-sdk' | 'manifest-static'\n modelId: string\n observed: {\n hasHealthEndpoint: boolean\n hasCapabilitiesEndpoint: boolean\n upstreamTools: string[]\n }\n /** Behavioral compliance summary — only present when HeaderReporting or EventPush data is available. */\n behavioral?: {\n sampleSize: number\n compliantRequests: number\n }\n}\n\nasync function probeUpstream(\n upstream: string,\n): Promise<{ hasHealth: boolean; hasCapabilities: boolean; tools: string[] }> {\n const result = { hasHealth: false, hasCapabilities: false, tools: [] as string[] }\n\n try {\n const healthRes = await fetch(`${upstream}/health`, {\n signal: AbortSignal.timeout(5000),\n })\n result.hasHealth = healthRes.ok\n } catch {\n // intentionally silent: upstream /health not reachable\n }\n\n try {\n const capRes = await fetch(`${upstream}/capabilities`, {\n signal: AbortSignal.timeout(5000),\n })\n if (capRes.ok) {\n result.hasCapabilities = true\n const body = (await capRes.json()) as { tools?: Array<{ name: string }> }\n result.tools = (body.tools ?? []).map((t) => t.name)\n }\n } catch {\n // intentionally silent: upstream /capabilities not reachable\n }\n\n return result\n}\n\n/** Extracts the env var name from a $env:VAR_NAME reference, or null. */\nfunction extractEnvVarName(ref: string): string | null {\n const match = ref.match(/^\\$env:(.+)$/)\n return match ? (match[1] ?? null) : null\n}\n\n/** Merge source issues into target, deduplicating by property. */\nfunction mergeIssues(target: GapIssue[], source: GapIssue[]): void {\n const existingProperties = new Set(target.map((i) => i.property))\n for (const issue of source) {\n if (!existingProperties.has(issue.property)) {\n target.push(issue)\n }\n }\n}\n\n/**\n * Filter probe checks by category + 'fail' status and push a GapIssue for each.\n *\n * @param checks - Full check list from the probe report\n * @param category - Category to filter on (e.g. 'env', 'service')\n * @param severity - Severity to assign to each pushed issue\n * @param descriptionPrefix - Default description prefix when check.message is absent\n * @param recommendationDefault - Default recommendation when check.remediation is absent\n * @param issues - Target array to push issues into\n * @param cap - String cap helper from the parent function\n */\nfunction pushFailedProbeChecks(\n checks: HealthCheck[],\n category: string,\n severity: GapIssue['severity'],\n descriptionPrefix: string,\n recommendationDefault: string,\n issues: GapIssue[],\n cap: (s: string | undefined, fallback: string) => string,\n): void {\n const failed = checks.filter((c) => c.category === category && c.status === 'fail')\n for (const check of failed) {\n issues.push({\n severity,\n property: check.id.slice(0, 100),\n description: cap(check.message, `${descriptionPrefix}: ${check.id}`),\n recommendation: cap(check.remediation, recommendationDefault),\n evidenceLevel: 'probed',\n })\n }\n}\n\n/** Build gap issues from live SDK probe data (agent has @agentspec/sdk integrated). */\nfunction buildLiveSdkIssues(\n manifest: AgentSpecManifest,\n probe: AgentProbeResult,\n): GapIssue[] {\n const issues: GapIssue[] = []\n const specTools = (manifest.spec.tools ?? []).map((t) => t.name)\n const report = probe.report!\n\n // Helper: cap strings from untrusted probe data before they enter the LLM prompt\n const cap = (s: string | undefined, fallback: string): string =>\n (s ?? fallback).slice(0, 500)\n\n // Model API key — live check from probe\n const modelCheck = report.checks.find((c) => c.category === 'model')\n if (modelCheck?.status === 'fail') {\n issues.push({\n severity: 'critical',\n property: 'model.apiKey',\n description: cap(modelCheck.message, 'Model endpoint unreachable'),\n recommendation: cap(\n modelCheck.remediation,\n 'Check model API key configuration and provider reachability',\n ),\n evidenceLevel: 'probed',\n })\n } else if (modelCheck?.status === 'skip') {\n issues.push({\n severity: 'high',\n property: 'model.apiKey',\n description: cap(\n modelCheck.message,\n 'Model endpoint check was skipped — API key may not be resolved',\n ),\n recommendation: cap(\n modelCheck.remediation,\n 'Ensure the model API key environment variable is set and AgentSpecReporter is initialised with the correct manifest',\n ),\n evidenceLevel: 'probed',\n })\n }\n\n // Env vars — any failing env checks from probe\n pushFailedProbeChecks(\n report.checks, 'env', 'high',\n 'Environment variable check failed',\n 'Set the required environment variable',\n issues, cap,\n )\n\n // Services — any failing service checks from probe\n pushFailedProbeChecks(\n report.checks, 'service', 'high',\n 'Service connectivity check failed',\n 'Check the service connection string and ensure the service is reachable',\n issues, cap,\n )\n\n // Tools — declared in manifest but failing in probe\n const failingTools = specTools.filter((name) =>\n report.checks.some((c) => c.id === `tool:${name}` && c.status === 'fail'),\n )\n for (const tool of failingTools) {\n issues.push({\n severity: 'medium',\n property: `tool:${tool}`,\n description: `Tool \"${tool}\" declared in spec but its handler is not registered in the agent`,\n recommendation: `Ensure tool \"${tool}\" is registered and its handler is available at runtime`,\n evidenceLevel: 'probed',\n })\n }\n\n // ── Spec-vs-probe reconciliation ──────────────────────────────────────────\n const probeCheckIds = new Set(report.checks.map((c) => c.id))\n\n // Model API key env var\n const apiKeyEnvVar = extractEnvVarName(manifest.spec.model.apiKey)\n if (apiKeyEnvVar && !probeCheckIds.has(`env:${apiKeyEnvVar}`)) {\n issues.push({\n severity: 'high',\n property: `env:${apiKeyEnvVar}`,\n description: `Spec declares model.apiKey as $env:${apiKeyEnvVar} but the SDK did not report this check`,\n recommendation: `Ensure AgentSpecReporter is initialised with the correct manifest so it checks env:${apiKeyEnvVar}`,\n evidenceLevel: 'probed',\n })\n }\n\n // Declared services\n for (const svc of manifest.spec.requires?.services ?? []) {\n if (!probeCheckIds.has(`service:${svc.type}`)) {\n issues.push({\n severity: 'high',\n property: `service:${svc.type}`,\n description: `Service \"${svc.type}\" is declared in spec but the SDK did not report a connectivity check`,\n recommendation: `Ensure AgentSpecReporter is initialised with the correct manifest so it checks service:${svc.type}`,\n evidenceLevel: 'probed',\n })\n }\n }\n\n // Declared tools — absent from probe entirely (failing tools are handled above)\n for (const toolName of specTools) {\n if (!probeCheckIds.has(`tool:${toolName}`)) {\n issues.push({\n severity: 'medium',\n property: `tool:${toolName}`,\n description: `Tool \"${toolName}\" is declared in spec but the SDK did not report a registration check for it`,\n recommendation: `Ensure AgentSpecReporter is initialised with the correct manifest and all declared tools are registered`,\n evidenceLevel: 'probed',\n })\n }\n }\n\n return issues\n}\n\n/** Build gap issues from static manifest analysis (no SDK integration). */\nfunction buildStaticFallbackIssues(\n manifest: AgentSpecManifest,\n observed: { hasHealth: boolean; hasCapabilities: boolean; tools: string[] },\n): GapIssue[] {\n const issues: GapIssue[] = []\n const specTools = (manifest.spec.tools ?? []).map((t) => t.name)\n\n const missingTools = specTools.filter(\n (t) => observed.tools.length > 0 && !observed.tools.includes(t),\n )\n for (const tool of missingTools) {\n issues.push({\n severity: 'medium',\n property: 'discoverable',\n description: `Tool \"${tool}\" declared in spec but not found in /capabilities`,\n recommendation: `Ensure tool \"${tool}\" is registered and returned by your /capabilities endpoint`,\n evidenceLevel: 'declarative',\n })\n }\n\n return issues\n}\n\nfunction buildGapMatrix(\n manifest: AgentSpecManifest,\n observed: { hasHealth: boolean; hasCapabilities: boolean; tools: string[] },\n probe: AgentProbeResult,\n): GapIssue[] {\n const issues: GapIssue[] = []\n\n if (!observed.hasHealth) {\n issues.push({\n severity: 'high',\n property: 'healthcheckable',\n description: 'Agent does not expose a /health endpoint',\n recommendation:\n 'Add GET /health to your agent server; use agentspec-sidecar to provide it automatically',\n evidenceLevel: 'probed',\n })\n }\n\n if (!observed.hasCapabilities) {\n issues.push({\n severity: 'medium',\n property: 'discoverable',\n description: 'Agent does not expose /capabilities or /.well-known/agent.json',\n recommendation:\n 'The agentspec-sidecar /capabilities endpoint serves this automatically from agent.yaml',\n evidenceLevel: 'probed',\n })\n }\n\n if (probe.sdkAvailable && probe.report) {\n issues.push(...buildLiveSdkIssues(manifest, probe))\n } else {\n issues.push(...buildStaticFallbackIssues(manifest, observed))\n }\n\n if (manifest.spec.evaluation?.datasets?.length) {\n issues.push({\n severity: 'low',\n property: 'evaluated',\n description: 'Evaluation datasets declared but not yet run against live agent',\n recommendation: 'Run POST /eval/run with your dataset name to validate live agent behaviour',\n evidenceLevel: 'declarative',\n })\n }\n\n if (!manifest.spec.guardrails) {\n issues.push({\n severity: 'medium',\n property: 'auditable',\n description: 'No guardrails declared in spec',\n recommendation:\n 'Add spec.guardrails with input/output rules to enable PII scrubbing and content filtering',\n evidenceLevel: 'declarative',\n })\n }\n\n return issues\n}\n\nasync function callLlmForGapAnalysis(\n manifest: AgentSpecManifest,\n issues: GapIssue[],\n): Promise<GapIssue[]> {\n const apiKey = config.anthropicApiKey\n if (!apiKey) {\n return issues // Return issues as-is without LLM enrichment\n }\n\n try {\n // Dynamic import to avoid hard dep on Anthropic SDK in environments without it\n const { default: Anthropic } = await import('@anthropic-ai/sdk')\n const anthropic = new Anthropic({ apiKey })\n\n const prompt = `You are an AgentSpec compliance auditor. Given the agent manifest and the gap analysis matrix,\nprovide a concise assessment. Return ONLY a JSON array of issues with fields: severity, property, description, recommendation.\nKeep recommendations actionable and specific.\n\nManifest name: ${manifest.metadata.name}\nTools: ${(manifest.spec.tools ?? []).map((t) => t.name).join(', ')}\nHas guardrails: ${!!manifest.spec.guardrails}\nHas evaluation: ${!!manifest.spec.evaluation}\n\nDetected issues:\n${JSON.stringify(issues, null, 2)}\n\nReturn the enriched issues array as JSON only, no prose.`\n\n const message = await anthropic.messages.create({\n model: 'claude-haiku-4-5-20251001',\n max_tokens: 1024,\n messages: [{ role: 'user', content: prompt }],\n })\n\n const text =\n message.content[0]?.type === 'text' ? message.content[0].text : ''\n const jsonMatch = text.match(/\\[[\\s\\S]*\\]/)\n if (jsonMatch) {\n const parsed = JSON.parse(jsonMatch[0]) as unknown[]\n // Sanitize LLM output — validate shape before trusting it.\n // Build a lookup map from the original issues to preserve evidenceLevel\n // (LLM output is not trusted for this field).\n const originalByProperty = new Map(issues.map((i) => [i.property, i.evidenceLevel]))\n const VALID_SEVERITIES = new Set(['critical', 'high', 'medium', 'low'])\n const VALID_EVIDENCE = new Set(['declarative', 'probed', 'behavioral'])\n const sanitized: GapIssue[] = parsed\n .filter(\n (item): item is Record<string, unknown> =>\n typeof item === 'object' && item !== null && !Array.isArray(item),\n )\n .map((item) => {\n const property = String(item['property'] ?? '').slice(0, 100)\n // Prefer original evidenceLevel; fall back to LLM value if valid, else 'declarative'\n const llmLevel = String(item['evidenceLevel'] ?? '')\n const evidenceLevel: GapIssue['evidenceLevel'] =\n originalByProperty.get(property) ??\n (VALID_EVIDENCE.has(llmLevel) ? (llmLevel as GapIssue['evidenceLevel']) : 'declarative')\n return {\n severity: VALID_SEVERITIES.has(String(item['severity'] ?? ''))\n ? (String(item['severity']) as GapIssue['severity'])\n : 'low',\n property,\n description: String(item['description'] ?? '').slice(0, 500),\n recommendation: String(item['recommendation'] ?? '').slice(0, 500),\n evidenceLevel,\n }\n })\n return sanitized\n }\n } catch {\n // LLM enrichment failed — returning raw issues as-is\n }\n\n return issues\n}\n\n/** Compute guardrail invocation rate gap issues from behavioral audit entries. */\nfunction computeGuardrailGapIssues(\n behavioralEntries: AuditEntry[],\n manifest: AgentSpecManifest,\n sampleSize: number,\n): GapIssue[] {\n const issues: GapIssue[] = []\n const declaredInputGuardrails = (manifest.spec.guardrails?.input ?? []).map((g) => g.type)\n\n for (const guardrailType of declaredInputGuardrails) {\n const invokedCount = behavioralEntries.filter(\n (e) => e.guardrailsInvoked?.includes(guardrailType),\n ).length\n const rate = invokedCount / sampleSize\n\n if (rate < 1.0) {\n let severity: GapIssue['severity']\n if (rate < 0.5) {\n severity = 'high'\n } else if (rate < 0.8) {\n severity = 'medium'\n } else {\n severity = 'low'\n }\n\n const pct = Math.round(rate * 100)\n issues.push({\n severity,\n property: `behavioral:guardrail:${guardrailType}`,\n description: `Guardrail \"${guardrailType}\" was only invoked on ${pct}% of observed requests (${invokedCount}/${sampleSize})`,\n recommendation: `Ensure \"${guardrailType}\" is wired via GuardrailMiddleware and called on every request. Use the agentspec-langgraph SidecarClient to report behavioral events.`,\n evidenceLevel: 'behavioral',\n })\n }\n }\n\n return issues\n}\n\n/** Compute tool usage gap issues (declared but never called) from behavioral audit entries. */\nfunction computeToolGapIssues(\n behavioralEntries: AuditEntry[],\n manifest: AgentSpecManifest,\n sampleSize: number,\n): GapIssue[] {\n const issues: GapIssue[] = []\n const declaredTools = (manifest.spec.tools ?? []).map((t) => t.name)\n\n for (const toolName of declaredTools) {\n const calledCount = behavioralEntries.filter(\n (e) => e.toolsCalled?.includes(toolName),\n ).length\n if (calledCount === 0) {\n issues.push({\n severity: 'low',\n property: `behavioral:tool:${toolName}`,\n description: `Tool \"${toolName}\" is declared in spec but was never called in ${sampleSize} observed requests`,\n recommendation: `If the tool is intended to be used, verify it is wired to the agent's tool node. If it is optional, this issue can be ignored.`,\n evidenceLevel: 'behavioral',\n })\n }\n }\n\n return issues\n}\n\n/**\n * Compute gap issues from real behavioral observations in the audit ring.\n *\n * Only considers entries that have behavioral data (guardrailsInvoked !== undefined),\n * i.e., entries enriched by HeaderReporting (agent response headers) or EventPush.\n *\n * If no entries have behavioral data, returns empty issues silently.\n */\nexport function computeBehavioralGap(\n auditRing: AuditRing,\n manifest: AgentSpecManifest,\n lookback = 100,\n): { issues: GapIssue[]; behavioralScore: number; sampleSize: number; compliantRequests: number } {\n const allEntries = auditRing.getAll()\n // Take the most recent `lookback` entries that have behavioral data\n const behavioralEntries = allEntries\n .slice(-lookback)\n .filter((e) => e.guardrailsInvoked !== undefined || e.toolsCalled !== undefined)\n\n const sampleSize = behavioralEntries.length\n const compliantRequests = behavioralEntries.filter(\n (e) => e.behavioralCompliant === true,\n ).length\n\n if (sampleSize === 0) {\n return { issues: [], behavioralScore: 100, sampleSize: 0, compliantRequests: 0 }\n }\n\n const issues: GapIssue[] = [\n ...computeGuardrailGapIssues(behavioralEntries, manifest, sampleSize),\n ...computeToolGapIssues(behavioralEntries, manifest, sampleSize),\n ]\n\n // ── OPA violations from audit ring ──────────────────────────────────────────\n const opaViolatingEntries = behavioralEntries.filter(\n (e) => e.behavioralCompliant === false && (e.opaViolations?.length ?? 0) > 0,\n )\n if (opaViolatingEntries.length > 0) {\n const allViolations = new Set<string>()\n for (const e of opaViolatingEntries) {\n for (const v of e.opaViolations ?? []) {\n allViolations.add(v)\n }\n }\n issues.push(...opaViolationsToGapIssues([...allViolations]))\n }\n\n // Behavioral score: penalise by non-compliant rate\n const nonCompliantWithOPA = opaViolatingEntries.length\n const behavioralScore = Math.max(\n 0,\n 100 - Math.round((nonCompliantWithOPA / sampleSize) * 100),\n )\n\n return { issues, behavioralScore, sampleSize, compliantRequests }\n}\n\nexport async function buildGapRoutes(\n app: FastifyInstance,\n manifest: AgentSpecManifest,\n auditRing: AuditRing,\n): Promise<void> {\n app.get('/gap', async () => {\n const upstream = config.upstreamUrl\n\n // Probe the agent SDK endpoint and the legacy upstream endpoints in parallel\n const [probe, observed] = await Promise.all([\n probeAgent(upstream),\n probeUpstream(upstream),\n ])\n\n const rawIssues = buildGapMatrix(manifest, observed, probe)\n\n // ── OPA integration (additive, fail-open) ──────────────────────────────────\n // When OPA is running as a sidecar (OPA_URL is set), query it for policy\n // violations derived from the manifest declarations. OPA violations are\n // merged into the gap issues list with higher precision than static analysis.\n if (config.opaUrl) {\n try {\n const opaInput = buildOPAInput(manifest, probe, observed)\n const opaResult = await queryOPA(config.opaUrl, manifest.metadata.name, opaInput)\n\n if (!opaResult.opaUnavailable && opaResult.violations.length > 0) {\n mergeIssues(rawIssues, opaViolationsToGapIssues(opaResult.violations))\n }\n } catch {\n // OPA integration is additive — any error here is non-fatal\n }\n }\n\n // ── Behavioral gap analysis from audit ring (HeaderReporting / EventPush) ─\n const behavioralResult = computeBehavioralGap(auditRing, manifest)\n if (behavioralResult.issues.length > 0) {\n mergeIssues(rawIssues, behavioralResult.issues)\n }\n\n const enrichedIssues = await callLlmForGapAnalysis(manifest, rawIssues)\n\n // Score: 100 - penalty per severity\n const SEVERITY_PENALTIES: Record<string, number> = {\n critical: 30,\n high: 20,\n medium: 10,\n low: 5,\n }\n const penalty = enrichedIssues.reduce(\n (sum, issue) => sum + (SEVERITY_PENALTIES[issue.severity] ?? 5),\n 0,\n )\n const score = Math.max(0, 100 - penalty)\n\n const modelId = `${manifest.spec.model.provider}/${manifest.spec.model.id}`\n\n const response: GapReport = {\n score,\n issues: enrichedIssues,\n source: probe.sdkAvailable ? 'agent-sdk' : 'manifest-static',\n modelId,\n observed: {\n hasHealthEndpoint: observed.hasHealth,\n hasCapabilitiesEndpoint: observed.hasCapabilities,\n upstreamTools: observed.tools,\n },\n }\n\n // Include behavioral summary only when sample data is available\n if (behavioralResult.sampleSize > 0) {\n response.behavioral = {\n sampleSize: behavioralResult.sampleSize,\n compliantRequests: behavioralResult.compliantRequests,\n }\n }\n\n return response\n })\n}\n","/**\n * POST /agentspec/events — EventPush behavioral observation endpoint.\n *\n * The sdk-langgraph SidecarClient pushes a batch of behavioral events for each\n * request after the agent has finished processing (out-of-band, fire-and-forget).\n *\n * The sidecar:\n * 1. Looks up the requestId in the audit ring (must have been injected by the proxy)\n * 2. Updates the entry with real behavioral data (guardrails, tools, model calls)\n * 3. Optionally evaluates OPA against the real data (fail-open)\n * 4. Returns violations (if any) so the agent can log them\n *\n * Returns 202 if the requestId is not yet in the ring — the agent pushed before the\n * proxy recorded (TTL race at high throughput). The agent should not retry.\n */\n\nimport type { FastifyInstance } from 'fastify'\nimport type { AgentSpecManifest } from '@agentspec/sdk'\nimport type { AuditRing } from '../audit-ring.js'\nimport { config } from '../config.js'\nimport { buildBehavioralOPAInput, queryOPA } from './opa-client.js'\n\n// ── Event type definitions ────────────────────────────────────────────────────\n\ninterface GuardrailEventPayload {\n type: 'guardrail'\n guardrailType: string\n invoked: boolean\n blocked: boolean\n score?: number | null\n action?: string | null\n}\n\ninterface ToolEventPayload {\n type: 'tool'\n name: string\n success: boolean\n latencyMs?: number\n}\n\ninterface ModelEventPayload {\n type: 'model'\n modelId: string\n tokenCount?: number\n}\n\ninterface MemoryEventPayload {\n type: 'memory'\n backend: string\n ttlSeconds?: number\n piiScrubbed?: boolean\n}\n\ntype EventPayload =\n | GuardrailEventPayload\n | ToolEventPayload\n | ModelEventPayload\n | MemoryEventPayload\n\ninterface EventBatchRequest {\n requestId: string\n agentName: string\n events: EventPayload[]\n}\n\n// ── Route builder ─────────────────────────────────────────────────────────────\n\nexport interface EventsRouteOptions {\n /** Override OPA URL for this route (defaults to config.opaUrl). Pass null to disable. */\n opaUrl?: string | null\n}\n\nexport async function buildEventsRoutes(\n app: FastifyInstance,\n manifest: AgentSpecManifest,\n auditRing: AuditRing,\n opts: EventsRouteOptions = {},\n): Promise<void> {\n const opaUrl = opts.opaUrl !== undefined ? opts.opaUrl : config.opaUrl\n\n app.post('/events', { bodyLimit: 65_536 }, async (request, reply) => {\n const body = request.body as EventBatchRequest\n\n // ── Validate required fields ───────────────────────────────────────────────\n if (!body || typeof body.requestId !== 'string' || !body.requestId) {\n return reply.code(400).send({ error: 'requestId is required' })\n }\n if (!Array.isArray(body.events)) {\n return reply.code(400).send({ error: 'events must be an array' })\n }\n if (body.events.length > 500) {\n return reply.code(400).send({ error: 'events array exceeds maximum length (500)' })\n }\n\n const requestId = body.requestId\n // Cap agentName to prevent oversized strings reaching the audit ring / OPA input\n const agentName =\n typeof body.agentName === 'string' ? body.agentName.slice(0, 64) : ''\n const events = body.events\n\n // ── Find entry in audit ring ───────────────────────────────────────────────\n const entry = auditRing.findById(requestId)\n if (!entry) {\n // Race: agent pushed before the proxy recorded the request.\n // This is expected at high throughput. Tell the agent not to retry.\n return reply.code(202).send({\n requestId,\n found: false,\n message: 'Request not yet in audit ring — TTL race, no retry needed',\n })\n }\n\n // ── Extract behavioral data from the event batch ────────────────────────────\n const guardrailsInvoked: string[] = []\n const toolsCalled: string[] = []\n const modelCalls: { modelId: string; tokenCount: number }[] = []\n\n for (const event of events) {\n if (!event || typeof event.type !== 'string') continue\n\n switch (event.type) {\n case 'guardrail': {\n const g = event as GuardrailEventPayload\n if (g.invoked && typeof g.guardrailType === 'string') {\n guardrailsInvoked.push(g.guardrailType)\n }\n break\n }\n case 'tool': {\n const t = event as ToolEventPayload\n if (typeof t.name === 'string') {\n toolsCalled.push(t.name)\n }\n break\n }\n case 'model': {\n const m = event as ModelEventPayload\n if (typeof m.modelId === 'string') {\n modelCalls.push({\n modelId: m.modelId,\n tokenCount: typeof m.tokenCount === 'number' ? m.tokenCount : 0,\n })\n }\n break\n }\n // memory events: record nothing on AuditEntry for now\n }\n }\n\n // ── Update the audit ring entry with behavioral data ────────────────────────\n const behavioralUpdate: Partial<typeof entry> = {}\n if (guardrailsInvoked.length > 0) behavioralUpdate.guardrailsInvoked = guardrailsInvoked\n if (toolsCalled.length > 0) behavioralUpdate.toolsCalled = toolsCalled\n if (modelCalls.length > 0) behavioralUpdate.modelCalls = modelCalls\n\n // ── OPA evaluation on real behavioral data (fail-open) ─────────────────────\n let opaViolations: string[] = []\n if (opaUrl) {\n try {\n const opaInput = buildBehavioralOPAInput(\n manifest,\n guardrailsInvoked,\n toolsCalled,\n )\n const opaResult = await queryOPA(opaUrl, manifest.metadata.name, opaInput)\n\n if (!opaResult.opaUnavailable) {\n opaViolations = opaResult.violations\n behavioralUpdate.behavioralCompliant = opaResult.allow\n if (opaViolations.length > 0) {\n // Merge violations into existing entry (don't overwrite proxy-level violations)\n const existing = entry.opaViolations ?? []\n const merged = [...new Set([...existing, ...opaViolations])]\n behavioralUpdate.opaViolations = merged\n }\n }\n } catch {\n // OPA errors are non-fatal — behavioral data is still recorded\n }\n }\n\n auditRing.updateById(requestId, behavioralUpdate)\n\n return reply.code(200).send({\n requestId,\n found: true,\n opaViolations,\n })\n })\n}\n","/**\n * Agent SDK usage probe.\n *\n * Attempts GET {upstreamUrl}/agentspec/usage to fetch the in-process\n * UsageLedger snapshot from agents that integrate @agentspec/sdk.\n * Returns a UsageProbeResult:\n * - sdkAvailable: true → live UsageSnapshot from the agent\n * - sdkAvailable: false → graceful fallback; callers use audit ring aggregation\n */\n\nimport type { UsageSnapshot } from '@agentspec/sdk'\n\nexport interface UsageProbeResult {\n /** true if GET /agentspec/usage returned a valid UsageSnapshot */\n sdkAvailable: boolean\n /** Live UsageSnapshot from the agent (only when sdkAvailable: true) */\n snapshot?: UsageSnapshot\n /** Wall-clock time of the probe request */\n probeLatencyMs: number\n}\n\n/**\n * Attempts GET {upstreamUrl}/agentspec/usage with a configurable timeout.\n * Returns { sdkAvailable: false } if the endpoint is absent (404), malformed,\n * times out, or is unreachable.\n */\nexport async function probeUsage(\n upstreamUrl: string,\n timeoutMs = 5_000,\n): Promise<UsageProbeResult> {\n const url = `${upstreamUrl}/agentspec/usage`\n const start = Date.now()\n\n try {\n const res = await fetch(url, {\n signal: AbortSignal.timeout(timeoutMs),\n headers: { Accept: 'application/json' },\n })\n\n const probeLatencyMs = Date.now() - start\n\n if (!res.ok) {\n return { sdkAvailable: false, probeLatencyMs }\n }\n\n const body = (await res.json()) as unknown\n\n if (!isUsageSnapshot(body)) {\n return { sdkAvailable: false, probeLatencyMs }\n }\n\n return { sdkAvailable: true, snapshot: body, probeLatencyMs }\n } catch {\n return { sdkAvailable: false, probeLatencyMs: Date.now() - start }\n }\n}\n\n/**\n * Minimal shape guard — validates the response looks like a UsageSnapshot.\n */\nfunction isUsageSnapshot(value: unknown): value is UsageSnapshot {\n if (typeof value !== 'object' || value === null) return false\n const v = value as Record<string, unknown>\n return (\n Array.isArray(v['models']) &&\n typeof v['totalTokens'] === 'number' &&\n typeof v['totalCalls'] === 'number'\n )\n}\n","/**\n * GET /usage — unified token usage endpoint.\n *\n * Prefers the SDK's in-process UsageLedger (via GET /agentspec/usage on the\n * upstream agent) when available. Falls back to aggregating from the audit\n * ring when the SDK endpoint is absent or unreachable.\n *\n * The response includes a `source` field so consumers know which path\n * produced the data:\n * - `agent-sdk` — live snapshot from the agent's UsageLedger (richer: has\n * promptTokens/completionTokens split + window timestamp)\n * - `audit-ring` — aggregated from the sidecar's audit ring buffer\n */\n\nimport type { FastifyInstance } from 'fastify'\nimport type { AuditRing, AuditEntry } from '../audit-ring.js'\nimport { probeUsage } from './usage-probe.js'\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface UsageByModel {\n modelId: string\n totalTokens: number\n callCount: number\n}\n\ninterface RingUsageResponse {\n source: 'audit-ring'\n models: UsageByModel[]\n totalTokens: number\n totalCalls: number\n sampleSize: number\n}\n\n// ── Private helpers ──────────────────────────────────────────────────────────\n\nfunction aggregateFromRing(entries: AuditEntry[]): RingUsageResponse {\n const byModel = new Map<string, UsageByModel>()\n let totalTokens = 0\n let totalCalls = 0\n\n for (const entry of entries) {\n if (!entry.modelCalls) continue\n for (const call of entry.modelCalls) {\n let model = byModel.get(call.modelId)\n if (!model) {\n model = { modelId: call.modelId, totalTokens: 0, callCount: 0 }\n byModel.set(call.modelId, model)\n }\n model.totalTokens += call.tokenCount\n model.callCount += 1\n totalTokens += call.tokenCount\n totalCalls += 1\n }\n }\n\n return {\n source: 'audit-ring',\n models: [...byModel.values()],\n totalTokens,\n totalCalls,\n sampleSize: entries.length,\n }\n}\n\n// ── Route builder ────────────────────────────────────────────────────────────\n\nexport async function buildUsageRoutes(\n app: FastifyInstance,\n auditRing: AuditRing,\n upstreamUrl: string,\n): Promise<void> {\n app.get('/usage', async (_request, reply) => {\n // Try SDK first — richer data with prompt/completion split\n const probe = await probeUsage(upstreamUrl)\n\n if (probe.sdkAvailable && probe.snapshot) {\n return reply.code(200).send({\n source: 'agent-sdk',\n ...probe.snapshot,\n })\n }\n\n // Fall back to audit ring aggregation\n const usage = aggregateFromRing(auditRing.getAll())\n return reply.code(200).send(usage)\n })\n}\n","export interface AuditEntry {\n requestId: string\n timestamp: string\n method: string\n path: string\n statusCode?: number\n durationMs?: number\n upstreamMs?: number\n excerpt?: string\n /** OPA violation IDs that fired on this request (track or enforce mode). */\n opaViolations?: string[]\n /** true when enforce mode blocked this request with a 403 before upstream. */\n opaBlocked?: boolean\n // ── Behavioral fields (set by HeaderReporting or EventPush from the agent) ──\n /** Guardrail types that actually ran during this request (from agent). */\n guardrailsInvoked?: string[]\n /** Tool names that were called during this request (from agent). */\n toolsCalled?: string[]\n /** Model calls recorded during this request. */\n modelCalls?: { modelId: string; tokenCount: number }[]\n /** true when OPA evaluated real behavioral data and allowed the request. */\n behavioralCompliant?: boolean\n}\n\n/**\n * O(1) circular ring buffer for structured audit log entries.\n *\n * Uses head/tail indices on a pre-allocated array so eviction on overflow\n * is O(1) rather than the O(n) cost of Array.shift().\n *\n * Subscribers receive each new entry synchronously as it is pushed.\n */\nexport class AuditRing {\n private readonly items: (AuditEntry | undefined)[]\n private readonly maxSize: number\n private head = 0 // index of the oldest entry (when full)\n private count = 0 // number of valid entries currently stored\n private readonly listeners = new Set<(entry: AuditEntry) => void>()\n\n constructor(maxSize = 1000) {\n this.maxSize = maxSize\n this.items = new Array<AuditEntry | undefined>(maxSize).fill(undefined)\n }\n\n push(entry: AuditEntry): void {\n if (this.count < this.maxSize) {\n // Ring has room — write at tail\n this.items[(this.head + this.count) % this.maxSize] = entry\n this.count++\n } else {\n // Ring is full — overwrite the oldest slot and advance head\n this.items[this.head] = entry\n this.head = (this.head + 1) % this.maxSize\n }\n\n for (const listener of this.listeners) {\n listener(entry)\n }\n }\n\n getAll(): AuditEntry[] {\n const result: AuditEntry[] = []\n for (let i = 0; i < this.count; i++) {\n const entry = this.items[(this.head + i) % this.maxSize]\n if (entry !== undefined) result.push(entry)\n }\n return result\n }\n\n findById(requestId: string): AuditEntry | undefined {\n for (let i = 0; i < this.count; i++) {\n const entry = this.items[(this.head + i) % this.maxSize]\n if (entry?.requestId === requestId) return entry\n }\n return undefined\n }\n\n /**\n * Merge partial fields into an existing entry identified by requestId.\n * Returns true if found and updated, false if not found.\n * O(n) scan — same as findById.\n */\n updateById(requestId: string, partial: Partial<AuditEntry>): boolean {\n for (let i = 0; i < this.count; i++) {\n const entry = this.items[(this.head + i) % this.maxSize]\n if (entry?.requestId === requestId) {\n // Whitelist: only behavioral fields may be updated from untrusted EventPush.\n // Identity fields (requestId, timestamp, method, path, statusCode, durationMs,\n // upstreamMs, excerpt) are immutable after push().\n if (partial.guardrailsInvoked !== undefined) entry.guardrailsInvoked = partial.guardrailsInvoked\n if (partial.toolsCalled !== undefined) entry.toolsCalled = partial.toolsCalled\n if (partial.modelCalls !== undefined) entry.modelCalls = partial.modelCalls\n if (partial.behavioralCompliant !== undefined) entry.behavioralCompliant = partial.behavioralCompliant\n if (partial.opaViolations !== undefined) entry.opaViolations = partial.opaViolations\n return true\n }\n }\n return false\n }\n\n /** Subscribe to new entries. Returns an unsubscribe function. */\n subscribe(listener: (entry: AuditEntry) => void): () => void {\n this.listeners.add(listener)\n return () => this.listeners.delete(listener)\n }\n\n get size(): number {\n return this.count\n }\n}\n"],"mappings":"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","names":["util","objectUtil","json","map","map","pairs","errorUtil","errorMap","ctx","result","schema","pairs","issues","types","type","elements","processed","type","result","r","ZodFirstPartyTypeKind","exception","map","schema","type","extend","str","string","resolve","dirname","readFileSync","resolve","type","existsSync","resolve","passed"]}
|