session-collab-mcp 2.1.0 → 2.3.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/db/migrations.ts","../src/db/sqlite-adapter.ts","../src/constants.ts","../node_modules/zod/v3/external.js","../node_modules/zod/v3/helpers/util.js","../node_modules/zod/v3/ZodError.js","../node_modules/zod/v3/locales/en.js","../node_modules/zod/v3/errors.js","../node_modules/zod/v3/helpers/parseUtil.js","../node_modules/zod/v3/helpers/errorUtil.js","../node_modules/zod/v3/types.js","../src/mcp/protocol.ts","../src/utils/crypto.ts","../src/db/queries.ts","../src/db/types.ts","../src/mcp/schemas.ts","../src/utils/response.ts","../src/mcp/tools/session.ts","../src/mcp/tools/claim.ts","../src/mcp/tools/memory.ts","../src/mcp/tools/protection.ts","../src/mcp/server.ts"],"sourcesContent":["import { readFileSync, readdirSync } from 'fs';\nimport { join } from 'path';\n\nconst VERSIONED_MIGRATION_PATTERN = /^\\d{4}_.+\\.sql$/;\n\nexport function listMigrationFiles(migrationsDir: string): string[] {\n return readdirSync(migrationsDir)\n .filter((file) => VERSIONED_MIGRATION_PATTERN.test(file))\n .sort((left, right) => left.localeCompare(right, 'en'));\n}\n\nexport function loadMigrationsFromDir(migrationsDir: string): string[] {\n return listMigrationFiles(migrationsDir).map((file) =>\n readFileSync(join(migrationsDir, file), 'utf-8')\n );\n}\n\nexport function splitMigrationStatements(migration: string): string[] {\n const withoutCommentLines = migration\n .split('\\n')\n .filter((line) => !line.trim().startsWith('--'))\n .join('\\n');\n\n return withoutCommentLines\n .split(';')\n .map((statement) => statement.trim())\n .filter((statement) => statement.length > 0);\n}\n","// SQLite adapter: wraps better-sqlite3 with a generic database interface\n// This allows the same queries.ts to work with both Cloudflare D1 and local SQLite\n\nimport Database from 'better-sqlite3';\nimport { randomUUID } from 'crypto';\nimport { existsSync, mkdirSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { homedir } from 'os';\nimport { splitMigrationStatements } from './migrations.js';\n\n// Polyfill crypto.randomUUID for Node.js\nif (typeof globalThis.crypto === 'undefined') {\n (globalThis as unknown as { crypto: { randomUUID: () => string } }).crypto = {\n randomUUID,\n };\n}\n\nexport interface QueryResult<T> {\n results: T[];\n meta: {\n changes: number;\n last_row_id: number;\n };\n}\n\nexport interface PreparedStatement {\n bind(...values: unknown[]): PreparedStatement;\n first<T>(): Promise<T | null>;\n all<T>(): Promise<QueryResult<T>>;\n run(): Promise<{ meta: { changes: number } }>;\n}\n\nexport interface DatabaseAdapter {\n prepare(sql: string): PreparedStatement;\n batch(statements: PreparedStatement[]): Promise<QueryResult<unknown>[]>;\n}\n\nclass SqlitePreparedStatement implements PreparedStatement {\n private bindings: unknown[] = [];\n\n constructor(\n private db: Database.Database,\n private sql: string\n ) {}\n\n bind(...values: unknown[]): PreparedStatement {\n this.bindings = values;\n return this;\n }\n\n async first<T>(): Promise<T | null> {\n const stmt = this.db.prepare(this.sql);\n const result = stmt.get(...this.bindings) as T | undefined;\n return result ?? null;\n }\n\n async all<T>(): Promise<QueryResult<T>> {\n const stmt = this.db.prepare(this.sql);\n const results = stmt.all(...this.bindings) as T[];\n return {\n results,\n meta: { changes: 0, last_row_id: 0 },\n };\n }\n\n async run(): Promise<{ meta: { changes: number } }> {\n const stmt = this.db.prepare(this.sql);\n const result = stmt.run(...this.bindings);\n // Note: wal_autocheckpoint handles periodic checkpoints automatically\n // No need to checkpoint after every write - reduces I/O overhead\n return {\n meta: { changes: result.changes },\n };\n }\n\n // Internal method for batch execution\n _run(): Database.RunResult {\n const stmt = this.db.prepare(this.sql);\n return stmt.run(...this.bindings);\n }\n}\n\nclass SqliteDatabase implements DatabaseAdapter {\n private db: Database.Database;\n\n constructor(dbPath: string) {\n // Ensure directory exists\n const dir = dirname(dbPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n this.db = new Database(dbPath);\n\n // Multi-process SQLite configuration\n this.db.pragma('journal_mode = WAL');\n this.db.pragma('foreign_keys = ON');\n this.db.pragma('busy_timeout = 5000'); // Wait up to 5s for locks\n this.db.pragma('synchronous = NORMAL'); // Ensure durability\n this.db.pragma('wal_autocheckpoint = 100'); // Checkpoint every 100 pages\n\n // Checkpoint on open to see latest data from other processes\n this.db.pragma('wal_checkpoint(PASSIVE)');\n }\n\n // Force checkpoint to make changes visible to other processes\n // Only called after batch operations, not after individual writes\n checkpoint(): void {\n this.db.pragma('wal_checkpoint(PASSIVE)');\n }\n\n prepare(sql: string): PreparedStatement {\n return new SqlitePreparedStatement(this.db, sql);\n }\n\n async batch(statements: PreparedStatement[]): Promise<QueryResult<unknown>[]> {\n const transaction = this.db.transaction(() => {\n return statements.map((stmt) => {\n const sqliteStmt = stmt as SqlitePreparedStatement;\n const result = sqliteStmt._run();\n return {\n results: [],\n meta: { changes: result.changes, last_row_id: Number(result.lastInsertRowid) },\n };\n });\n });\n const results = transaction();\n // Checkpoint after batch write to ensure visibility to other processes\n this.checkpoint();\n return results;\n }\n\n // Initialize database schema\n // Handles upgrades gracefully by ignoring \"already exists\" and \"duplicate column\" errors\n initSchema(migrations: string[]): void {\n for (const migration of migrations) {\n const statements = splitMigrationStatements(migration);\n\n for (const stmt of statements) {\n try {\n this.runSql(stmt);\n } catch (error) {\n // Ignore errors for idempotent operations (upgrades)\n const message = error instanceof Error ? error.message : String(error);\n const isIgnorable =\n message.includes('already exists') ||\n message.includes('duplicate column name') ||\n message.includes('UNIQUE constraint failed');\n\n if (!isIgnorable) {\n throw error;\n }\n }\n }\n }\n }\n\n // Run a single SQL statement (used by initSchema for granular error handling)\n private runSql(sql: string): void {\n this.db.prepare(sql).run();\n }\n\n close(): void {\n this.db.close();\n }\n}\n\n// Get default database path\nexport function getDefaultDbPath(): string {\n const dataDir = join(homedir(), '.claude', 'session-collab');\n return join(dataDir, 'collab.db');\n}\n\n// Create a local SQLite database\nexport function createLocalDatabase(dbPath?: string): SqliteDatabase {\n const path = dbPath ?? getDefaultDbPath();\n return new SqliteDatabase(path);\n}\n\nexport { SqliteDatabase };\n","// Shared constants for Session Collaboration MCP\n\nimport { readFileSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { fileURLToPath } from 'url';\n\n// Read version from package.json\nfunction getVersion(): string {\n try {\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));\n return pkg.version;\n } catch {\n return '0.0.0';\n }\n}\n\nexport const VERSION = getVersion();\n\nexport const SERVER_NAME = 'session-collab-mcp';\n\nexport const SERVER_INSTRUCTIONS = `\n# Session Collaboration MCP\n\nCoordinate sessions and persist context across conversations.\n\n## Core Tools\n\n### Session\n- \\`collab_session_start\\`: Start session with project_root\n- \\`collab_session_end\\`: End session, release claims\n- \\`collab_session_list\\`: List active sessions and their active claim summaries\n- \\`collab_session_update\\`: Update heartbeat, current task, todos, and progress\n- \\`collab_config\\`: Configure session behavior\n- \\`collab_status\\`: Get session status and summary\n\n### Claims (1 tool)\n- \\`collab_claim\\`: Unified claim tool\n - action: \"create\" | \"check\" | \"release\" | \"list\"\n\n### Memory (3 tools)\n- \\`collab_memory_save\\`: Save context (upsert)\n- \\`collab_memory_recall\\`: Recall context (use active=true for restoration)\n- \\`collab_memory_clear\\`: Clear memories\n\n### Protection (1 tool)\n- \\`collab_protect\\`: Unified protection tool\n - action: \"register\" | \"check\" | \"list\"\n\n## Workflow\n\n1. **On start**: \\`collab_session_start\\` with project_root\n2. **Before editing**: \\`collab_claim\\` action=\"check\"\n3. **For changes**: \\`collab_claim\\` action=\"create\" (blocked by default if another active session conflicts)\n4. **Save context**: \\`collab_memory_save\\` for important findings\n5. **While working**: \\`collab_session_update\\` with current_task/todos\n6. **When done**: \\`collab_claim\\` action=\"release\"\n7. **On end**: \\`collab_session_end\\`\n\n## Memory Categories\n\n- **finding**: Discovered facts, root causes\n- **decision**: Architectural choices\n- **state**: Current tracking info\n- **important**: Critical context\n- **context**: General context\n\n## Best Practices\n\n- Save important findings to memory as you discover them\n- Use active=true in recall to restore context\n- Register plans with collab_protect for protection\n- Check files before editing to avoid conflicts\n`.trim();\n","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","// MCP Protocol types and utilities\n// Based on Model Context Protocol specification\n\nimport { z } from 'zod';\n\n// JSON-RPC 2.0 types\nexport const JsonRpcRequestSchema = z.object({\n jsonrpc: z.literal('2.0'),\n id: z.union([z.string(), z.number()]).optional(),\n method: z.string(),\n params: z.record(z.unknown()).optional(),\n});\n\nexport type JsonRpcRequest = z.infer<typeof JsonRpcRequestSchema>;\n\nexport interface JsonRpcResponse {\n jsonrpc: '2.0';\n id?: string | number;\n result?: unknown;\n error?: {\n code: number;\n message: string;\n data?: unknown;\n };\n}\n\nexport interface JsonRpcNotification {\n jsonrpc: '2.0';\n method: string;\n params?: Record<string, unknown>;\n}\n\n// MCP-specific types\nexport interface McpServerInfo {\n name: string;\n version: string;\n}\n\nexport interface McpCapabilities {\n tools?: Record<string, never>;\n resources?: Record<string, never>;\n prompts?: Record<string, never>;\n}\n\nexport interface McpTool {\n name: string;\n description: string;\n inputSchema: {\n type: 'object';\n properties: Record<string, unknown>;\n required?: string[];\n };\n}\n\nexport interface McpToolResult {\n content: Array<{\n type: 'text';\n text: string;\n }>;\n isError?: boolean;\n}\n\n// Error codes\nexport const MCP_ERROR_CODES = {\n PARSE_ERROR: -32700,\n INVALID_REQUEST: -32600,\n METHOD_NOT_FOUND: -32601,\n INVALID_PARAMS: -32602,\n INTERNAL_ERROR: -32603,\n} as const;\n\n// Helper functions\nexport function createSuccessResponse(id: string | number | undefined, result: unknown): JsonRpcResponse {\n return {\n jsonrpc: '2.0',\n id,\n result,\n };\n}\n\nexport function createErrorResponse(\n id: string | number | undefined,\n code: number,\n message: string,\n data?: unknown\n): JsonRpcResponse {\n return {\n jsonrpc: '2.0',\n id,\n error: { code, message, data },\n };\n}\n\nexport function createToolResult(text: string, isError = false): McpToolResult {\n return {\n content: [{ type: 'text', text }],\n isError,\n };\n}\n","// Cryptographic utilities\n\n/**\n * Generate UUID v4\n */\nexport function generateId(): string {\n return crypto.randomUUID();\n}\n","// Database queries for Session Collaboration MCP\n\nimport type { DatabaseAdapter } from './sqlite-adapter.js';\nimport type {\n Session,\n Claim,\n ClaimStatus,\n ClaimScope,\n ClaimWithFiles,\n ConflictInfo,\n TodoItem,\n SessionProgress,\n SessionConfig,\n SymbolClaim,\n AuditAction,\n AuditEntityType,\n AuditHistoryEntry,\n AuditHistoryWithSession,\n AuditMetadata,\n MemoryCategory,\n } from './types';\nimport type { WorkingMemory, WorkingMemoryInput } from './types';\nimport { generateId } from '../utils/crypto.js';\n\n// ============ Session Queries ============\n\nexport async function createSession(\n db: DatabaseAdapter,\n params: {\n name?: string;\n project_root: string;\n machine_id?: string;\n user_id?: string;\n }\n): Promise<Session> {\n const id = generateId();\n const now = new Date().toISOString();\n\n await db\n .prepare(\n `INSERT INTO sessions (id, name, project_root, machine_id, user_id, created_at, last_heartbeat, status)\n VALUES (?, ?, ?, ?, ?, ?, ?, 'active')`\n )\n .bind(id, params.name ?? null, params.project_root, params.machine_id ?? null, params.user_id ?? null, now, now)\n .run();\n\n return {\n id,\n name: params.name ?? null,\n project_root: params.project_root,\n machine_id: params.machine_id ?? null,\n user_id: params.user_id ?? null,\n created_at: now,\n last_heartbeat: now,\n status: 'active',\n current_task: null,\n progress: null,\n todos: null,\n config: null,\n };\n}\n\nexport async function getSession(db: DatabaseAdapter, id: string): Promise<Session | null> {\n const result = await db.prepare('SELECT * FROM sessions WHERE id = ?').bind(id).first<Session>();\n return result ?? null;\n}\n\nexport async function listSessions(\n db: DatabaseAdapter,\n params: {\n include_inactive?: boolean;\n project_root?: string;\n user_id?: string;\n } = {}\n): Promise<Session[]> {\n let query = 'SELECT * FROM sessions WHERE 1=1';\n const bindings: (string | number)[] = [];\n\n if (!params.include_inactive) {\n query += \" AND status = 'active'\";\n }\n\n if (params.project_root) {\n query += ' AND project_root = ?';\n bindings.push(params.project_root);\n }\n\n if (params.user_id) {\n query += ' AND user_id = ?';\n bindings.push(params.user_id);\n }\n\n query += ' ORDER BY last_heartbeat DESC';\n\n const result = await db\n .prepare(query)\n .bind(...bindings)\n .all<Session>();\n return result.results;\n}\n\nexport async function updateSessionHeartbeat(\n db: DatabaseAdapter,\n id: string,\n statusUpdate?: {\n current_task?: string | null;\n todos?: TodoItem[];\n }\n): Promise<boolean> {\n const now = new Date().toISOString();\n\n // Calculate progress from todos if provided\n let progress: SessionProgress | null = null;\n let todosJson: string | null = null;\n\n if (statusUpdate?.todos) {\n const total = statusUpdate.todos.length;\n const completed = statusUpdate.todos.filter((t) => t.status === 'completed').length;\n progress = {\n completed,\n total,\n percentage: total > 0 ? Math.round((completed / total) * 100) : 0,\n };\n todosJson = JSON.stringify(statusUpdate.todos);\n }\n\n let query = \"UPDATE sessions SET last_heartbeat = ?\";\n const bindings: (string | null)[] = [now];\n\n if (statusUpdate?.current_task !== undefined) {\n query += \", current_task = ?\";\n bindings.push(statusUpdate.current_task);\n }\n\n if (progress) {\n query += \", progress = ?\";\n bindings.push(JSON.stringify(progress));\n }\n\n if (todosJson) {\n query += \", todos = ?\";\n bindings.push(todosJson);\n }\n\n query += \" WHERE id = ? AND status = 'active'\";\n bindings.push(id);\n\n const result = await db\n .prepare(query)\n .bind(...bindings)\n .run();\n return result.meta.changes > 0;\n}\n\nexport async function updateSessionStatus(\n db: DatabaseAdapter,\n id: string,\n params: {\n current_task?: string | null;\n todos?: TodoItem[];\n }\n): Promise<boolean> {\n const now = new Date().toISOString();\n\n // Calculate progress from todos\n let progress: SessionProgress | null = null;\n let todosJson: string | null = null;\n\n if (params.todos) {\n const total = params.todos.length;\n const completed = params.todos.filter((t) => t.status === 'completed').length;\n progress = {\n completed,\n total,\n percentage: total > 0 ? Math.round((completed / total) * 100) : 0,\n };\n todosJson = JSON.stringify(params.todos);\n }\n\n const result = await db\n .prepare(\n `UPDATE sessions\n SET current_task = ?, progress = ?, todos = ?, last_heartbeat = ?\n WHERE id = ? AND status = 'active'`\n )\n .bind(\n params.current_task ?? null,\n progress ? JSON.stringify(progress) : null,\n todosJson,\n now,\n id\n )\n .run();\n\n return result.meta.changes > 0;\n}\n\nexport async function endSession(\n db: DatabaseAdapter,\n id: string,\n release_claims: 'complete' | 'abandon' = 'abandon'\n): Promise<boolean> {\n const claimStatus: ClaimStatus = release_claims === 'complete' ? 'completed' : 'abandoned';\n\n // Update all active claims for this session\n await db\n .prepare(\"UPDATE claims SET status = ?, updated_at = ? WHERE session_id = ? AND status = 'active'\")\n .bind(claimStatus, new Date().toISOString(), id)\n .run();\n\n // Mark session as terminated\n const result = await db.prepare(\"UPDATE sessions SET status = 'terminated' WHERE id = ?\").bind(id).run();\n\n return result.meta.changes > 0;\n}\n\nexport async function cleanupStaleSessions(db: DatabaseAdapter, staleMinutes: number = 30): Promise<{ stale_sessions: number; orphaned_claims: number }> {\n const cutoff = new Date(Date.now() - staleMinutes * 60 * 1000).toISOString();\n const now = new Date().toISOString();\n\n // Mark stale sessions as inactive\n const result = await db\n .prepare(\"UPDATE sessions SET status = 'inactive' WHERE status = 'active' AND last_heartbeat < ?\")\n .bind(cutoff)\n .run();\n\n // Abandon claims from inactive/terminated sessions\n const orphanedResult = await db\n .prepare(\n `UPDATE claims SET status = 'abandoned', updated_at = ?\n WHERE status = 'active' AND session_id IN (\n SELECT id FROM sessions WHERE status IN ('inactive', 'terminated')\n )`\n )\n .bind(now)\n .run();\n\n return {\n stale_sessions: result.meta.changes,\n orphaned_claims: orphanedResult.meta.changes,\n };\n}\n\n/**\n * Cleanup stale claims based on session config.\n * Only releases claims for sessions that have auto_release_stale=true.\n */\nexport async function cleanupStaleClaims(\n db: DatabaseAdapter\n): Promise<{ released_claims: number; details: Array<{ claim_id: string; session_name: string | null; files: string[] }> }> {\n const now = new Date();\n const details: Array<{ claim_id: string; session_name: string | null; files: string[] }> = [];\n\n // Find active sessions with auto_release_stale enabled\n const sessions = await db\n .prepare(\n `SELECT id, name, config FROM sessions\n WHERE status = 'active' AND config IS NOT NULL`\n )\n .all<{ id: string; name: string | null; config: string }>();\n\n let released = 0;\n\n for (const session of sessions.results ?? []) {\n let config: Partial<SessionConfig> = {};\n try {\n config = JSON.parse(session.config || '{}');\n } catch {\n // Skip sessions with invalid config\n continue;\n }\n if (!config.auto_release_stale) continue;\n\n const thresholdHours = config.stale_threshold_hours ?? 2;\n const delayMinutes = config.auto_release_delay_minutes ?? 5;\n const cutoff = new Date(\n now.getTime() - thresholdHours * 60 * 60 * 1000 - delayMinutes * 60 * 1000\n ).toISOString();\n\n // Find stale claims for this session\n const staleClaims = await db\n .prepare(\n `SELECT c.id, GROUP_CONCAT(cf.file_path, '|||') as files\n FROM claims c\n LEFT JOIN claim_files cf ON c.id = cf.claim_id\n WHERE c.session_id = ? AND c.status = 'active' AND c.updated_at < ?\n GROUP BY c.id`\n )\n .bind(session.id, cutoff)\n .all<{ id: string; files: string | null }>();\n\n for (const claim of staleClaims.results ?? []) {\n await releaseClaim(db, claim.id, { status: 'abandoned' });\n released++;\n details.push({\n claim_id: claim.id,\n session_name: session.name,\n files: claim.files ? claim.files.split('|||') : [],\n });\n }\n }\n\n return { released_claims: released, details };\n}\n\nexport async function updateSessionConfig(\n db: DatabaseAdapter,\n id: string,\n config: SessionConfig\n): Promise<boolean> {\n const result = await db\n .prepare('UPDATE sessions SET config = ? WHERE id = ?')\n .bind(JSON.stringify(config), id)\n .run();\n\n return result.meta.changes > 0;\n}\n\n// ============ Claim Queries ============\n\nexport async function createClaim(\n db: DatabaseAdapter,\n params: {\n session_id: string;\n files: string[];\n intent: string;\n scope?: ClaimScope;\n symbols?: SymbolClaim[];\n priority?: number;\n }\n): Promise<{ claim: Claim; files: string[]; symbols?: SymbolClaim[] }> {\n const id = generateId();\n const now = new Date().toISOString();\n const scope = params.scope ?? 'medium';\n const priority = params.priority ?? 50;\n\n // Batch insert: claim + all file paths in single transaction\n const claimStatement = db\n .prepare(\n `INSERT INTO claims (id, session_id, intent, scope, priority, status, created_at, updated_at)\n VALUES (?, ?, ?, ?, ?, 'active', ?, ?)`\n )\n .bind(id, params.session_id, params.intent, scope, priority, now, now);\n\n const fileStatements = params.files.map((filePath) => {\n const isPattern = filePath.includes('*') ? 1 : 0;\n return db\n .prepare('INSERT INTO claim_files (claim_id, file_path, is_pattern) VALUES (?, ?, ?)')\n .bind(id, filePath, isPattern);\n });\n\n // Add symbol claims if provided\n const symbolStatements: ReturnType<typeof db.prepare>[] = [];\n if (params.symbols && params.symbols.length > 0) {\n for (const symbolClaim of params.symbols) {\n for (const symbolName of symbolClaim.symbols) {\n symbolStatements.push(\n db\n .prepare(\n 'INSERT INTO claim_symbols (claim_id, file_path, symbol_name, symbol_type, created_at) VALUES (?, ?, ?, ?, ?)'\n )\n .bind(id, symbolClaim.file, symbolName, symbolClaim.symbol_type ?? 'function', now)\n );\n }\n }\n }\n\n await db.batch([claimStatement, ...fileStatements, ...symbolStatements]);\n\n return {\n claim: {\n id,\n session_id: params.session_id,\n intent: params.intent,\n scope,\n status: 'active',\n priority,\n created_at: now,\n updated_at: now,\n completed_summary: null,\n },\n files: params.files,\n symbols: params.symbols,\n };\n}\n\nexport async function updateClaimPriority(\n db: DatabaseAdapter,\n claimId: string,\n priority: number\n): Promise<boolean> {\n const now = new Date().toISOString();\n\n const result = await db\n .prepare('UPDATE claims SET priority = ?, updated_at = ? WHERE id = ? AND status = ?')\n .bind(priority, now, claimId, 'active')\n .run();\n\n return result.meta.changes > 0;\n}\n\nexport async function getClaim(db: DatabaseAdapter, id: string): Promise<ClaimWithFiles | null> {\n // Single query with JOIN to avoid N+1 problem\n const result = await db\n .prepare(\n `SELECT\n c.id, c.session_id, c.intent, c.scope, c.priority, c.status,\n c.created_at, c.updated_at, c.completed_summary,\n s.name as session_name,\n GROUP_CONCAT(cf.file_path, '|||') as file_paths\n FROM claims c\n LEFT JOIN sessions s ON c.session_id = s.id\n LEFT JOIN claim_files cf ON c.id = cf.claim_id\n WHERE c.id = ?\n GROUP BY c.id`\n )\n .bind(id)\n .first<Claim & { session_name: string | null; file_paths: string | null }>();\n\n if (!result) return null;\n\n return {\n id: result.id,\n session_id: result.session_id,\n intent: result.intent,\n scope: result.scope,\n priority: result.priority,\n status: result.status,\n created_at: result.created_at,\n updated_at: result.updated_at,\n completed_summary: result.completed_summary,\n files: result.file_paths ? result.file_paths.split('|||') : [],\n session_name: result.session_name,\n };\n}\n\nexport async function listClaims(\n db: DatabaseAdapter,\n params: {\n session_id?: string;\n status?: ClaimStatus | 'all';\n project_root?: string;\n } = {}\n): Promise<ClaimWithFiles[]> {\n let query = `\n SELECT c.*, s.name as session_name\n FROM claims c\n JOIN sessions s ON c.session_id = s.id\n WHERE 1=1\n `;\n const bindings: string[] = [];\n\n if (params.session_id) {\n query += ' AND c.session_id = ?';\n bindings.push(params.session_id);\n }\n\n if (params.status && params.status !== 'all') {\n query += ' AND c.status = ?';\n bindings.push(params.status);\n }\n\n if (params.project_root) {\n query += ' AND s.project_root = ?';\n bindings.push(params.project_root);\n }\n\n query += ' ORDER BY c.created_at DESC';\n\n const claims = await db\n .prepare(query)\n .bind(...bindings)\n .all<Claim & { session_name: string | null }>();\n\n if (claims.results.length === 0) {\n return [];\n }\n\n // Batch fetch all files for claims (avoid N+1 query)\n const claimIds = claims.results.map((c) => c.id);\n const placeholders = claimIds.map(() => '?').join(',');\n const allFiles = await db\n .prepare(`SELECT claim_id, file_path FROM claim_files WHERE claim_id IN (${placeholders})`)\n .bind(...claimIds)\n .all<{ claim_id: string; file_path: string }>();\n\n // Group files by claim_id\n const filesByClaimId = new Map<string, string[]>();\n for (const f of allFiles.results) {\n const arr = filesByClaimId.get(f.claim_id) ?? [];\n arr.push(f.file_path);\n filesByClaimId.set(f.claim_id, arr);\n }\n\n // Assemble results\n return claims.results.map((claim) => ({\n ...claim,\n files: filesByClaimId.get(claim.id) ?? [],\n }));\n}\n\nexport async function checkConflicts(\n db: DatabaseAdapter,\n files: string[],\n excludeSessionId?: string,\n symbols?: SymbolClaim[]\n): Promise<ConflictInfo[]> {\n if (files.length === 0) {\n return [];\n }\n\n const conflicts: ConflictInfo[] = [];\n\n // Build a map of file -> symbols for quick lookup\n const symbolsByFile = new Map<string, Set<string>>();\n const allSymbolNames = new Set<string>();\n if (symbols && symbols.length > 0) {\n for (const sc of symbols) {\n const existing = symbolsByFile.get(sc.file) ?? new Set();\n for (const sym of sc.symbols) {\n existing.add(sym);\n allSymbolNames.add(sym);\n }\n symbolsByFile.set(sc.file, existing);\n }\n }\n\n const hasSymbols = symbolsByFile.size > 0;\n const sessionFilter = excludeSessionId ? ' AND c.session_id != ?' : '';\n\n // Query 1: File-level conflicts (batch all files)\n const fileConditions = files.map(() => '(cf.file_path = ? OR (cf.is_pattern = 1 AND ? GLOB cf.file_path))').join(' OR ');\n\n let fileQuery = `\n SELECT DISTINCT\n c.id as claim_id,\n c.session_id,\n s.name as session_name,\n cf.file_path,\n c.intent,\n c.scope,\n c.created_at,\n NULL as symbol_name,\n NULL as symbol_type,\n 'file' as conflict_level\n FROM claim_files cf\n JOIN claims c ON cf.claim_id = c.id\n JOIN sessions s ON c.session_id = s.id\n WHERE c.status = 'active'\n AND s.status = 'active'\n AND (${fileConditions})\n ${sessionFilter}\n `;\n\n // For symbol-level checks, exclude file claims that have symbol-level claims\n if (hasSymbols) {\n fileQuery += `\n AND NOT EXISTS (\n SELECT 1 FROM claim_symbols cs\n WHERE cs.claim_id = c.id AND cs.file_path = cf.file_path\n )\n `;\n }\n\n const fileBindings: string[] = files.flatMap(f => [f, f]);\n if (excludeSessionId) {\n fileBindings.push(excludeSessionId);\n }\n\n const fileResult = await db\n .prepare(fileQuery)\n .bind(...fileBindings)\n .all<ConflictInfo>();\n\n conflicts.push(...fileResult.results);\n\n // Query 2: Symbol-level conflicts (batch all files)\n const symbolFilePlaceholders = files.map(() => '?').join(',');\n let symbolQuery: string;\n let symbolBindings: string[];\n\n if (hasSymbols && allSymbolNames.size > 0) {\n // Check specific symbols by file/symbol pair to avoid cross-file mismatches\n const symbolConditions: string[] = [];\n const symbolBindingsList: string[] = [];\n\n for (const [file, symbolSet] of symbolsByFile) {\n const symbolList = Array.from(symbolSet);\n if (symbolList.length === 0) {\n continue;\n }\n const symbolPlaceholders = symbolList.map(() => '?').join(',');\n symbolConditions.push(`(cs.file_path = ? AND cs.symbol_name IN (${symbolPlaceholders}))`);\n symbolBindingsList.push(file, ...symbolList);\n }\n\n if (symbolConditions.length === 0) {\n return conflicts;\n }\n\n symbolQuery = `\n SELECT DISTINCT\n c.id as claim_id,\n c.session_id,\n s.name as session_name,\n cs.file_path,\n c.intent,\n c.scope,\n c.created_at,\n cs.symbol_name,\n cs.symbol_type,\n 'symbol' as conflict_level\n FROM claim_symbols cs\n JOIN claims c ON cs.claim_id = c.id\n JOIN sessions s ON c.session_id = s.id\n WHERE c.status = 'active'\n AND s.status = 'active'\n AND (${symbolConditions.join(' OR ')})\n ${sessionFilter}\n `;\n symbolBindings = [...symbolBindingsList];\n } else {\n // Check all symbols on these files\n symbolQuery = `\n SELECT DISTINCT\n c.id as claim_id,\n c.session_id,\n s.name as session_name,\n cs.file_path,\n c.intent,\n c.scope,\n c.created_at,\n cs.symbol_name,\n cs.symbol_type,\n 'symbol' as conflict_level\n FROM claim_symbols cs\n JOIN claims c ON cs.claim_id = c.id\n JOIN sessions s ON c.session_id = s.id\n WHERE c.status = 'active'\n AND s.status = 'active'\n AND cs.file_path IN (${symbolFilePlaceholders})\n ${sessionFilter}\n `;\n symbolBindings = [...files];\n }\n\n if (excludeSessionId) {\n symbolBindings.push(excludeSessionId);\n }\n\n const symbolResult = await db\n .prepare(symbolQuery)\n .bind(...symbolBindings)\n .all<ConflictInfo>();\n\n conflicts.push(...symbolResult.results);\n\n // Deduplicate by claim_id + file_path + symbol_name\n const seen = new Set<string>();\n return conflicts.filter((c) => {\n const key = `${c.claim_id}:${c.file_path}:${c.symbol_name ?? ''}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n}\n\nexport async function releaseClaim(\n db: DatabaseAdapter,\n id: string,\n params: {\n status: 'completed' | 'abandoned';\n summary?: string;\n }\n): Promise<boolean> {\n const now = new Date().toISOString();\n\n const result = await db\n .prepare('UPDATE claims SET status = ?, updated_at = ?, completed_summary = ? WHERE id = ?')\n .bind(params.status, now, params.summary ?? null, id)\n .run();\n\n return result.meta.changes > 0;\n}\n\n/**\n * Get claim info by file path without modifying anything.\n * Use this to check claim details before deciding whether to release.\n */\nexport async function getClaimInfoByFile(\n db: DatabaseAdapter,\n sessionId: string,\n filePath: string\n): Promise<{\n claim_id: string;\n scope: ClaimScope;\n file_count: number;\n files: string[];\n} | null> {\n // Find claim containing this file for this session\n const claim = await db\n .prepare(\n `SELECT c.id, c.scope\n FROM claims c\n JOIN claim_files cf ON c.id = cf.claim_id\n WHERE c.session_id = ? AND c.status = 'active' AND cf.file_path = ?`\n )\n .bind(sessionId, filePath)\n .first<{ id: string; scope: ClaimScope }>();\n\n if (!claim) {\n return null;\n }\n\n // Get all files in this claim\n const filesResult = await db\n .prepare('SELECT file_path FROM claim_files WHERE claim_id = ?')\n .bind(claim.id)\n .all<{ file_path: string }>();\n\n const files = (filesResult.results ?? []).map((f) => f.file_path);\n\n return {\n claim_id: claim.id,\n scope: claim.scope,\n file_count: files.length,\n files,\n };\n}\n\n/**\n * Release a claim by file path.\n * If the claim has only one file, releases the entire claim.\n * If the claim has multiple files, removes just the specified file from the claim.\n */\nexport async function releaseClaimByFile(\n db: DatabaseAdapter,\n sessionId: string,\n filePath: string\n): Promise<{\n released: boolean;\n claim_id?: string;\n scope?: ClaimScope;\n partial?: boolean;\n files_remaining?: number;\n}> {\n // Find claim containing this file for this session\n const claim = await db\n .prepare(\n `SELECT c.id, c.scope\n FROM claims c\n JOIN claim_files cf ON c.id = cf.claim_id\n WHERE c.session_id = ? AND c.status = 'active' AND cf.file_path = ?`\n )\n .bind(sessionId, filePath)\n .first<{ id: string; scope: ClaimScope }>();\n\n if (!claim) {\n return { released: false };\n }\n\n // Check how many files are in this claim\n const fileCount = await db\n .prepare('SELECT COUNT(*) as count FROM claim_files WHERE claim_id = ?')\n .bind(claim.id)\n .first<{ count: number }>();\n\n const count = fileCount?.count ?? 0;\n\n if (count <= 1) {\n // Release the entire claim\n await releaseClaim(db, claim.id, { status: 'completed' });\n return { released: true, claim_id: claim.id, scope: claim.scope, partial: false };\n } else {\n // Remove just this file from the claim\n await db\n .prepare('DELETE FROM claim_files WHERE claim_id = ? AND file_path = ?')\n .bind(claim.id, filePath)\n .run();\n\n // Also remove any symbols for this file\n await db\n .prepare('DELETE FROM claim_symbols WHERE claim_id = ? AND file_path = ?')\n .bind(claim.id, filePath)\n .run();\n\n // Update claim's updated_at timestamp\n await db\n .prepare('UPDATE claims SET updated_at = ? WHERE id = ?')\n .bind(new Date().toISOString(), claim.id)\n .run();\n\n return {\n released: true,\n claim_id: claim.id,\n scope: claim.scope,\n partial: true,\n files_remaining: count - 1,\n };\n }\n}\n\n// Legacy queries moved to legacy-queries.ts (messages, decisions, references, queue, notifications).\n// Keep queue cleanup here because core session end uses it.\nexport async function removeSessionFromAllQueues(\n db: DatabaseAdapter,\n sessionId: string\n): Promise<number> {\n const result = await db\n .prepare('DELETE FROM claim_queue WHERE session_id = ?')\n .bind(sessionId)\n .run();\n\n return result.meta.changes;\n}\n\n// ============ Audit History Queries ============\n\nexport async function logAuditEvent(\n db: DatabaseAdapter,\n params: {\n session_id?: string;\n action: AuditAction;\n entity_type: AuditEntityType;\n entity_id: string;\n metadata?: AuditMetadata;\n }\n): Promise<AuditHistoryEntry> {\n const id = generateId();\n const now = new Date().toISOString();\n const metadataJson = params.metadata ? JSON.stringify(params.metadata) : null;\n\n await db\n .prepare(\n `INSERT INTO audit_history (id, session_id, action, entity_type, entity_id, metadata, created_at)\n VALUES (?, ?, ?, ?, ?, ?, ?)`\n )\n .bind(id, params.session_id ?? null, params.action, params.entity_type, params.entity_id, metadataJson, now)\n .run();\n\n return {\n id,\n session_id: params.session_id ?? null,\n action: params.action,\n entity_type: params.entity_type,\n entity_id: params.entity_id,\n metadata: metadataJson,\n created_at: now,\n };\n}\n\nexport async function listAuditHistory(\n db: DatabaseAdapter,\n params: {\n session_id?: string;\n action?: AuditAction;\n entity_type?: AuditEntityType;\n entity_id?: string;\n from_date?: string;\n to_date?: string;\n limit?: number;\n } = {}\n): Promise<AuditHistoryWithSession[]> {\n let query = `\n SELECT h.*, s.name as session_name\n FROM audit_history h\n LEFT JOIN sessions s ON h.session_id = s.id\n WHERE 1=1\n `;\n const bindings: (string | number)[] = [];\n\n if (params.session_id) {\n query += ' AND h.session_id = ?';\n bindings.push(params.session_id);\n }\n\n if (params.action) {\n query += ' AND h.action = ?';\n bindings.push(params.action);\n }\n\n if (params.entity_type) {\n query += ' AND h.entity_type = ?';\n bindings.push(params.entity_type);\n }\n\n if (params.entity_id) {\n query += ' AND h.entity_id = ?';\n bindings.push(params.entity_id);\n }\n\n if (params.from_date) {\n query += ' AND h.created_at >= ?';\n bindings.push(params.from_date);\n }\n\n if (params.to_date) {\n query += ' AND h.created_at <= ?';\n bindings.push(params.to_date);\n }\n\n query += ' ORDER BY h.created_at DESC LIMIT ?';\n bindings.push(params.limit ?? 50);\n\n const result = await db\n .prepare(query)\n .bind(...bindings)\n .all<AuditHistoryWithSession>();\n\n return result.results;\n}\n\nexport async function cleanupOldAuditHistory(\n db: DatabaseAdapter,\n retentionDays: number = 7\n): Promise<number> {\n const cutoff = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000).toISOString();\n\n const result = await db\n .prepare('DELETE FROM audit_history WHERE created_at < ?')\n .bind(cutoff)\n .run();\n\n return result.meta.changes;\n}\n\n// ============ Working Memory Queries ============\n\nexport async function saveMemory(\n db: DatabaseAdapter,\n sessionId: string,\n input: WorkingMemoryInput\n): Promise<WorkingMemory> {\n const now = new Date().toISOString();\n const metadataJson = input.metadata ? JSON.stringify(input.metadata) : null;\n\n // Use INSERT OR REPLACE to update if exists\n await db\n .prepare(\n `INSERT INTO working_memory\n (session_id, category, key, content, priority, pinned, created_at, updated_at, expires_at, related_claim_id, related_decision_id, metadata)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(session_id, category, key) DO UPDATE SET\n content = excluded.content,\n priority = excluded.priority,\n pinned = excluded.pinned,\n updated_at = excluded.updated_at,\n expires_at = excluded.expires_at,\n related_claim_id = excluded.related_claim_id,\n related_decision_id = excluded.related_decision_id,\n metadata = excluded.metadata`\n )\n .bind(\n sessionId,\n input.category,\n input.key,\n input.content,\n input.priority ?? 50,\n input.pinned ? 1 : 0,\n now,\n now,\n input.expires_at ?? null,\n input.related_claim_id ?? null,\n input.related_decision_id ?? null,\n metadataJson\n )\n .run();\n\n // Fetch the saved/updated record\n const result = await db\n .prepare('SELECT * FROM working_memory WHERE session_id = ? AND category = ? AND key = ?')\n .bind(sessionId, input.category, input.key)\n .first<WorkingMemory>();\n\n return result!;\n}\n\nexport async function recallMemory(\n db: DatabaseAdapter,\n sessionId: string,\n params: {\n category?: MemoryCategory;\n key?: string;\n pinned_only?: boolean;\n limit?: number;\n include_expired?: boolean;\n } = {}\n): Promise<WorkingMemory[]> {\n let query = 'SELECT * FROM working_memory WHERE session_id = ?';\n const bindings: (string | number)[] = [sessionId];\n\n if (params.category) {\n query += ' AND category = ?';\n bindings.push(params.category);\n }\n\n if (params.key) {\n query += ' AND key = ?';\n bindings.push(params.key);\n }\n\n if (params.pinned_only) {\n query += ' AND pinned = 1';\n }\n\n if (!params.include_expired) {\n query += ' AND (expires_at IS NULL OR expires_at > ?)';\n bindings.push(new Date().toISOString());\n }\n\n query += ' ORDER BY pinned DESC, priority DESC, updated_at DESC';\n\n if (params.limit) {\n query += ' LIMIT ?';\n bindings.push(params.limit);\n }\n\n const result = await db\n .prepare(query)\n .bind(...bindings)\n .all<WorkingMemory>();\n\n return result.results;\n}\n\nexport async function updateMemory(\n db: DatabaseAdapter,\n sessionId: string,\n key: string,\n updates: {\n content?: string;\n priority?: number;\n pinned?: boolean;\n expires_at?: string | null;\n metadata?: Record<string, unknown>;\n }\n): Promise<boolean> {\n const now = new Date().toISOString();\n const setParts: string[] = ['updated_at = ?'];\n const bindings: (string | number | null)[] = [now];\n\n if (updates.content !== undefined) {\n setParts.push('content = ?');\n bindings.push(updates.content);\n }\n\n if (updates.priority !== undefined) {\n setParts.push('priority = ?');\n bindings.push(updates.priority);\n }\n\n if (updates.pinned !== undefined) {\n setParts.push('pinned = ?');\n bindings.push(updates.pinned ? 1 : 0);\n }\n\n if (updates.expires_at !== undefined) {\n setParts.push('expires_at = ?');\n bindings.push(updates.expires_at);\n }\n\n if (updates.metadata !== undefined) {\n setParts.push('metadata = ?');\n bindings.push(JSON.stringify(updates.metadata));\n }\n\n bindings.push(sessionId, key);\n\n const result = await db\n .prepare(`UPDATE working_memory SET ${setParts.join(', ')} WHERE session_id = ? AND key = ?`)\n .bind(...bindings)\n .run();\n\n return result.meta.changes > 0;\n}\n\nexport async function clearMemory(\n db: DatabaseAdapter,\n sessionId: string,\n params: {\n key?: string;\n category?: MemoryCategory;\n clear_all?: boolean;\n } = {}\n): Promise<number> {\n if (params.key) {\n // Clear specific key\n const result = await db\n .prepare('DELETE FROM working_memory WHERE session_id = ? AND key = ?')\n .bind(sessionId, params.key)\n .run();\n return result.meta.changes;\n }\n\n if (params.category) {\n // Clear entire category\n const result = await db\n .prepare('DELETE FROM working_memory WHERE session_id = ? AND category = ?')\n .bind(sessionId, params.category)\n .run();\n return result.meta.changes;\n }\n\n if (params.clear_all) {\n // Clear all memory for session\n const result = await db\n .prepare('DELETE FROM working_memory WHERE session_id = ?')\n .bind(sessionId)\n .run();\n return result.meta.changes;\n }\n\n return 0;\n}\n\nexport async function pinMemory(\n db: DatabaseAdapter,\n sessionId: string,\n key: string,\n pinned: boolean\n): Promise<boolean> {\n const now = new Date().toISOString();\n\n const result = await db\n .prepare('UPDATE working_memory SET pinned = ?, updated_at = ? WHERE session_id = ? AND key = ?')\n .bind(pinned ? 1 : 0, now, sessionId, key)\n .run();\n\n return result.meta.changes > 0;\n}\n\nexport async function cleanupExpiredMemory(\n db: DatabaseAdapter\n): Promise<number> {\n const now = new Date().toISOString();\n\n const result = await db\n .prepare('DELETE FROM working_memory WHERE expires_at IS NOT NULL AND expires_at < ?')\n .bind(now)\n .run();\n\n return result.meta.changes;\n}\n\nexport async function getMemoryStats(\n db: DatabaseAdapter,\n sessionId: string\n): Promise<{\n total: number;\n by_category: Record<string, number>;\n pinned_count: number;\n}> {\n const totalResult = await db\n .prepare('SELECT COUNT(*) as count FROM working_memory WHERE session_id = ?')\n .bind(sessionId)\n .first<{ count: number }>();\n\n const categoryResult = await db\n .prepare(\n `SELECT category, COUNT(*) as count\n FROM working_memory\n WHERE session_id = ?\n GROUP BY category`\n )\n .bind(sessionId)\n .all<{ category: string; count: number }>();\n\n const pinnedResult = await db\n .prepare('SELECT COUNT(*) as count FROM working_memory WHERE session_id = ? AND pinned = 1')\n .bind(sessionId)\n .first<{ count: number }>();\n\n const byCategory: Record<string, number> = {};\n for (const row of categoryResult.results) {\n byCategory[row.category] = row.count;\n }\n\n return {\n total: totalResult?.count ?? 0,\n by_category: byCategory,\n pinned_count: pinnedResult?.count ?? 0,\n };\n}\n\n/**\n * Get all pinned and high-priority memories for injection into context.\n * This is the main function used for automatic context restoration.\n */\nexport async function getActiveMemories(\n db: DatabaseAdapter,\n sessionId: string,\n params: {\n priority_threshold?: number;\n max_items?: number;\n } = {}\n): Promise<WorkingMemory[]> {\n const threshold = params.priority_threshold ?? 70;\n const limit = params.max_items ?? 20;\n const now = new Date().toISOString();\n\n const result = await db\n .prepare(\n `SELECT * FROM working_memory\n WHERE session_id = ?\n AND (pinned = 1 OR priority >= ?)\n AND (expires_at IS NULL OR expires_at > ?)\n ORDER BY pinned DESC, priority DESC, updated_at DESC\n LIMIT ?`\n )\n .bind(sessionId, threshold, now, limit)\n .all<WorkingMemory>();\n\n return result.results;\n}\n\n// ============ Phase 3: Plan & File Protection ============\n\nexport type PlanStatus = 'draft' | 'approved' | 'in_progress' | 'completed' | 'archived';\n\nexport interface PlanInfo {\n file_path: string;\n title: string;\n status: PlanStatus;\n content_summary: string;\n created_at: string;\n updated_at: string;\n completed_at?: string;\n}\n\n/**\n * Register a plan document for protection.\n * Plans are automatically pinned and have high priority.\n */\nexport async function registerPlan(\n db: DatabaseAdapter,\n sessionId: string,\n params: {\n file_path: string;\n title: string;\n content_summary: string;\n status?: PlanStatus;\n }\n): Promise<WorkingMemory> {\n const key = `plan:${params.file_path}`;\n const status = params.status ?? 'draft';\n\n return saveMemory(db, sessionId, {\n category: 'important',\n key,\n content: `[PLAN] ${params.title}\\nStatus: ${status}\\n\\n${params.content_summary}`,\n priority: 95, // Very high priority for plans\n pinned: true,\n metadata: {\n type: 'plan',\n file_path: params.file_path,\n title: params.title,\n status,\n },\n });\n}\n\n/**\n * Update plan status (e.g., draft → approved → in_progress → completed)\n */\nexport async function updatePlanStatus(\n db: DatabaseAdapter,\n sessionId: string,\n filePath: string,\n newStatus: PlanStatus,\n summary?: string\n): Promise<boolean> {\n const key = `plan:${filePath}`;\n\n // Get current memory\n const memories = await recallMemory(db, sessionId, { key });\n if (memories.length === 0) return false;\n\n const current = memories[0];\n let metadata: Record<string, unknown> = {};\n try {\n metadata = current.metadata ? JSON.parse(current.metadata) : {};\n } catch {\n // Fallback to empty object if metadata is corrupted - safe default\n }\n\n metadata.status = newStatus;\n if (newStatus === 'completed') {\n metadata.completed_at = new Date().toISOString();\n }\n\n // Adjust priority based on status\n let priority = 95;\n let pinned = true;\n if (newStatus === 'completed') {\n priority = 50; // Reduce priority but keep in memory\n pinned = false;\n } else if (newStatus === 'archived') {\n priority = 30; // Low priority for archived\n pinned = false;\n }\n\n const updatedContent = summary\n ? `[PLAN] ${metadata.title}\\nStatus: ${newStatus}\\n\\n${summary}`\n : current.content.replace(/Status: \\w+/, `Status: ${newStatus}`);\n\n return updateMemory(db, sessionId, key, {\n content: updatedContent,\n priority,\n pinned,\n metadata,\n });\n}\n\n/**\n * Get plan info by file path\n */\nexport async function getPlan(\n db: DatabaseAdapter,\n sessionId: string,\n filePath: string\n): Promise<PlanInfo | null> {\n const key = `plan:${filePath}`;\n const memories = await recallMemory(db, sessionId, { key });\n\n if (memories.length === 0) return null;\n\n const memory = memories[0];\n let metadata: Record<string, unknown> = {};\n try {\n metadata = memory.metadata ? JSON.parse(memory.metadata) : {};\n } catch {\n // Fallback to empty object if metadata is corrupted - safe default\n }\n\n return {\n file_path: filePath,\n title: (metadata.title as string) ?? 'Untitled Plan',\n status: (metadata.status as PlanStatus) ?? 'draft',\n content_summary: memory.content,\n created_at: memory.created_at,\n updated_at: memory.updated_at,\n completed_at: metadata.completed_at as string | undefined,\n };\n}\n\n/**\n * List all plans for a session\n */\nexport async function listPlans(\n db: DatabaseAdapter,\n sessionId: string,\n params: {\n status?: PlanStatus;\n include_archived?: boolean;\n } = {}\n): Promise<PlanInfo[]> {\n const now = new Date().toISOString();\n\n let query = `\n SELECT * FROM working_memory\n WHERE session_id = ?\n AND key LIKE 'plan:%'\n AND (expires_at IS NULL OR expires_at > ?)\n `;\n const bindings: (string | number)[] = [sessionId, now];\n\n if (params.status) {\n query += ` AND json_extract(metadata, '$.status') = ?`;\n bindings.push(params.status);\n }\n\n if (!params.include_archived) {\n query += ` AND json_extract(metadata, '$.status') != 'archived'`;\n }\n\n query += ' ORDER BY pinned DESC, priority DESC, updated_at DESC';\n\n const result = await db.prepare(query).bind(...bindings).all<WorkingMemory>();\n\n return result.results.map((memory) => {\n let metadata: Record<string, unknown> = {};\n try {\n metadata = memory.metadata ? JSON.parse(memory.metadata) : {};\n } catch {\n // Fallback to empty object if metadata is corrupted - safe default\n }\n\n return {\n file_path: (metadata.file_path as string) ?? memory.key.replace('plan:', ''),\n title: (metadata.title as string) ?? 'Untitled Plan',\n status: (metadata.status as PlanStatus) ?? 'draft',\n content_summary: memory.content,\n created_at: memory.created_at,\n updated_at: memory.updated_at,\n completed_at: metadata.completed_at as string | undefined,\n };\n });\n}\n\n/**\n * Register a file created in this session for protection.\n */\nexport async function registerCreatedFile(\n db: DatabaseAdapter,\n sessionId: string,\n params: {\n file_path: string;\n file_type?: 'plan' | 'code' | 'config' | 'doc' | 'other';\n description?: string;\n }\n): Promise<WorkingMemory> {\n const key = `created_file:${params.file_path}`;\n const fileType = params.file_type ?? 'other';\n\n // Plans get higher priority\n const priority = fileType === 'plan' ? 90 : 70;\n const pinned = fileType === 'plan';\n\n return saveMemory(db, sessionId, {\n category: 'state',\n key,\n content: `Created file: ${params.file_path}${params.description ? `\\n${params.description}` : ''}`,\n priority,\n pinned,\n metadata: {\n type: 'created_file',\n file_path: params.file_path,\n file_type: fileType,\n created_at: new Date().toISOString(),\n },\n });\n}\n\n/**\n * Get all files created in this session\n */\nexport async function getCreatedFiles(\n db: DatabaseAdapter,\n sessionId: string\n): Promise<Array<{ file_path: string; file_type: string; created_at: string }>> {\n const result = await db\n .prepare(\n `SELECT * FROM working_memory\n WHERE session_id = ?\n AND key LIKE 'created_file:%'\n ORDER BY created_at DESC`\n )\n .bind(sessionId)\n .all<WorkingMemory>();\n\n return result.results.map((memory) => {\n let metadata: Record<string, unknown> = {};\n try {\n metadata = memory.metadata ? JSON.parse(memory.metadata) : {};\n } catch {\n // Fallback to empty object if metadata is corrupted - safe default\n }\n\n return {\n file_path: (metadata.file_path as string) ?? memory.key.replace('created_file:', ''),\n file_type: (metadata.file_type as string) ?? 'other',\n created_at: (metadata.created_at as string) ?? memory.created_at,\n };\n });\n}\n\n/**\n * Check if a file is protected (either a plan or created in this session)\n */\nexport async function isFileProtected(\n db: DatabaseAdapter,\n sessionId: string,\n filePath: string\n): Promise<{\n protected: boolean;\n reason?: 'plan' | 'created_file';\n details?: PlanInfo | { file_type: string; created_at: string };\n}> {\n // Check if it's a plan\n const plan = await getPlan(db, sessionId, filePath);\n if (plan && plan.status !== 'archived') {\n return {\n protected: true,\n reason: 'plan',\n details: plan,\n };\n }\n\n // Check if it's a created file\n const createdFiles = await getCreatedFiles(db, sessionId);\n const createdFile = createdFiles.find((f) => f.file_path === filePath);\n if (createdFile) {\n return {\n protected: true,\n reason: 'created_file',\n details: {\n file_type: createdFile.file_type,\n created_at: createdFile.created_at,\n },\n };\n }\n\n return { protected: false };\n}\n\n/**\n * Get all protected files in a session\n */\nexport async function getProtectedFiles(\n db: DatabaseAdapter,\n sessionId: string\n): Promise<Array<{\n file_path: string;\n protection_type: 'plan' | 'created_file';\n priority: number;\n pinned: boolean;\n}>> {\n const result = await db\n .prepare(\n `SELECT * FROM working_memory\n WHERE session_id = ?\n AND (key LIKE 'plan:%' OR key LIKE 'created_file:%')\n AND (\n json_extract(metadata, '$.status') IS NULL\n OR json_extract(metadata, '$.status') != 'archived'\n )\n ORDER BY priority DESC, pinned DESC`\n )\n .bind(sessionId)\n .all<WorkingMemory>();\n\n return result.results.map((memory) => {\n let metadata: Record<string, unknown> = {};\n try {\n metadata = memory.metadata ? JSON.parse(memory.metadata) : {};\n } catch {\n // Fallback to empty object if metadata is corrupted - safe default\n }\n\n const isPlan = memory.key.startsWith('plan:');\n return {\n file_path: (metadata.file_path as string) ?? memory.key.replace(/^(plan|created_file):/, ''),\n protection_type: isPlan ? 'plan' : 'created_file',\n priority: memory.priority,\n pinned: memory.pinned === 1,\n };\n });\n}\n","// Database types for Session Collaboration MCP\n\nexport type SessionStatus = 'active' | 'inactive' | 'terminated';\nexport type ClaimStatus = 'active' | 'completed' | 'abandoned';\nexport type ClaimScope = 'small' | 'medium' | 'large';\nexport type DecisionCategory = 'architecture' | 'naming' | 'api' | 'database' | 'ui' | 'other';\n\n// Audit history types\nexport type AuditAction =\n | 'session_started'\n | 'session_ended'\n | 'claim_created'\n | 'claim_released'\n | 'conflict_detected'\n | 'queue_joined'\n | 'queue_left'\n | 'priority_changed';\n\nexport type AuditEntityType = 'session' | 'claim' | 'queue';\n\nexport interface AuditHistoryEntry {\n id: string;\n session_id: string | null;\n action: AuditAction;\n entity_type: AuditEntityType;\n entity_id: string;\n metadata: string | null; // JSON string\n created_at: string;\n}\n\nexport interface AuditHistoryWithSession extends AuditHistoryEntry {\n session_name: string | null;\n}\n\nexport interface AuditMetadata {\n // Claim actions\n files?: string[];\n intent?: string;\n scope?: ClaimScope;\n priority?: number;\n status?: ClaimStatus | 'partial';\n auto_release?: boolean;\n partial?: boolean;\n files_remaining?: number;\n\n // Conflict actions\n conflicting_session_id?: string;\n conflicting_session_name?: string;\n\n // Queue actions\n position?: number;\n claim_id?: string;\n\n // Session actions\n project_root?: string;\n memory_count?: number;\n\n // Generic\n reason?: string;\n old_value?: unknown;\n new_value?: unknown;\n}\n\n// Priority levels for claims\nexport type PriorityLevel = 'critical' | 'high' | 'normal' | 'low';\n\nexport interface PriorityInfo {\n value: number;\n level: PriorityLevel;\n label: string;\n}\n\n// Helper function to get priority level from numeric value\nexport function getPriorityLevel(priority: number): PriorityInfo {\n if (priority >= 90) return { value: priority, level: 'critical', label: 'Critical (90-100)' };\n if (priority >= 70) return { value: priority, level: 'high', label: 'High (70-89)' };\n if (priority >= 40) return { value: priority, level: 'normal', label: 'Normal (40-69)' };\n return { value: priority, level: 'low', label: 'Low (0-39)' };\n}\n\nexport interface TodoItem {\n content: string;\n status: 'pending' | 'in_progress' | 'completed';\n}\n\n// Session configuration\nexport type ConflictMode = 'strict' | 'smart' | 'bypass';\n\nexport interface SessionConfig {\n mode: ConflictMode;\n allow_release_others: boolean;\n auto_release_stale: boolean;\n stale_threshold_hours: number;\n // Auto-release after edit completion\n auto_release_immediate: boolean;\n // Grace period before stale release (minutes)\n auto_release_delay_minutes: number;\n}\n\nexport const DEFAULT_SESSION_CONFIG: SessionConfig = {\n mode: 'smart',\n allow_release_others: false,\n auto_release_stale: false,\n stale_threshold_hours: 2,\n auto_release_immediate: false,\n auto_release_delay_minutes: 5,\n};\n\nexport interface SessionProgress {\n completed: number;\n total: number;\n percentage: number;\n}\n\nexport interface Session {\n id: string;\n name: string | null;\n project_root: string;\n machine_id: string | null;\n user_id: string | null;\n created_at: string;\n last_heartbeat: string;\n status: SessionStatus;\n current_task: string | null;\n progress: string | null; // JSON string of SessionProgress\n todos: string | null; // JSON string of TodoItem[]\n config: string | null; // JSON string of SessionConfig\n}\n\nexport interface Claim {\n id: string;\n session_id: string;\n intent: string;\n scope: ClaimScope;\n status: ClaimStatus;\n priority: number;\n created_at: string;\n updated_at: string;\n completed_summary: string | null;\n}\n\n// Symbol types for fine-grained conflict detection\nexport type SymbolType = 'function' | 'class' | 'method' | 'variable' | 'block' | 'other';\n\nexport interface ClaimSymbol {\n id: number;\n claim_id: string;\n file_path: string;\n symbol_name: string;\n symbol_type: SymbolType;\n created_at: string;\n}\n\n// Input format for claiming symbols\nexport interface SymbolClaim {\n file: string;\n symbols: string[];\n symbol_type?: SymbolType;\n}\n\n// Symbol reference for impact tracking\nexport interface SymbolReference {\n id: number;\n source_file: string;\n source_symbol: string;\n ref_file: string;\n ref_line: number | null;\n ref_context: string | null;\n session_id: string;\n created_at: string;\n}\n\n// Input format for storing references\nexport interface ReferenceInput {\n source_file: string;\n source_symbol: string;\n references: Array<{\n file: string;\n line: number;\n context?: string;\n }>;\n}\n\n// Impact analysis result\nexport interface ImpactInfo {\n symbol: string;\n file: string;\n affected_claims: Array<{\n claim_id: string;\n session_name: string | null;\n intent: string;\n affected_symbols: string[];\n }>;\n reference_count: number;\n affected_files: string[];\n}\n\nexport interface Message {\n id: string;\n from_session_id: string;\n to_session_id: string | null;\n content: string;\n read_at: string | null;\n created_at: string;\n}\n\nexport interface Decision {\n id: string;\n session_id: string;\n category: DecisionCategory | null;\n title: string;\n description: string;\n created_at: string;\n}\n\n// Extended types with joins\nexport interface ClaimWithFiles extends Claim {\n files: string[];\n session_name: string | null;\n}\n\nexport interface ConflictInfo {\n claim_id: string;\n session_id: string;\n session_name: string | null;\n file_path: string;\n intent: string;\n scope: ClaimScope;\n created_at: string;\n // Symbol-level conflict info (optional)\n symbol_name?: string;\n symbol_type?: SymbolType;\n conflict_level: 'file' | 'symbol';\n}\n\n// ============ Claim Queue Types ============\n\nexport interface QueueEntry {\n id: string;\n claim_id: string;\n session_id: string;\n intent: string;\n position: number;\n priority: number;\n scope: ClaimScope;\n estimated_wait_minutes: number | null;\n created_at: string;\n}\n\nexport interface QueueEntryWithDetails extends QueueEntry {\n session_name: string | null;\n claim_files: string[];\n claim_session_name: string | null;\n claim_intent: string;\n}\n\n// Scope to estimated minutes mapping\nexport const SCOPE_WAIT_MINUTES: Record<ClaimScope, number> = {\n small: 30,\n medium: 120, // 2 hours\n large: 480, // 8 hours\n};\n\n// ============ Notification Types ============\n\nexport type NotificationType = 'claim_released' | 'queue_ready' | 'conflict_detected' | 'session_message';\n\n// ============ Working Memory Types ============\n\nexport type MemoryCategory = 'finding' | 'decision' | 'state' | 'todo' | 'important' | 'context';\n\nexport interface WorkingMemory {\n id: number;\n session_id: string;\n category: MemoryCategory;\n key: string;\n content: string;\n priority: number;\n pinned: number; // 0 or 1 (SQLite boolean)\n created_at: string;\n updated_at: string;\n expires_at: string | null;\n related_claim_id: string | null;\n related_decision_id: string | null;\n metadata: string | null; // JSON string\n}\n\nexport interface WorkingMemoryInput {\n category: MemoryCategory;\n key: string;\n content: string;\n priority?: number;\n pinned?: boolean;\n expires_at?: string;\n related_claim_id?: string;\n related_decision_id?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface WorkingMemoryMetadata {\n // Common fields\n source?: string; // Where this memory came from\n file_path?: string; // Related file\n line_number?: number; // Related line\n\n // For findings\n confidence?: number; // 0-1 confidence level\n verified?: boolean;\n\n // For state tracking\n previous_value?: unknown;\n\n // Extensible\n [key: string]: unknown;\n}\n\nexport interface Notification {\n id: string;\n session_id: string;\n type: NotificationType;\n title: string;\n message: string;\n reference_type: string | null;\n reference_id: string | null;\n metadata: string | null; // JSON string\n read_at: string | null;\n created_at: string;\n}\n\nexport interface NotificationMetadata {\n // claim_released\n claim_id?: string;\n files?: string[];\n released_by?: string;\n\n // queue_ready\n queue_position?: number;\n\n // conflict_detected\n conflicting_session_id?: string;\n conflicting_session_name?: string;\n\n // session_message\n from_session_id?: string;\n from_session_name?: string;\n is_broadcast?: boolean;\n}\n","// Zod schemas for MCP tool input validation\nimport { z } from 'zod';\n\n// Common schemas\nexport const sessionIdSchema = z.string().min(1, 'session_id is required');\nexport const claimIdSchema = z.string().min(1, 'claim_id is required');\nexport const filePathSchema = z.string().min(1).refine(\n (path) => !path.includes('..') && !path.includes('\\0'),\n { message: 'Path cannot contain path traversal sequences (..) or null bytes' }\n);\nexport const filesArraySchema = z.array(filePathSchema).min(1, 'At least one file is required');\n\n// Symbol claim schema\nexport const symbolClaimSchema = z.object({\n file: z.string().min(1),\n symbols: z.array(z.string().min(1)).min(1),\n symbol_type: z.enum(['function', 'class', 'method', 'variable', 'block', 'other']).optional(),\n});\n\nexport const symbolClaimsArraySchema = z.array(symbolClaimSchema);\n\n// Claim scope schema\nexport const claimScopeSchema = z.enum(['small', 'medium', 'large']).default('medium');\n\n// Claim status schema\nexport const claimStatusSchema = z.enum(['completed', 'abandoned']);\n\n// Session tools input schemas\nexport const sessionStartSchema = z.object({\n project_root: z.string().min(1, 'project_root is required'),\n name: z.string().optional(),\n machine_id: z.string().optional(),\n});\n\nexport const sessionEndSchema = z.object({\n session_id: sessionIdSchema,\n release_claims: z.enum(['complete', 'abandon']).default('abandon'),\n});\n\nexport const sessionListSchema = z.object({\n include_inactive: z.boolean().optional(),\n project_root: z.string().optional(),\n});\n\nexport const sessionHeartbeatSchema = z.object({\n session_id: sessionIdSchema,\n current_task: z.string().optional(),\n todos: z.array(z.object({\n content: z.string(),\n status: z.enum(['pending', 'in_progress', 'completed']),\n })).optional(),\n});\n\nexport const statusUpdateSchema = z.object({\n session_id: sessionIdSchema,\n current_task: z.string().optional(),\n todos: z.array(z.object({\n content: z.string(),\n status: z.enum(['pending', 'in_progress', 'completed']),\n })).optional(),\n});\n\nexport const configSchema = z.object({\n session_id: sessionIdSchema,\n mode: z.enum(['strict', 'smart', 'bypass']).optional(),\n allow_release_others: z.boolean().optional(),\n auto_release_stale: z.boolean().optional(),\n stale_threshold_hours: z.number().min(0).optional(),\n auto_release_immediate: z.boolean().optional(),\n auto_release_delay_minutes: z.number().min(0).optional(),\n});\n\nexport const statusSchema = z.object({\n session_id: sessionIdSchema,\n});\n\n// Priority schema (0-100, default 50)\nexport const prioritySchema = z.number().min(0).max(100).default(50);\n\n// Claim tools input schemas\nexport const claimCreateSchema = z.object({\n session_id: sessionIdSchema,\n files: z.array(filePathSchema).optional(),\n symbols: symbolClaimsArraySchema.optional(),\n intent: z.string().min(1, 'intent is required'),\n scope: claimScopeSchema.optional(),\n priority: z.number().min(0).max(100).optional(),\n allow_conflicts: z.boolean().optional(),\n}).refine(\n (data) => (data.files && data.files.length > 0) || (data.symbols && data.symbols.length > 0),\n { message: 'Either files or symbols must be provided' }\n);\n\nexport const claimUpdatePrioritySchema = z.object({\n session_id: sessionIdSchema,\n claim_id: claimIdSchema,\n priority: z.number().min(0).max(100),\n reason: z.string().optional(),\n});\n\nexport const claimCheckSchema = z.object({\n files: filesArraySchema,\n symbols: symbolClaimsArraySchema.optional(),\n session_id: sessionIdSchema,\n exclude_self: z.boolean().optional(),\n});\n\nexport const claimReleaseSchema = z.object({\n session_id: sessionIdSchema,\n claim_id: claimIdSchema,\n status: claimStatusSchema.default('completed').optional(),\n summary: z.string().optional(),\n force: z.boolean().optional(),\n});\n\n// Auto-release schema for releasing claims by file path after edit\nexport const autoReleaseSchema = z.object({\n session_id: sessionIdSchema,\n file_path: z.string().min(1, 'file_path is required'),\n force: z.boolean().optional(),\n});\n\nexport const claimListSchema = z.object({\n session_id: z.string().optional(),\n status: z.enum(['active', 'completed', 'abandoned', 'all']).optional(),\n project_root: z.string().optional(),\n});\n\n// Helper function to validate and return parsed data or error result\nexport function validateInput<T>(\n schema: z.ZodSchema<T>,\n data: unknown\n): { success: true; data: T } | { success: false; error: string } {\n const result = schema.safeParse(data);\n if (result.success) {\n return { success: true, data: result.data };\n }\n const errors = result.error.errors.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ');\n return { success: false, error: errors };\n}\n","// Common response utilities for MCP tools\n// Reduces duplication and standardizes error handling\n\nimport type { McpToolResult } from '../mcp/protocol.js';\nimport { createToolResult } from '../mcp/protocol.js';\nimport type { DatabaseAdapter } from '../db/sqlite-adapter.js';\nimport type { Session } from '../db/types.js';\nimport { getSession } from '../db/queries.js';\n\n// Standard error codes used across tools\nexport const ERROR_CODES = {\n INVALID_INPUT: 'INVALID_INPUT',\n SESSION_NOT_FOUND: 'SESSION_NOT_FOUND',\n SESSION_INVALID: 'SESSION_INVALID',\n CLAIM_NOT_FOUND: 'CLAIM_NOT_FOUND',\n CLAIM_ALREADY_RELEASED: 'CLAIM_ALREADY_RELEASED',\n NOT_OWNER: 'NOT_OWNER',\n TARGET_SESSION_INVALID: 'TARGET_SESSION_INVALID',\n // Queue error codes\n QUEUE_ENTRY_NOT_FOUND: 'QUEUE_ENTRY_NOT_FOUND',\n ALREADY_IN_QUEUE: 'ALREADY_IN_QUEUE',\n CANNOT_QUEUE_OWN_CLAIM: 'CANNOT_QUEUE_OWN_CLAIM',\n // Notification error codes\n NOTIFICATION_NOT_FOUND: 'NOTIFICATION_NOT_FOUND',\n // Release error codes\n RELEASE_FAILED: 'RELEASE_FAILED',\n // Memory error codes\n MEMORY_NOT_FOUND: 'MEMORY_NOT_FOUND',\n UNKNOWN_TOOL: 'UNKNOWN_TOOL',\n} as const;\n\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n\n// Error response builder - reduces JSON.stringify boilerplate\nexport function errorResponse(code: ErrorCode, message: string, data?: Record<string, unknown>): McpToolResult {\n return createToolResult(\n JSON.stringify({ error: code, message, ...data }),\n true\n );\n}\n\n// Success response builder with optional pretty print\nexport function successResponse(data: Record<string, unknown>, prettyPrint = false): McpToolResult {\n return createToolResult(\n JSON.stringify(data, null, prettyPrint ? 2 : undefined)\n );\n}\n\n// Session validation result\nexport type SessionValidationResult =\n | { valid: true; session: Session }\n | { valid: false; error: McpToolResult };\n\n// Validate session exists and is active\nexport async function validateActiveSession(\n db: DatabaseAdapter,\n sessionId: string\n): Promise<SessionValidationResult> {\n const session = await getSession(db, sessionId);\n\n if (!session) {\n return {\n valid: false,\n error: errorResponse(ERROR_CODES.SESSION_NOT_FOUND, 'Session not found'),\n };\n }\n\n if (session.status !== 'active') {\n return {\n valid: false,\n error: errorResponse(ERROR_CODES.SESSION_INVALID, 'Session not found or inactive.'),\n };\n }\n\n return { valid: true, session };\n}\n\n// Validate session exists (regardless of status)\nexport async function validateSessionExists(\n db: DatabaseAdapter,\n sessionId: string\n): Promise<SessionValidationResult> {\n const session = await getSession(db, sessionId);\n\n if (!session) {\n return {\n valid: false,\n error: errorResponse(ERROR_CODES.SESSION_NOT_FOUND, 'Session not found'),\n };\n }\n\n return { valid: true, session };\n}\n\n// Common validation error response\nexport function validationError(message: string): McpToolResult {\n return errorResponse(ERROR_CODES.INVALID_INPUT, message);\n}\n","// Session management tools\n\nimport type { DatabaseAdapter } from '../../db/sqlite-adapter.js';\nimport type { McpTool, McpToolResult } from '../protocol.js';\nimport { createToolResult } from '../protocol.js';\nimport {\n createSession,\n listSessions,\n updateSessionConfig,\n updateSessionHeartbeat,\n endSession,\n cleanupStaleSessions,\n cleanupStaleClaims,\n listClaims,\n logAuditEvent,\n removeSessionFromAllQueues,\n getActiveMemories,\n recallMemory,\n saveMemory,\n getSession,\n} from '../../db/queries.js';\nimport type { SessionConfig } from '../../db/types.js';\nimport { DEFAULT_SESSION_CONFIG } from '../../db/types.js';\nimport {\n validateInput,\n sessionStartSchema,\n sessionEndSchema,\n sessionListSchema,\n configSchema,\n statusUpdateSchema,\n statusSchema,\n} from '../schemas.js';\nimport {\n errorResponse,\n successResponse,\n validationError,\n validateActiveSession,\n validateSessionExists,\n ERROR_CODES,\n} from '../../utils/response.js';\nimport { getPriorityLevel } from '../../db/types.js';\n\nfunction parseJsonField<T>(value: string | null): T | null {\n if (!value) return null;\n try {\n return JSON.parse(value) as T;\n } catch {\n return null;\n }\n}\n\nexport const sessionTools: McpTool[] = [\n {\n name: 'collab_session_start',\n description: 'Start a new session. Call this when starting work.',\n inputSchema: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: \"Optional session name, e.g., 'frontend-refactor'\",\n },\n project_root: {\n type: 'string',\n description: 'Project root directory path',\n },\n },\n required: ['project_root'],\n },\n },\n {\n name: 'collab_session_end',\n description: 'End session and release all claims.',\n inputSchema: {\n type: 'object',\n properties: {\n session_id: {\n type: 'string',\n description: 'Session ID to end',\n },\n release_claims: {\n type: 'string',\n enum: ['complete', 'abandon'],\n description: 'How to handle unreleased claims',\n },\n },\n required: ['session_id'],\n },\n },\n {\n name: 'collab_session_list',\n description: 'List all active sessions.',\n inputSchema: {\n type: 'object',\n properties: {\n include_inactive: {\n type: 'boolean',\n description: 'Include inactive sessions',\n },\n project_root: {\n type: 'string',\n description: 'Filter by project root',\n },\n },\n },\n },\n {\n name: 'collab_session_update',\n description: 'Update session heartbeat, current task, todos, and progress.',\n inputSchema: {\n type: 'object',\n properties: {\n session_id: {\n type: 'string',\n description: 'Session ID to update',\n },\n current_task: {\n type: 'string',\n description: 'Current work summary',\n },\n todos: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n content: { type: 'string' },\n status: {\n type: 'string',\n enum: ['pending', 'in_progress', 'completed'],\n },\n },\n required: ['content', 'status'],\n },\n description: 'Current todo state for progress reporting',\n },\n },\n required: ['session_id'],\n },\n },\n {\n name: 'collab_config',\n description: 'Configure session behavior.',\n inputSchema: {\n type: 'object',\n properties: {\n session_id: {\n type: 'string',\n description: 'Your session ID',\n },\n mode: {\n type: 'string',\n enum: ['strict', 'smart', 'bypass'],\n description: 'Conflict handling mode',\n },\n allow_release_others: {\n type: 'boolean',\n description: 'Allow releasing other sessions claims',\n },\n },\n required: ['session_id'],\n },\n },\n {\n name: 'collab_status',\n description: 'Get current session status.',\n inputSchema: {\n type: 'object',\n properties: {\n session_id: {\n type: 'string',\n description: 'Session ID to check',\n },\n },\n required: ['session_id'],\n },\n },\n];\n\nexport async function handleSessionTool(\n db: DatabaseAdapter,\n name: string,\n args: Record<string, unknown>,\n userId?: string\n): Promise<McpToolResult> {\n switch (name) {\n case 'collab_session_start': {\n const validation = validateInput(sessionStartSchema, args);\n if (!validation.success) {\n return validationError(validation.error);\n }\n const input = validation.data;\n\n // Cleanup stale sessions and claims\n await cleanupStaleSessions(db, 30);\n await cleanupStaleClaims(db);\n\n const session = await createSession(db, {\n name: input.name,\n project_root: input.project_root,\n machine_id: input.machine_id,\n user_id: userId,\n });\n\n await logAuditEvent(db, {\n session_id: session.id,\n action: 'session_started',\n entity_type: 'session',\n entity_id: session.id,\n metadata: { project_root: input.project_root },\n });\n\n const activeSessions = await listSessions(db, { project_root: input.project_root, user_id: userId });\n\n // Load active memories from all sessions\n const allMemories: Array<{\n category: string;\n key: string;\n content: string;\n }> = [];\n\n for (const otherSession of activeSessions) {\n const memories = await getActiveMemories(db, otherSession.id, {\n priority_threshold: 70,\n max_items: 10\n });\n for (const mem of memories) {\n allMemories.push({\n category: mem.category,\n key: mem.key,\n content: mem.content,\n });\n }\n }\n\n return successResponse({\n session_id: session.id,\n name: session.name,\n active_sessions: activeSessions.length,\n restored_context: allMemories.length > 0 ? allMemories.slice(0, 15) : null,\n message: `Session started. ${activeSessions.length} active session(s).`,\n });\n }\n\n case 'collab_session_end': {\n const validation = validateInput(sessionEndSchema, args);\n if (!validation.success) {\n return validationError(validation.error);\n }\n const input = validation.data;\n\n const sessionResult = await validateSessionExists(db, input.session_id);\n if (!sessionResult.valid) {\n return sessionResult.error;\n }\n\n const activeClaims = await listClaims(db, { session_id: input.session_id, status: 'active' });\n const memories = await recallMemory(db, input.session_id, {});\n\n // Save session summary\n if (memories.length > 0) {\n const findings = memories.filter(m => m.category === 'finding').map(m => m.content);\n const decisions = memories.filter(m => m.category === 'decision').map(m => m.content);\n\n const summaryContent = [\n `Session: ${sessionResult.session.name || input.session_id}`,\n `Ended: ${new Date().toISOString()}`,\n findings.length > 0 ? `\\nFindings:\\n- ${findings.slice(0, 5).join('\\n- ')}` : '',\n decisions.length > 0 ? `\\nDecisions:\\n- ${decisions.slice(0, 5).join('\\n- ')}` : '',\n ].filter(Boolean).join('\\n');\n\n await saveMemory(db, input.session_id, {\n category: 'context',\n key: 'session_summary',\n content: summaryContent,\n priority: 80,\n pinned: true,\n });\n }\n\n await removeSessionFromAllQueues(db, input.session_id);\n await endSession(db, input.session_id, input.release_claims);\n\n await logAuditEvent(db, {\n session_id: input.session_id,\n action: 'session_ended',\n entity_type: 'session',\n entity_id: input.session_id,\n });\n\n return successResponse({\n success: true,\n claims_released: activeClaims.length,\n memories_saved: memories.length,\n message: `Session ended. ${activeClaims.length} claim(s) released.`,\n });\n }\n\n case 'collab_session_list': {\n const validation = validateInput(sessionListSchema, args);\n if (!validation.success) {\n return validationError(validation.error);\n }\n const input = validation.data;\n\n const sessions = await listSessions(db, {\n include_inactive: input.include_inactive,\n project_root: input.project_root,\n });\n\n const sessionsWithClaims = await Promise.all(\n sessions.map(async (session) => {\n const claims = await listClaims(db, { session_id: session.id, status: 'active' });\n return {\n id: session.id,\n name: session.name,\n status: session.status,\n current_task: session.current_task,\n progress: parseJsonField(session.progress),\n todos: parseJsonField(session.todos),\n active_claims: claims.length,\n claims: claims.map(c => ({\n id: c.id,\n files: c.files,\n intent: c.intent,\n priority: getPriorityLevel(c.priority),\n created_at: c.created_at,\n })),\n last_heartbeat: session.last_heartbeat,\n };\n })\n );\n\n return successResponse({\n sessions: sessionsWithClaims,\n total: sessionsWithClaims.length,\n });\n }\n\n case 'collab_session_update': {\n const validation = validateInput(statusUpdateSchema, args);\n if (!validation.success) {\n return validationError(validation.error);\n }\n const input = validation.data;\n\n const sessionResult = await validateActiveSession(db, input.session_id);\n if (!sessionResult.valid) {\n return sessionResult.error;\n }\n\n const updated = await updateSessionHeartbeat(db, input.session_id, {\n current_task: input.current_task,\n todos: input.todos,\n });\n if (!updated) {\n return errorResponse(ERROR_CODES.SESSION_NOT_FOUND, 'Session not found');\n }\n\n const session = await getSession(db, input.session_id);\n\n return successResponse({\n success: true,\n session_id: input.session_id,\n current_task: session?.current_task ?? null,\n progress: parseJsonField(session?.progress ?? null),\n todos: parseJsonField(session?.todos ?? null),\n last_heartbeat: session?.last_heartbeat ?? null,\n message: 'Session updated.',\n });\n }\n\n case 'collab_config': {\n const validation = validateInput(configSchema, args);\n if (!validation.success) {\n return validationError(validation.error);\n }\n const input = validation.data;\n\n const sessionResult = await validateActiveSession(db, input.session_id);\n if (!sessionResult.valid) {\n return sessionResult.error;\n }\n const { session } = sessionResult;\n\n let currentConfig: SessionConfig = DEFAULT_SESSION_CONFIG;\n if (session.config) {\n try {\n currentConfig = { ...DEFAULT_SESSION_CONFIG, ...JSON.parse(session.config) };\n } catch {\n // Use default\n }\n }\n\n const newConfig: SessionConfig = {\n mode: input.mode ?? currentConfig.mode,\n allow_release_others: input.allow_release_others ?? currentConfig.allow_release_others,\n auto_release_stale: input.auto_release_stale ?? currentConfig.auto_release_stale,\n stale_threshold_hours: input.stale_threshold_hours ?? currentConfig.stale_threshold_hours,\n auto_release_immediate: input.auto_release_immediate ?? currentConfig.auto_release_immediate,\n auto_release_delay_minutes: input.auto_release_delay_minutes ?? currentConfig.auto_release_delay_minutes,\n };\n\n await updateSessionConfig(db, input.session_id, newConfig);\n\n return successResponse({\n success: true,\n config: newConfig,\n message: 'Configuration updated.',\n });\n }\n\n case 'collab_status': {\n const validation = validateInput(statusSchema, args);\n if (!validation.success) {\n return validationError(validation.error);\n }\n const { session_id: sessionId } = validation.data;\n\n const session = await getSession(db, sessionId);\n if (!session) {\n return errorResponse(ERROR_CODES.SESSION_NOT_FOUND, 'Session not found');\n }\n\n const claims = await listClaims(db, { session_id: sessionId, status: 'active' });\n const memories = await getActiveMemories(db, sessionId, { priority_threshold: 70, max_items: 10 });\n const allSessions = await listSessions(db, { project_root: session.project_root });\n\n return successResponse({\n session: {\n id: session.id,\n name: session.name,\n status: session.status,\n },\n claims: claims.map(c => ({\n id: c.id,\n files: c.files,\n intent: c.intent,\n })),\n active_memories: memories.length,\n other_sessions: allSessions.filter(s => s.id !== sessionId).length,\n message: `Session active. ${claims.length} claim(s), ${memories.length} memories.`,\n });\n }\n\n default:\n return createToolResult(`Unknown session tool: ${name}`, true);\n }\n}\n","// Claim management tools (unified action-based)\n\nimport type { DatabaseAdapter } from '../../db/sqlite-adapter.js';\nimport type { McpTool, McpToolResult } from '../protocol.js';\nimport { createToolResult } from '../protocol.js';\nimport type { SessionConfig } from '../../db/types.js';\nimport { DEFAULT_SESSION_CONFIG } from '../../db/types.js';\nimport { createClaim, getClaim, listClaims, checkConflicts, releaseClaim, getSession, logAuditEvent, saveMemory, clearMemory } from '../../db/queries.js';\nimport { getPriorityLevel } from '../../db/types.js';\nimport {\n validateInput,\n claimCreateSchema,\n claimCheckSchema,\n claimReleaseSchema,\n claimListSchema,\n} from '../schemas.js';\nimport {\n errorResponse,\n successResponse,\n validationError,\n validateActiveSession,\n ERROR_CODES,\n} from '../../utils/response.js';\n\nexport const claimTools: McpTool[] = [\n {\n name: 'collab_claim',\n description: `Unified tool for file/symbol claims. Use action parameter to:\n- \"create\": Declare files you're about to modify\n- \"check\": Check if files are being worked on (ALWAYS call before editing)\n- \"release\": Release a claim when done\n- \"list\": List all active claims`,\n inputSchema: {\n type: 'object',\n properties: {\n action: {\n type: 'string',\n enum: ['create', 'check', 'release', 'list'],\n description: 'Action to perform',\n },\n session_id: {\n type: 'string',\n description: 'Your session ID',\n },\n files: {\n type: 'array',\n items: { type: 'string' },\n description: 'File paths (for create/check actions)',\n },\n exclude_self: {\n type: 'boolean',\n description: 'Exclude your own claims when checking (for check action)',\n },\n symbols: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n file: { type: 'string' },\n symbols: { type: 'array', items: { type: 'string' } },\n symbol_type: {\n type: 'string',\n enum: ['function', 'class', 'method', 'variable', 'block', 'other'],\n },\n },\n required: ['file', 'symbols'],\n },\n description: 'Symbol claims (for create/check actions)',\n },\n intent: {\n type: 'string',\n description: 'What you plan to do (for create action)',\n },\n scope: {\n type: 'string',\n enum: ['small', 'medium', 'large'],\n description: 'Scope estimate (for create action)',\n },\n priority: {\n type: 'number',\n description: 'Priority 0-100 (for create action)',\n },\n claim_id: {\n type: 'string',\n description: 'Claim ID (for release action)',\n },\n status: {\n type: 'string',\n enum: ['completed', 'abandoned'],\n description: 'Release status (for release action)',\n },\n force: {\n type: 'boolean',\n description: 'Force release even if not owner (for release action)',\n },\n allow_conflicts: {\n type: 'boolean',\n description: 'Explicitly create a claim even when conflicts are detected (for create action)',\n },\n summary: {\n type: 'string',\n description: 'Release summary (for release action)',\n },\n project_root: {\n type: 'string',\n description: 'Filter by project root (for list action)',\n },\n },\n required: ['action', 'session_id'],\n },\n },\n];\n\nexport async function handleClaimTool(\n db: DatabaseAdapter,\n name: string,\n args: Record<string, unknown>\n): Promise<McpToolResult> {\n if (name !== 'collab_claim') {\n return createToolResult(`Unknown tool: ${name}`, true);\n }\n\n const action = args.action as string;\n const sessionId = args.session_id as string;\n\n if (!action || !sessionId) {\n return validationError('action and session_id are required');\n }\n\n switch (action) {\n case 'create': {\n const validation = validateInput(claimCreateSchema, args);\n if (!validation.success) {\n return validationError(validation.error);\n }\n const input = validation.data;\n\n // Verify session exists and is active\n const sessionResult = await validateActiveSession(db, input.session_id);\n if (!sessionResult.valid) {\n return sessionResult.error;\n }\n\n const symbolFiles = (input.symbols ?? []).map((symbol) => symbol.file);\n const files = Array.from(new Set([...(input.files ?? []), ...symbolFiles]));\n\n const conflicts = await checkConflicts(db, files, input.session_id, input.symbols);\n if (conflicts.length > 0 && !input.allow_conflicts) {\n return successResponse({\n success: false,\n status: 'blocked_by_conflicts',\n files,\n symbols: input.symbols ?? [],\n conflicts: conflicts.map(c => ({\n session_name: c.session_name,\n file: c.file_path,\n intent: c.intent,\n })),\n message: `Claim not created. ${conflicts.length} conflict(s) detected. Coordinate before proceeding.`,\n });\n }\n\n const { claim } = await createClaim(db, {\n session_id: input.session_id,\n files,\n symbols: input.symbols,\n intent: input.intent,\n scope: input.scope,\n priority: input.priority,\n });\n\n // Log audit event\n await logAuditEvent(db, {\n session_id: input.session_id,\n action: 'claim_created',\n entity_type: 'claim',\n entity_id: claim.id,\n metadata: { files, intent: input.intent },\n });\n\n // Auto-save to memory\n await saveMemory(db, input.session_id, {\n category: 'state',\n key: `claim_${claim.id}`,\n content: `Working on: ${input.intent}\\nFiles: ${files.join(', ')}`,\n priority: 60,\n related_claim_id: claim.id,\n metadata: { claim_id: claim.id, files },\n });\n\n if (conflicts.length > 0) {\n return successResponse({\n success: true,\n claim_id: claim.id,\n status: 'created_with_conflicts',\n files,\n symbols: input.symbols ?? [],\n conflicts: conflicts.map(c => ({\n session_name: c.session_name,\n file: c.file_path,\n intent: c.intent,\n })),\n warning: `⚠️ ${conflicts.length} conflict(s) detected. Coordinate before proceeding.`,\n });\n }\n\n return successResponse({\n success: true,\n claim_id: claim.id,\n status: 'created',\n files,\n symbols: input.symbols ?? [],\n intent: input.intent,\n message: 'Claim created successfully.',\n });\n }\n\n case 'check': {\n const validation = validateInput(claimCheckSchema, args);\n if (!validation.success) {\n return validationError(validation.error);\n }\n const input = validation.data;\n\n if (!input.session_id) {\n return validationError('session_id is required');\n }\n\n const excludeSelf = input.exclude_self ?? true;\n const excludeSessionId = excludeSelf ? input.session_id : undefined;\n const conflicts = await checkConflicts(db, input.files, excludeSessionId, input.symbols);\n\n if (conflicts.length === 0) {\n return successResponse({\n safe: true,\n has_conflicts: false,\n can_edit: true,\n recommendation: 'proceed',\n safe_files: input.files,\n conflicts: [],\n message: 'All files are safe to edit. Proceed.',\n });\n }\n\n const blockedFiles = new Set(conflicts.map(c => c.file_path));\n const safeFiles = input.files.filter(f => !blockedFiles.has(f));\n\n return successResponse({\n safe: false,\n has_conflicts: true,\n can_edit: safeFiles.length > 0,\n recommendation: safeFiles.length > 0 ? 'proceed_safe_only' : 'abort',\n safe_files: safeFiles,\n blocked_files: Array.from(blockedFiles),\n conflicts: conflicts.map(c => ({\n session_name: c.session_name,\n file: c.file_path,\n intent: c.intent,\n })),\n message: safeFiles.length > 0\n ? `Edit ONLY safe files: [${safeFiles.join(', ')}]. Skip blocked files.`\n : 'All files blocked. Coordinate with other session(s).',\n });\n }\n\n case 'release': {\n const validation = validateInput(claimReleaseSchema, args);\n if (!validation.success) {\n return validationError(validation.error);\n }\n const input = validation.data;\n const status = input.status ?? 'completed';\n const force = input.force;\n\n const claim = await getClaim(db, input.claim_id);\n if (!claim) {\n return errorResponse(ERROR_CODES.CLAIM_NOT_FOUND, 'Claim not found');\n }\n\n // Check ownership\n if (claim.session_id !== input.session_id && !force) {\n const callerSession = await getSession(db, input.session_id);\n let config: SessionConfig = DEFAULT_SESSION_CONFIG;\n if (callerSession?.config) {\n try {\n config = { ...DEFAULT_SESSION_CONFIG, ...JSON.parse(callerSession.config) };\n } catch {\n // Use default\n }\n }\n\n if (!config.allow_release_others) {\n return errorResponse(\n ERROR_CODES.NOT_OWNER,\n `Not your claim. Owner: ${claim.session_name}. Use force=true to override.`\n );\n }\n }\n\n if (claim.status !== 'active') {\n return errorResponse(ERROR_CODES.CLAIM_ALREADY_RELEASED, `Claim already ${claim.status}`);\n }\n\n await releaseClaim(db, input.claim_id, {\n status: status as 'completed' | 'abandoned',\n summary: input.summary,\n });\n\n await logAuditEvent(db, {\n session_id: input.session_id,\n action: 'claim_released',\n entity_type: 'claim',\n entity_id: input.claim_id,\n metadata: { status: status as 'completed' | 'abandoned', files: claim.files },\n });\n\n await clearMemory(db, claim.session_id, { key: `claim_${input.claim_id}` });\n\n return successResponse({\n success: true,\n claim_id: input.claim_id,\n files: claim.files,\n message: `Claim ${status} released. Files now available.`,\n });\n }\n\n case 'list': {\n const validation = validateInput(claimListSchema, args);\n if (!validation.success) {\n return validationError(validation.error);\n }\n const input = validation.data;\n\n if (!input.session_id) {\n return validationError('session_id is required');\n }\n\n const claims = await listClaims(db, {\n session_id: input.session_id,\n status: input.status ?? 'active',\n project_root: input.project_root,\n });\n\n return successResponse({\n claims: claims.map(c => ({\n id: c.id,\n session_name: c.session_name,\n files: c.files,\n intent: c.intent,\n priority: getPriorityLevel(c.priority),\n created_at: c.created_at,\n })),\n total: claims.length,\n });\n }\n\n default:\n return createToolResult(`Unknown action: ${action}`, true);\n }\n}\n","// Working Memory tools - Simplified to 3 core tools\n\nimport type { DatabaseAdapter } from '../../db/sqlite-adapter.js';\nimport type { McpTool, McpToolResult } from '../protocol.js';\nimport type { MemoryCategory } from '../../db/types.js';\nimport {\n saveMemory,\n recallMemory,\n clearMemory,\n getActiveMemories,\n} from '../../db/queries.js';\nimport {\n errorResponse,\n successResponse,\n validationError,\n validateActiveSession,\n ERROR_CODES,\n} from '../../utils/response.js';\n\nexport const memoryTools: McpTool[] = [\n {\n name: 'collab_memory_save',\n description: `Save or update context to working memory (upsert). Use to persist findings, decisions, or state that should survive context compaction.`,\n inputSchema: {\n type: 'object',\n properties: {\n session_id: {\n type: 'string',\n description: 'Your session ID',\n },\n category: {\n type: 'string',\n enum: ['finding', 'decision', 'state', 'todo', 'important', 'context'],\n description: 'Category: finding, decision, state, todo, important, context',\n },\n key: {\n type: 'string',\n description: 'Unique identifier (e.g., \"auth_bug_root_cause\")',\n },\n content: {\n type: 'string',\n description: 'The content to remember',\n },\n priority: {\n type: 'number',\n description: 'Priority 0-100 (default 50). Higher = more important.',\n },\n pinned: {\n type: 'boolean',\n description: 'If true, always loaded when recalling active memories.',\n },\n },\n required: ['session_id', 'category', 'key', 'content'],\n },\n },\n {\n name: 'collab_memory_recall',\n description: `Recall memories. Use active=true to get pinned + high priority memories for context restoration.`,\n inputSchema: {\n type: 'object',\n properties: {\n session_id: {\n type: 'string',\n description: 'Your session ID',\n },\n active: {\n type: 'boolean',\n description: 'If true, return pinned + high priority memories only (default behavior for context restoration)',\n },\n category: {\n type: 'string',\n enum: ['finding', 'decision', 'state', 'todo', 'important', 'context'],\n description: 'Filter by category',\n },\n key: {\n type: 'string',\n description: 'Get a specific memory by key',\n },\n },\n required: ['session_id'],\n },\n },\n {\n name: 'collab_memory_clear',\n description: 'Clear memories. Specify key, category, or clear_all.',\n inputSchema: {\n type: 'object',\n properties: {\n session_id: {\n type: 'string',\n description: 'Your session ID',\n },\n key: {\n type: 'string',\n description: 'Clear specific memory by key',\n },\n category: {\n type: 'string',\n enum: ['finding', 'decision', 'state', 'todo', 'important', 'context'],\n description: 'Clear all in category',\n },\n clear_all: {\n type: 'boolean',\n description: 'Clear ALL memories (use with caution)',\n },\n },\n required: ['session_id'],\n },\n },\n];\n\nexport async function handleMemoryTool(\n db: DatabaseAdapter,\n name: string,\n args: Record<string, unknown>\n): Promise<McpToolResult> {\n const sessionId = args.session_id as string;\n\n if (!sessionId) {\n return validationError('session_id is required');\n }\n\n // Validate session exists\n const sessionCheck = await validateActiveSession(db, sessionId);\n if (!sessionCheck.valid) {\n return sessionCheck.error!;\n }\n\n switch (name) {\n case 'collab_memory_save': {\n const category = args.category as MemoryCategory;\n const key = args.key as string;\n const content = args.content as string;\n\n if (!category || !key || !content) {\n return validationError('category, key, and content are required');\n }\n\n const memory = await saveMemory(db, sessionId, {\n category,\n key,\n content,\n priority: (args.priority as number) ?? 50,\n pinned: (args.pinned as boolean) ?? false,\n });\n\n return successResponse({\n saved: true,\n id: memory.id,\n category: memory.category,\n key: memory.key,\n priority: memory.priority,\n pinned: memory.pinned === 1,\n message: `Memory saved: ${category}/${key}`,\n });\n }\n\n case 'collab_memory_recall': {\n const active = args.active as boolean | undefined;\n const category = args.category as MemoryCategory | undefined;\n const key = args.key as string | undefined;\n\n // If active=true, use getActiveMemories for optimized recall\n if (active) {\n const memories = await getActiveMemories(db, sessionId, {\n priority_threshold: 70,\n max_items: 20,\n });\n\n const formatted = memories.map((m) => ({\n category: m.category,\n key: m.key,\n content: m.content,\n priority: m.priority,\n pinned: m.pinned === 1,\n }));\n\n // Group by category\n const byCategory: Record<string, Array<{ key: string; content: string }>> = {};\n for (const mem of formatted) {\n if (!byCategory[mem.category]) {\n byCategory[mem.category] = [];\n }\n byCategory[mem.category].push({ key: mem.key, content: mem.content });\n }\n\n return successResponse({\n count: formatted.length,\n by_category: byCategory,\n message: `Active memories: ${formatted.length} items`,\n });\n }\n\n // Regular recall\n const memories = await recallMemory(db, sessionId, { category, key });\n\n const formatted = memories.map((m) => ({\n category: m.category,\n key: m.key,\n content: m.content,\n priority: m.priority,\n pinned: m.pinned === 1,\n }));\n\n return successResponse({\n count: formatted.length,\n memories: formatted,\n });\n }\n\n case 'collab_memory_clear': {\n const key = args.key as string | undefined;\n const category = args.category as MemoryCategory | undefined;\n const clearAll = args.clear_all as boolean | undefined;\n\n if (!key && !category && !clearAll) {\n return validationError('One of key, category, or clear_all is required');\n }\n\n const cleared = await clearMemory(db, sessionId, {\n key,\n category,\n clear_all: clearAll,\n });\n\n let message: string;\n if (key) {\n message = cleared > 0 ? `Memory cleared: ${key}` : `Memory not found: ${key}`;\n } else if (category) {\n message = `Cleared ${cleared} memories from category: ${category}`;\n } else {\n message = `Cleared all ${cleared} memories`;\n }\n\n return successResponse({ cleared, message });\n }\n\n default:\n return errorResponse(ERROR_CODES.UNKNOWN_TOOL, `Unknown memory tool: ${name}`);\n }\n}\n","// Protection tools - Unified to 1 tool with action parameter\n\nimport type { DatabaseAdapter } from '../../db/sqlite-adapter.js';\nimport type { McpTool, McpToolResult } from '../protocol.js';\nimport type { PlanStatus } from '../../db/queries.js';\nimport {\n registerPlan,\n listPlans,\n registerCreatedFile,\n isFileProtected,\n getProtectedFiles,\n} from '../../db/queries.js';\nimport {\n errorResponse,\n successResponse,\n validationError,\n validateActiveSession,\n ERROR_CODES,\n} from '../../utils/response.js';\n\nexport const protectionTools: McpTool[] = [\n {\n name: 'collab_protect',\n description: `Unified tool for file protection. Use action parameter to:\n- \"register\": Register a plan or file for protection\n- \"check\": Check if a file is protected before deleting\n- \"list\": List all protected files`,\n inputSchema: {\n type: 'object',\n properties: {\n action: {\n type: 'string',\n enum: ['register', 'check', 'list'],\n description: 'Action to perform',\n },\n session_id: {\n type: 'string',\n description: 'Your session ID',\n },\n file_path: {\n type: 'string',\n description: 'File path (for register/check)',\n },\n type: {\n type: 'string',\n enum: ['plan', 'file'],\n description: 'Type of protection (for register). Default: file',\n },\n title: {\n type: 'string',\n description: 'Title (for plan registration)',\n },\n content_summary: {\n type: 'string',\n description: 'Summary (for plan registration)',\n },\n },\n required: ['action', 'session_id'],\n },\n },\n];\n\nexport async function handleProtectionTool(\n db: DatabaseAdapter,\n name: string,\n args: Record<string, unknown>\n): Promise<McpToolResult> {\n if (name !== 'collab_protect') {\n return errorResponse(ERROR_CODES.UNKNOWN_TOOL, `Unknown tool: ${name}`);\n }\n\n const action = args.action as string;\n const sessionId = args.session_id as string;\n\n if (!action || !sessionId) {\n return validationError('action and session_id are required');\n }\n\n const sessionCheck = await validateActiveSession(db, sessionId);\n if (!sessionCheck.valid) {\n return sessionCheck.error!;\n }\n\n switch (action) {\n case 'register': {\n const filePath = args.file_path as string;\n const type = (args.type as 'plan' | 'file') ?? 'file';\n\n if (!filePath) {\n return validationError('file_path is required for register');\n }\n\n if (type === 'plan') {\n const title = args.title as string;\n const contentSummary = args.content_summary as string;\n\n if (!title || !contentSummary) {\n return validationError('title and content_summary are required for plan registration');\n }\n\n const memory = await registerPlan(db, sessionId, {\n file_path: filePath,\n title,\n content_summary: contentSummary,\n status: 'in_progress' as PlanStatus,\n });\n\n return successResponse({\n registered: true,\n type: 'plan',\n file_path: filePath,\n title,\n priority: memory.priority,\n pinned: memory.pinned === 1,\n message: `Plan registered and protected: ${title}`,\n });\n } else {\n const description = args.description as string | undefined;\n\n const memory = await registerCreatedFile(db, sessionId, {\n file_path: filePath,\n file_type: 'other',\n description,\n });\n\n return successResponse({\n registered: true,\n type: 'file',\n file_path: filePath,\n priority: memory.priority,\n message: `File registered for protection: ${filePath}`,\n });\n }\n }\n\n case 'check': {\n const filePath = args.file_path as string;\n\n if (!filePath) {\n return validationError('file_path is required for check');\n }\n\n const result = await isFileProtected(db, sessionId, filePath);\n\n if (result.protected) {\n return successResponse({\n protected: true,\n reason: result.reason,\n warning: `⚠️ Protected (${result.reason}). Confirm before deleting.`,\n });\n }\n\n return successResponse({\n protected: false,\n message: 'File is not protected.',\n });\n }\n\n case 'list': {\n const files = await getProtectedFiles(db, sessionId);\n const plans = await listPlans(db, sessionId, { include_archived: false });\n\n return successResponse({\n protected_files: files.length,\n plans: plans.length,\n files,\n plan_list: plans.map(p => ({\n file_path: p.file_path,\n title: p.title,\n status: p.status,\n })),\n message: `${files.length} protected file(s), ${plans.length} plan(s)`,\n });\n }\n\n default:\n return errorResponse(ERROR_CODES.UNKNOWN_TOOL, `Unknown action: ${action}`);\n }\n}\n","// MCP Server implementation for Session Collaboration\n\nimport type { DatabaseAdapter } from '../db/sqlite-adapter.js';\nimport {\n JsonRpcRequestSchema,\n type JsonRpcRequest,\n type JsonRpcResponse,\n type McpServerInfo,\n type McpCapabilities,\n type McpTool,\n type McpToolResult,\n createSuccessResponse,\n createErrorResponse,\n createToolResult,\n MCP_ERROR_CODES,\n} from './protocol';\nimport { sessionTools, handleSessionTool } from './tools/session.js';\nimport { claimTools, handleClaimTool } from './tools/claim.js';\nimport { memoryTools, handleMemoryTool } from './tools/memory.js';\nimport { protectionTools, handleProtectionTool } from './tools/protection.js';\nimport { VERSION, SERVER_NAME, SERVER_INSTRUCTIONS } from '../constants.js';\n\ntype AuthContext = {\n type: 'jwt' | 'api_token' | 'legacy';\n userId?: string;\n tokenId?: string;\n};\n\nconst SERVER_INFO: McpServerInfo = {\n name: SERVER_NAME,\n version: VERSION,\n};\n\nconst CAPABILITIES: McpCapabilities = {\n tools: {},\n};\n\n// 10 core tools: session (5) + claim (1) + memory (3) + protect (1)\n\n// All tools combined (now only 10 core tools)\nconst ALL_TOOLS: McpTool[] = [...sessionTools, ...claimTools, ...memoryTools, ...protectionTools];\n\n// Server mode detection removed - now single unified mode with 10 tools\n\nexport class McpServer {\n private authContext?: AuthContext;\n\n constructor(private db: DatabaseAdapter, authContext?: AuthContext) {\n this.authContext = authContext;\n }\n\n async handleRequest(request: JsonRpcRequest): Promise<JsonRpcResponse> {\n const { method, params, id } = request;\n\n try {\n switch (method) {\n case 'initialize':\n return await this.handleInitialize(id);\n\n case 'notifications/initialized':\n return createSuccessResponse(id, {});\n\n case 'tools/list':\n return await this.handleToolsList(id);\n\n case 'tools/call':\n return await this.handleToolCall(id, params as { name: string; arguments?: Record<string, unknown> });\n\n case 'ping':\n return createSuccessResponse(id, {});\n\n default:\n return createErrorResponse(id, MCP_ERROR_CODES.METHOD_NOT_FOUND, `Method not found: ${method}`);\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n return createErrorResponse(id, MCP_ERROR_CODES.INTERNAL_ERROR, message);\n }\n }\n\n private async handleInitialize(id: string | number | undefined): Promise<JsonRpcResponse> {\n return createSuccessResponse(id, {\n protocolVersion: '2024-11-05',\n serverInfo: SERVER_INFO,\n capabilities: CAPABILITIES,\n instructions: SERVER_INSTRUCTIONS,\n });\n }\n\n private async handleToolsList(id: string | number | undefined): Promise<JsonRpcResponse> {\n return createSuccessResponse(id, { tools: ALL_TOOLS });\n }\n\n private async handleToolCall(\n id: string | number | undefined,\n params: { name: string; arguments?: Record<string, unknown> }\n ): Promise<JsonRpcResponse> {\n const { name, arguments: args = {} } = params;\n\n let result: McpToolResult;\n\n // Get user_id from auth context (for associating sessions with users)\n const userId = this.authContext?.userId !== 'legacy' ? this.authContext?.userId : undefined;\n\n try {\n // Route to appropriate handler (10 core tools)\n if (name.startsWith('collab_session_') || name === 'collab_config' || name === 'collab_status') {\n result = await handleSessionTool(this.db, name, args, userId);\n } else if (name === 'collab_claim') {\n result = await handleClaimTool(this.db, name, args);\n } else if (name.startsWith('collab_memory_')) {\n result = await handleMemoryTool(this.db, name, args);\n } else if (name === 'collab_protect') {\n result = await handleProtectionTool(this.db, name, args);\n } else {\n result = createToolResult(`Unknown tool: ${name}`, true);\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Tool execution failed';\n result = createToolResult(message, true);\n }\n\n return createSuccessResponse(id, result);\n }\n}\n\n// Parse and validate incoming request\nexport function parseRequest(body: string): JsonRpcRequest | null {\n try {\n const json = JSON.parse(body);\n const result = JsonRpcRequestSchema.safeParse(json);\n return result.success ? result.data : null;\n } catch {\n return null;\n }\n}\n\nexport function getMcpTools(): McpTool[] {\n return ALL_TOOLS;\n}\n\n// Handle MCP tool call for CLI\nexport async function handleMcpRequest(\n db: DatabaseAdapter,\n name: string,\n args: Record<string, unknown>\n): Promise<McpToolResult> {\n try {\n if (name.startsWith('collab_session_') || name === 'collab_config' || name === 'collab_status') {\n return await handleSessionTool(db, name, args);\n } else if (name === 'collab_claim') {\n return await handleClaimTool(db, name, args);\n } else if (name.startsWith('collab_memory_')) {\n return await handleMemoryTool(db, name, args);\n } else if (name === 'collab_protect') {\n return await handleProtectionTool(db, name, args);\n } else {\n return createToolResult(`Unknown tool: ${name}`, true);\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Tool execution failed';\n return createToolResult(message, true);\n }\n}\n"],"mappings":"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","names":["join","join","readFileSync","join","dirname","__dirname","util","objectUtil","errorUtil","errorMap","ctx","result","issues","elements","processed","result","r","ZodFirstPartyTypeKind","memories","formatted"]}