dsh-plugin-tlmemory 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/index.cjs +1692 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +160 -0
- package/dist/index.d.ts +160 -0
- package/dist/index.js +1647 -0
- package/dist/index.js.map +1 -0
- package/package.json +35 -0
- package/web/dist/assets/index-6NupIgC3.js +22 -0
- package/web/dist/assets/index-b1MEsBQj.css +1 -0
- package/web/dist/index.html +13 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/cosmokit@1.8.1/node_modules/cosmokit/src/misc.ts","../../../node_modules/.pnpm/cosmokit@1.8.1/node_modules/cosmokit/src/array.ts","../../../node_modules/.pnpm/cosmokit@1.8.1/node_modules/cosmokit/src/types.ts","../../../node_modules/.pnpm/cosmokit@1.8.1/node_modules/cosmokit/src/string.ts","../../../node_modules/.pnpm/cosmokit@1.8.1/node_modules/cosmokit/src/time.ts","../../../node_modules/.pnpm/schemastery@3.18.0/node_modules/schemastery/src/index.ts","../src/index.ts","../src/db.ts","../src/extractor.ts","../src/tools.ts","../src/recall.ts","../src/server.ts"],"sourcesContent":["export type Dict<T = any, K extends string | symbol = string> = { [key in K]: T }\nexport type Get<T extends {}, K> = K extends keyof T ? T[K] : never\nexport type Extract<S, T, U = S> = S extends T ? U : never\nexport type MaybeArray<T> = [T] extends [unknown[]] ? T : T | T[]\nexport type Promisify<T> = Promise<T extends Promise<infer S> ? S : T>\nexport type Awaitable<T> = [T] extends [Promise<unknown>] ? T : T | Promise<T>\nexport type Intersect<U> = (U extends any ? (arg: U) => void : never) extends ((arg: infer I) => void) ? I : never\n\nexport function noop(): any {}\n\nexport function isNullable(value: any): value is null | undefined | void {\n return value === null || value === undefined\n}\n\nexport function isNonNullable<T>(value: T): value is NonNullable<T> {\n return !isNullable(value)\n}\n\nexport function isPlainObject(data: any) {\n return data && typeof data === 'object' && !Array.isArray(data)\n}\n\nexport function filterKeys<T, K extends string, U extends K>(object: Dict<T, K>, filter: (key: K, value: T) => key is U): Dict<T, U>\nexport function filterKeys<T, K extends string>(object: Dict<T, K>, filter: (key: K, value: T) => boolean): Dict<T, K>\nexport function filterKeys(object: {}, filter: (key: string, value: any) => boolean) {\n return Object.fromEntries(Object.entries(object).filter(([key, value]) => filter(key, value)))\n}\n\nexport function mapValues<U, T, K extends string>(object: Dict<T, K>, transform: (value: T, key: K) => U) {\n return Object.fromEntries(Object.entries(object).map(([key, value]) => [key, (transform as any)(value, key)])) as Dict<U, K>\n}\n\nexport { mapValues as valueMap }\n\nexport function pick<T extends object, K extends keyof T>(source: T, keys?: Iterable<K>, forced?: boolean) {\n if (!keys) return { ...source }\n const result = {} as Pick<T, K>\n for (const key of keys) {\n if (forced || source[key] !== undefined) result[key] = source[key]\n }\n return result\n}\n\nexport function omit<T, K extends keyof T>(source: T, keys?: Iterable<K>) {\n if (!keys) return { ...source }\n const result = { ...source } as Omit<T, K>\n for (const key of keys) {\n Reflect.deleteProperty(result, key)\n }\n return result\n}\n\nexport function defineProperty<T, K extends keyof T>(object: T, key: K, value: T[K]): T\nexport function defineProperty<T, K extends keyof any>(object: T, key: K, value: any): T\nexport function defineProperty<T, K extends keyof any>(object: T, key: K, value: any) {\n return Object.defineProperty(object, key, { writable: true, value, enumerable: false })\n}\n","import { isNullable } from './misc'\n\nexport function contain(array1: readonly any[], array2: readonly any[]) {\n return array2.every(item => array1.includes(item))\n}\n\nexport function intersection<T>(array1: readonly T[], array2: readonly T[]) {\n return array1.filter(item => array2.includes(item))\n}\n\nexport function difference<S>(array1: readonly S[], array2: readonly any[]) {\n return array1.filter(item => !array2.includes(item))\n}\n\nexport function union<T>(array1: readonly T[], array2: readonly T[]) {\n return Array.from(new Set([...array1, ...array2]))\n}\n\nexport function deduplicate<T>(array: readonly T[]) {\n return [...new Set(array)]\n}\n\nexport function remove<T>(list: T[], item: T) {\n const index = list?.indexOf(item)\n if (index >= 0) {\n list.splice(index, 1)\n return true\n } else {\n return false\n }\n}\n\nexport function makeArray<T>(source: null | undefined | T | T[]) {\n return Array.isArray(source) ? source : isNullable(source) ? [] : [source]\n}\n","import { isNullable } from './misc'\n\ntype GlobalConstructorNames = keyof {\n [K in keyof typeof globalThis as typeof globalThis[K] extends abstract new (...args: any) => any ? K : never]: K\n}\n\nexport function is<K extends GlobalConstructorNames>(type: K): (value: any) => value is InstanceType<typeof globalThis[K]>\nexport function is<K extends GlobalConstructorNames>(type: K, value: any): value is InstanceType<typeof globalThis[K]>\nexport function is<K extends GlobalConstructorNames>(type: K, value?: any): any {\n if (arguments.length === 1) return (value: any) => is(type, value)\n return type in globalThis && value instanceof (globalThis[type] as any)\n || Object.prototype.toString.call(value).slice(8, -1) === type\n}\n\nfunction isArrayBufferLike(value: any): value is ArrayBufferLike {\n return is('ArrayBuffer', value) || is('SharedArrayBuffer', value)\n}\n\nfunction isArrayBufferSource(value: any): value is Binary.Source {\n return isArrayBufferLike(value) || ArrayBuffer.isView(value)\n}\n\nexport namespace Binary {\n export type Source<T extends ArrayBufferLike = ArrayBufferLike> = T | ArrayBufferView<T>\n\n export const is = isArrayBufferLike\n export const isSource = isArrayBufferSource\n\n export function fromSource<T extends ArrayBufferLike>(source: Source<T>): T {\n if (ArrayBuffer.isView(source)) {\n // https://stackoverflow.com/questions/8609289/convert-a-binary-nodejs-buffer-to-javascript-arraybuffer#answer-31394257\n return source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength) as T\n } else {\n return source\n }\n }\n\n export function toBase64(source: Source) {\n source = fromSource(source)\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(source).toString('base64')\n }\n let binary = ''\n const bytes = new Uint8Array(source)\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i])\n }\n return btoa(binary)\n }\n\n export function fromBase64(source: string) {\n if (typeof Buffer !== 'undefined') return fromSource(Buffer.from(source, 'base64'))\n return Uint8Array.from(atob(source), c => c.charCodeAt(0))\n }\n\n export function toHex(source: Source) {\n source = fromSource(source)\n if (typeof Buffer !== 'undefined') return Buffer.from(source).toString('hex')\n return Array.from(new Uint8Array(source), byte => byte.toString(16).padStart(2, '0')).join('')\n }\n\n export function fromHex(source: string) {\n if (typeof Buffer !== 'undefined') return fromSource(Buffer.from(source, 'hex'))\n const hex = source.length % 2 === 0 ? source : source.slice(0, source.length - 1)\n const buffer: number[] = []\n for (let i = 0; i < hex.length; i += 2) {\n buffer.push(parseInt(`${hex[i]}${hex[i + 1]}`, 16))\n }\n return Uint8Array.from(buffer).buffer\n }\n}\n\nexport const base64ToArrayBuffer = Binary.fromBase64\nexport const arrayBufferToBase64 = Binary.toBase64\nexport const hexToArrayBuffer = Binary.fromHex\nexport const arrayBufferToHex = Binary.toHex\n\nexport function clone<T>(source: T): T\nexport function clone(source: any, refs = new Map<any, any>()) {\n if (!source || typeof source !== 'object') return source\n if (is('Date', source)) return new Date(source.valueOf())\n if (is('RegExp', source)) return new RegExp(source.source, source.flags)\n if (isArrayBufferLike(source)) return source.slice(0)\n if (ArrayBuffer.isView(source)) return source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength)\n const cached = refs.get(source)\n if (cached) return cached\n if (Array.isArray(source)) {\n const result: any[] = []\n refs.set(source, result)\n source.forEach((value, index) => {\n result[index] = Reflect.apply(clone, null, [value, refs])\n })\n return result\n }\n const result = Object.create(Object.getPrototypeOf(source))\n refs.set(source, result)\n for (const key of Reflect.ownKeys(source)) {\n const descriptor = { ...Reflect.getOwnPropertyDescriptor(source, key) }\n if ('value' in descriptor) {\n descriptor.value = Reflect.apply(clone, null, [descriptor.value, refs])\n }\n Reflect.defineProperty(result, key, descriptor)\n }\n return result\n}\n\nexport function deepEqual(a: any, b: any, strict?: boolean): boolean {\n if (a === b) return true\n if (!strict && isNullable(a) && isNullable(b)) return true\n if (typeof a !== typeof b) return false\n if (typeof a !== 'object') return false\n if (!a || !b) return false\n\n function check<T>(test: (x: any) => x is T, then: (a: T, b: T) => boolean) {\n return test(a) ? test(b) ? then(a, b) : false : test(b) ? false : undefined\n }\n\n return check(Array.isArray, (a, b) => a.length === b.length && a.every((item, index) => deepEqual(item, b[index])))\n ?? check(is('Date'), (a, b) => a.valueOf() === b.valueOf())\n ?? check(is('RegExp'), (a, b) => a.source === b.source && a.flags === b.flags)\n ?? check(isArrayBufferLike, (a, b) => {\n if (a.byteLength !== b.byteLength) return false\n const viewA = new Uint8Array(a)\n const viewB = new Uint8Array(b)\n for (let i = 0; i < viewA.length; i++) {\n if (viewA[i] !== viewB[i]) return false\n }\n return true\n })\n ?? Object.keys({ ...a, ...b }).every(key => deepEqual(a[key], b[key], strict))\n}\n","export function capitalize(source: string) {\n return source.charAt(0).toUpperCase() + source.slice(1)\n}\n\nexport function uncapitalize(source: string) {\n return source.charAt(0).toLowerCase() + source.slice(1)\n}\n\nexport function camelCase(source: string) {\n return source.replace(/[_-][a-z]/g, str => str.slice(1).toUpperCase())\n}\n\nconst enum State {\n DELIM,\n UPPER,\n LOWER,\n}\n\nfunction tokenize(source: string, delimiters: number[], delimiter: number) {\n const output: number[] = []\n let state = State.DELIM\n for (let i = 0; i < source.length; i++) {\n const code = source.charCodeAt(i)\n if (code >= 65 && code <= 90) {\n if (state === State.UPPER) {\n const next = source.charCodeAt(i + 1)\n if (next >= 97 && next <= 122) {\n output.push(delimiter)\n }\n output.push(code + 32)\n } else {\n if (state !== State.DELIM) {\n output.push(delimiter)\n }\n output.push(code + 32)\n }\n state = State.UPPER\n } else if (code >= 97 && code <= 122) {\n output.push(code)\n state = State.LOWER\n } else if (delimiters.includes(code)) {\n if (state !== State.DELIM) {\n output.push(delimiter)\n }\n state = State.DELIM\n } else {\n output.push(code)\n }\n }\n return String.fromCharCode(...output)\n}\n\nexport function paramCase(source: string) {\n return tokenize(source, [45, 95], 45)\n}\n\nexport function snakeCase(source: string) {\n return tokenize(source, [45, 95], 95)\n}\n\nexport const camelize = camelCase\nexport const hyphenate = paramCase\n\nnamespace Letter {\n /* eslint-disable @typescript-eslint/member-delimiter-style */\n interface LowerToUpper {\n a: 'A', b: 'B', c: 'C', d: 'D', e: 'E', f: 'F', g: 'G', h: 'H', i: 'I', j: 'J', k: 'K', l: 'L', m: 'M',\n n: 'N', o: 'O', p: 'P', q: 'Q', r: 'R', s: 'S', t: 'T', u: 'U', v: 'V', w: 'W', x: 'X', y: 'Y', z: 'Z',\n }\n\n interface UpperToLower {\n A: 'a', B: 'b', C: 'c', D: 'd', E: 'e', F: 'f', G: 'g', H: 'h', I: 'i', J: 'j', K: 'k', L: 'l', M: 'm',\n N: 'n', O: 'o', P: 'p', Q: 'q', R: 'r', S: 's', T: 't', U: 'u', V: 'v', W: 'w', X: 'x', Y: 'y', Z: 'z',\n }\n /* eslint-enable @typescript-eslint/member-delimiter-style */\n\n export type Upper = keyof UpperToLower\n export type Lower = keyof LowerToUpper\n\n export type ToUpper<S extends string> = S extends Lower ? LowerToUpper[S] : S\n export type ToLower<S extends string, P extends string = ''> = S extends Upper ? `${P}${UpperToLower[S]}` : S\n}\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport type camelize<S extends string> = S extends `${infer L}-${infer M}${infer R}` ? `${L}${Letter.ToUpper<M>}${camelize<R>}` : S\nexport type hyphenate<S extends string> = S extends `${infer L}${infer R}` ? `${Letter.ToLower<L, '-'>}${hyphenate<R>}` : S\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport function formatProperty(key: keyof any) {\n if (typeof key !== 'string') return `[${key.toString()}]`\n return /^[a-z_$][\\w$]*$/i.test(key) ? `.${key}` : `[${JSON.stringify(key)}]`\n}\n\nexport function trimSlash(source: string) {\n return source.replace(/\\/$/, '')\n}\n\nexport function sanitize(source: string) {\n if (!source.startsWith('/')) source = '/' + source\n return trimSlash(source)\n}\n","export namespace Time {\n export const millisecond = 1\n export const second = 1000\n export const minute = second * 60\n export const hour = minute * 60\n export const day = hour * 24\n export const week = day * 7\n\n let timezoneOffset = new Date().getTimezoneOffset()\n\n export function setTimezoneOffset(offset: number) {\n timezoneOffset = offset\n }\n\n export function getTimezoneOffset() {\n return timezoneOffset\n }\n\n export function getDateNumber(date: number | Date = new Date(), offset?: number) {\n if (typeof date === 'number') date = new Date(date)\n if (offset === undefined) offset = timezoneOffset\n return Math.floor((date.valueOf() / minute - offset) / 1440)\n }\n\n export function fromDateNumber(value: number, offset?: number) {\n const date = new Date(value * day)\n if (offset === undefined) offset = timezoneOffset\n return new Date(+date + offset * minute)\n }\n\n const numeric = /\\d+(?:\\.\\d+)?/.source\n const timeRegExp = new RegExp(`^${[\n 'w(?:eek(?:s)?)?',\n 'd(?:ay(?:s)?)?',\n 'h(?:our(?:s)?)?',\n 'm(?:in(?:ute)?(?:s)?)?',\n 's(?:ec(?:ond)?(?:s)?)?',\n ].map(unit => `(${numeric}${unit})?`).join('')}$`)\n\n export function parseTime(source: string) {\n const capture = timeRegExp.exec(source)\n if (!capture) return 0\n return (parseFloat(capture[1]) * week || 0)\n + (parseFloat(capture[2]) * day || 0)\n + (parseFloat(capture[3]) * hour || 0)\n + (parseFloat(capture[4]) * minute || 0)\n + (parseFloat(capture[5]) * second || 0)\n }\n\n export function parseDate(date: string) {\n const parsed = parseTime(date)\n if (parsed) {\n date = Date.now() + parsed as any\n } else if (/^\\d{1,2}(:\\d{1,2}){1,2}$/.test(date)) {\n date = `${new Date().toLocaleDateString()}-${date}`\n } else if (/^\\d{1,2}-\\d{1,2}-\\d{1,2}(:\\d{1,2}){1,2}$/.test(date)) {\n date = `${new Date().getFullYear()}-${date}`\n }\n return date ? new Date(date) : new Date()\n }\n\n export function format(ms: number) {\n const abs = Math.abs(ms)\n if (abs >= day - hour / 2) {\n return Math.round(ms / day) + 'd'\n } else if (abs >= hour - minute / 2) {\n return Math.round(ms / hour) + 'h'\n } else if (abs >= minute - second / 2) {\n return Math.round(ms / minute) + 'm'\n } else if (abs >= second) {\n return Math.round(ms / second) + 's'\n }\n return ms + 'ms'\n }\n\n export function toDigits(source: number, length = 2) {\n return source.toString().padStart(length, '0')\n }\n\n export function template(template: string, time = new Date()) {\n return template\n .replace('yyyy', time.getFullYear().toString())\n .replace('yy', time.getFullYear().toString().slice(2))\n .replace('MM', toDigits(time.getMonth() + 1))\n .replace('dd', toDigits(time.getDate()))\n .replace('hh', toDigits(time.getHours()))\n .replace('mm', toDigits(time.getMinutes()))\n .replace('ss', toDigits(time.getSeconds()))\n .replace('SSS', toDigits(time.getMilliseconds(), 3))\n }\n}\n","import { Binary, clone, deepEqual, Dict, filterKeys, isNullable, isPlainObject, pick, valueMap } from 'cosmokit'\nimport type { StandardSchemaV1 } from '@standard-schema/spec'\n\nconst kSchema = Symbol.for('schemastery')\nconst kValidationError = Symbol.for('ValidationError')\n\ndeclare global {\n namespace Schemastery {\n export type From<X> =\n | X extends string | number | boolean ? Schema<X>\n : X extends Schema ? X\n : X extends typeof String ? Schema<string>\n : X extends typeof Number ? Schema<number>\n : X extends typeof Boolean ? Schema<boolean>\n : X extends typeof Function ? Schema<Function, (...args: any[]) => any>\n : X extends Constructor<infer S> ? Schema<S>\n : never\n\n type TypeS1<X> = X extends Schema<infer S, unknown> ? S : never\n type Inverse<X> = X extends Schema<any, infer Y> ? (arg: Y) => void : never\n\n export type TypeS<X> = TypeS1<From<X>>\n export type TypeT<X> = ReturnType<From<X>>\n export type Resolve = (data: any, schema: Schema, options: Options, strict?: boolean) => [any, any?]\n\n export type IntersectS<X> = From<X> extends Schema<infer S, unknown> ? S : never\n export type IntersectT<X> = Inverse<From<X>> extends ((arg: infer T) => void) ? T : never\n\n type TupleS<X extends readonly any[]> = X extends readonly [infer L, ...infer R] ? [TypeS<L>?, ...TupleS<R>] : any[]\n type TupleT<X extends readonly any[]> = X extends readonly [infer L, ...infer R] ? [TypeT<L>?, ...TupleT<R>] : any[]\n type ObjectS<X extends Dict> = { [K in keyof X]?: TypeS<X[K]> | null } & Dict\n type ObjectT<X extends Dict> = { [K in keyof X]: TypeT<X[K]> } & Dict\n type Constructor<T = any> = new (...args: any[]) => T\n\n export interface Static {\n <T = any>(options: Partial<Schema<T>>): Schema<T>\n new <T = any>(options: Partial<Schema<T>>): Schema<T>\n prototype: Schema\n resolve: Resolve\n from<X = any>(source?: X): From<X>\n extend(type: string, resolve: Resolve): void\n any<T = any>(): Schema<T>\n never(): Schema<never>\n const<const T>(value: T): Schema<T>\n string(): Schema<string>\n number(): Schema<number>\n natural(): Schema<number>\n percent(): Schema<number>\n boolean(): Schema<boolean>\n date(): Schema<string | Date, Date>\n regExp(flag?: string): Schema<string | RegExp, RegExp>\n arrayBuffer(): Schema<Binary.Source, ArrayBufferLike>\n arrayBuffer(encoding: 'hex' | 'base64'): Schema<Binary.Source | string, ArrayBufferLike>\n bitset<K extends string>(bits: Partial<Record<K, number>>): Schema<number | readonly K[], number>\n function(): Schema<Function, (...args: any[]) => any>\n is(constructor: string): Schema\n is<T>(constructor: Constructor<T>): Schema<T>\n array<X>(inner: X): Schema<TypeS<X>[], TypeT<X>[]>\n dict<X, Y extends Schema<any, string> = Schema<string>>(inner: X, sKey?: Y): Schema<Dict<TypeS<X>, TypeS<Y>>, Dict<TypeT<X>, TypeT<Y>>>\n tuple<const X extends readonly any[]>(list: X): Schema<TupleS<X>, TupleT<X>>\n object<X extends Dict>(dict: X): Schema<ObjectS<X>, ObjectT<X>>\n union<const X>(list: readonly X[]): Schema<TypeS<X>, TypeT<X>>\n intersect<const X>(list: readonly X[]): Schema<IntersectS<X>, IntersectT<X>>\n transform<X, T>(inner: X, callback: (value: TypeS<X>, options: Schemastery.Options) => T, preserve?: boolean): Schema<TypeS<X>, T>\n lazy<X extends Schema>(callback: () => X): X\n ValidationError: typeof ValidationError\n }\n\n interface Options {\n autofix?: boolean\n ignore?(data: any, schema: Schema): boolean\n path?: (keyof any)[]\n }\n\n export interface Meta<T = any> {\n default?: T extends {} ? Partial<T> : T\n required?: boolean\n disabled?: boolean\n collapse?: boolean\n badges?: { text: string; type: string }[]\n hidden?: boolean\n loose?: boolean\n role?: string\n extra?: any\n link?: string\n description?: string | Dict<string>\n comment?: string\n pattern?: { source: string; flags?: string }\n max?: number\n min?: number\n step?: number\n }\n }\n\n interface Schemastery<S = any, T = S> {\n (data?: S | null, options?: Schemastery.Options): T\n new (data?: S | null, options?: Schemastery.Options): T\n [kSchema]: true\n uid: number\n meta: Schemastery.Meta<T>\n type: string\n sKey?: Schema\n inner?: Schema\n list?: Schema[]\n dict?: Dict<Schema>\n bits?: Dict<number>\n callback?: Function\n constructor?: string | Function\n builder?: Function\n value?: T\n refs?: Dict<Schema>\n preserve?: boolean\n '~standard': StandardSchemaV1.Props // <S, T>\n toString(inline?: boolean): string\n toJSON(): Schema<S, T>\n required(value?: boolean): Schema<S, T>\n hidden(value?: boolean): Schema<S, T>\n loose(value?: boolean): Schema<S, T>\n role(text: string, extra?: any): Schema<S, T>\n link(link: string): Schema<S, T>\n default(value: T): Schema<S, T>\n comment(text: string): Schema<S, T>\n description(text: string): Schema<S, T>\n disabled(value?: boolean): Schema<S, T>\n collapse(value?: boolean): Schema<S, T>\n deprecated(): Schema<S, T>\n experimental(): Schema<S, T>\n pattern(regexp: RegExp): Schema<S, T>\n max(value: number): Schema<S, T>\n min(value: number): Schema<S, T>\n step(value: number): Schema<S, T>\n set(key: string, value: Schema): Schema<S, T>\n push(value: Schema): Schema<S, T>\n simplify(value?: any): any\n i18n(messages: Dict): Schema<S, T>\n extra<K extends keyof Schemastery.Meta>(key: K, value: Schemastery.Meta[K]): Schema<S, T>\n }\n}\n\ndeclare namespace globalThis {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n export let __schemastery_index__: number\n export let __schemastery_refs__: Record<number, Schema> | undefined\n}\n\nglobalThis.__schemastery_index__ ??= 0\nglobalThis.__schemastery_refs__ = undefined\n\nclass ValidationError extends TypeError {\n name = 'ValidationError'\n\n constructor(message: string, public options: Schemastery.Options) {\n let prefix = '$'\n for (const segment of options.path || []) {\n if (typeof segment === 'string') {\n prefix += '.' + segment\n } else if (typeof segment === 'number') {\n prefix += '[' + segment + ']'\n } else if (typeof segment === 'symbol') {\n prefix += `[Symbol(${segment.toString()})]`\n }\n }\n if (prefix.startsWith('.')) prefix = prefix.slice(1)\n super((prefix === '$' ? '' : `${prefix} `) + message)\n }\n\n static is(error: any): error is ValidationError {\n return !!error?.[kValidationError]\n }\n}\n\nObject.defineProperty(ValidationError.prototype, kValidationError, {\n value: true,\n})\n\ntype Schema<S = any, T = S> = Schemastery<S, T>\n\nconst Schema = function (options: Schema) {\n const schema = function (data: any, options: Schemastery.Options = {}) {\n return Schema.resolve(data, schema, options)[0]\n } as Schema\n\n if (options.refs) {\n const refs = valueMap(options.refs, options => new Schema(options))\n const getRef = (uid: any) => refs[uid]!\n for (const key in refs) {\n const options = refs[key]!\n options.sKey = getRef(options.sKey)\n options.inner = getRef(options.inner)\n options.list = options.list && options.list.map(getRef)\n options.dict = options.dict && valueMap(options.dict, getRef)\n }\n return refs[options.uid!]\n }\n\n Object.assign(schema, options)\n if (typeof schema.callback === 'string') {\n try {\n // eslint-disable-next-line no-new-func\n schema.callback = new Function('return ' + schema.callback)()\n } catch {}\n }\n Object.defineProperty(schema, 'uid', { value: globalThis.__schemastery_index__++ })\n Object.setPrototypeOf(schema, Schema.prototype)\n schema.meta ||= {}\n schema.toString = schema.toString.bind(schema)\n return schema\n} as Schemastery.Static\n\nSchema.prototype = Object.create(Function.prototype)\n\nSchema.prototype[kSchema] = true\n\nObject.defineProperty(Schema.prototype, '~standard', {\n get(this: Schema) {\n return {\n version: 1,\n vendor: 'schemastery',\n validate: (value: unknown) => {\n try {\n return { value: Schema.resolve(value, this, {})[0] }\n } catch (error) {\n if (ValidationError.is(error)) {\n return { issues: [{ message: error.message, path: error.options.path }] }\n }\n throw error\n }\n },\n }\n },\n})\n\nSchema.ValidationError = ValidationError\n\nSchema.prototype.toJSON = function toJSON() {\n if (globalThis.__schemastery_refs__) {\n globalThis.__schemastery_refs__[this.uid] ??= JSON.parse(JSON.stringify({ ...this }))\n return this.uid as any\n }\n\n globalThis.__schemastery_refs__ = { [this.uid]: { ...this } as Schema }\n globalThis.__schemastery_refs__[this.uid] = JSON.parse(JSON.stringify({ ...this }))\n const result = { uid: this.uid, refs: globalThis.__schemastery_refs__ }\n globalThis.__schemastery_refs__ = undefined\n return result\n}\n\nSchema.prototype.set = function set(key, value) {\n this.dict![key] = value\n return this\n}\n\nSchema.prototype.push = function push(value) {\n this.list!.push(value)\n return this\n}\n\nfunction mergeDesc(original: undefined | string | Dict<string>, messages: Dict) {\n const result: Dict<string> = typeof original === 'string' ? { '': original } : { ...original }\n for (const locale in messages) {\n const value = messages[locale]\n if (value?.$description || value?.$desc) {\n result[locale] = value.$description || value.$desc\n } else if (typeof value === 'string') {\n result[locale] = value\n }\n }\n return result\n}\n\nfunction getInner(value: any) {\n return value?.$value ?? value?.$inner\n}\n\nfunction extractKeys(data: any) {\n return filterKeys(data ?? {}, key => !key.startsWith('$'))\n}\n\nSchema.prototype.i18n = function i18n(messages) {\n const schema = Schema(this)\n const desc = mergeDesc(schema.meta.description, messages)\n if (Object.keys(desc).length) schema.meta.description = desc\n if (schema.dict) {\n schema.dict = valueMap(schema.dict, (inner, key) => {\n return inner.i18n(valueMap(messages, (data) => getInner(data)?.[key] ?? data?.[key]))\n })\n }\n if (schema.list) {\n schema.list = schema.list!.map((inner, index) => {\n return inner.i18n(valueMap(messages, (data = {}) => {\n if (Array.isArray(getInner(data))) return getInner(data)[index]\n if (Array.isArray(data)) return data[index]\n return extractKeys(data)\n }))\n })\n }\n if (schema.inner) {\n schema.inner = schema.inner.i18n(valueMap(messages, (data) => {\n if (getInner(data)) return getInner(data)\n return extractKeys(data)\n }))\n }\n if (schema.sKey) {\n schema.sKey = schema.sKey.i18n(valueMap(messages, (data) => data?.$key))\n }\n return schema\n}\n\nSchema.prototype.extra = function extra(key, value) {\n const schema = Schema(this)\n schema.meta = { ...schema.meta, [key]: value }\n return schema\n}\n\nfor (const key of ['required', 'disabled', 'collapse', 'hidden', 'loose']) {\n Object.assign(Schema.prototype, {\n [key](this: Schema, value = true) {\n const schema = Schema(this)\n schema.meta = { ...schema.meta, [key]: value }\n return schema\n },\n })\n}\n\nSchema.prototype.deprecated = function deprecated() {\n const schema = Schema(this)\n schema.meta.badges ||= []\n schema.meta.badges.push({ text: 'deprecated', type: 'danger' })\n return schema\n}\n\nSchema.prototype.experimental = function experimental() {\n const schema = Schema(this)\n schema.meta.badges ||= []\n schema.meta.badges.push({ text: 'experimental', type: 'warning' })\n return schema\n}\n\nSchema.prototype.pattern = function pattern(regexp) {\n const schema = Schema(this)\n const pattern = pick(regexp, ['source', 'flags'])\n schema.meta = { ...schema.meta, pattern }\n return schema\n}\n\nSchema.prototype.simplify = function simplify(this: Schema, value) {\n if (deepEqual(value, this.meta.default, this.type === 'dict')) return null\n if (isNullable(value)) return value\n if (this.type === 'object' || this.type === 'dict') {\n const result: Dict = {}\n for (const key in value) {\n const schema = this.type === 'object' ? this.dict![key] : this.inner\n const item = schema?.simplify(value[key])\n if (this.type === 'dict' || !isNullable(item)) result[key] = item\n }\n if (deepEqual(result, this.meta.default, this.type === 'dict')) return null\n return result\n } else if (this.type === 'array' || this.type === 'tuple') {\n const result: any[] = []\n ;(value as any[]).forEach((value, index) => {\n const schema = this.type === 'array' ? this.inner : this.list![index]\n const item = schema ? schema.simplify(value) : value\n result.push(item)\n })\n return result\n } else if (this.type === 'intersect') {\n const result: Dict = {}\n for (const item of this.list!) {\n Object.assign(result, item.simplify(value))\n }\n return result\n } else if (this.type === 'union') {\n for (const schema of this.list!) {\n try {\n Schema.resolve(value, schema, {})\n return schema.simplify(value)\n } catch {}\n }\n }\n return value\n}\n\nSchema.prototype.toString = function toString(inline?: boolean) {\n return formatters[this.type]?.(this, inline) ?? `Schema<${this.type}>`\n}\n\nSchema.prototype.role = function role(role, extra) {\n const schema = Schema(this)\n schema.meta = { ...schema.meta, role, extra }\n return schema\n}\n\nfor (const key of ['default', 'link', 'comment', 'description', 'max', 'min', 'step']) {\n Object.assign(Schema.prototype, {\n [key](this: Schema, value: any) {\n const schema = Schema(this)\n schema.meta = { ...schema.meta, [key]: value }\n return schema\n },\n })\n}\n\nconst resolvers: Dict<Schemastery.Resolve> = {}\n\nSchema.extend = function extend(type, resolve) {\n resolvers[type] = resolve\n}\n\nSchema.resolve = function resolve(data, schema, options = {}, strict = false) {\n if (!schema) return [data]\n if (options.ignore?.(data, schema)) return [data]\n\n if (isNullable(data) && schema.type !== 'lazy') {\n if (schema.meta.required) throw new ValidationError(`missing required value`, options)\n let current = schema\n let fallback = schema.meta.default\n while (current?.type === 'intersect' && isNullable(fallback)) {\n current = current.list![0]\n fallback = current?.meta.default\n }\n if (isNullable(fallback)) return [data]\n data = clone(fallback)\n }\n\n const callback = resolvers[schema.type]\n if (!callback) throw new ValidationError(`unsupported type \"${schema.type}\"`, options)\n\n try {\n return callback(data, schema, options, strict)\n } catch (error) {\n if (!schema.meta.loose) throw error\n return [schema.meta.default]\n }\n}\n\nSchema.from = function from(source: any) {\n if (isNullable(source)) {\n return Schema.any()\n } else if (['string', 'number', 'boolean'].includes(typeof source)) {\n return Schema.const(source).required()\n } else if (source[kSchema]) {\n return source\n } else if (typeof source === 'function') {\n switch (source) {\n case String: return Schema.string().required()\n case Number: return Schema.number().required()\n case Boolean: return Schema.boolean().required()\n case Function: return Schema.function().required()\n default: return Schema.is(source).required()\n }\n } else {\n throw new TypeError(`cannot infer schema from ${source}`)\n }\n}\n\nSchema.lazy = function lazy(builder) {\n const toJSON = () => {\n if (!schema.inner![kSchema]) {\n schema.inner = schema.builder!()\n schema.inner!.meta = { ...schema.meta, ...schema.inner!.meta }\n }\n return schema.inner!.toJSON()\n }\n const schema = new Schema({ type: 'lazy', builder, inner: { toJSON } as any })\n return schema as any\n}\n\nSchema.natural = function natural() {\n return Schema.number().step(1).min(0)\n}\n\nSchema.percent = function percent() {\n return Schema.number().step(0.01).min(0).max(1).role('slider')\n}\n\nSchema.date = function date() {\n return Schema.union([\n Schema.is(Date),\n Schema.transform(Schema.string().role('datetime'), (value, options) => {\n const date = new Date(value)\n if (isNaN(+date)) throw new ValidationError(`invalid date \"${value}\"`, options)\n return date\n }, true),\n ])\n}\n\nSchema.regExp = function regExp(flag = '') {\n return Schema.union([\n Schema.is(RegExp),\n Schema.transform(Schema.string().role('regexp', { flag }), (value, options) => {\n try {\n return new RegExp(value, flag)\n } catch (e: any) {\n throw new ValidationError(e.message, options)\n }\n }, true),\n ])\n}\n\nSchema.arrayBuffer = function arrayBuffer(encoding?: 'hex' | 'base64'): any {\n return Schema.union([\n Schema.is(ArrayBuffer),\n Schema.is(SharedArrayBuffer),\n Schema.transform(Schema.any<ArrayBufferView>(), (value, options) => {\n if (Binary.isSource(value)) return Binary.fromSource(value)\n throw new ValidationError(`expected ArrayBufferSource but got ${value}`, options)\n }, true),\n ...encoding ? [Schema.transform(Schema.string(), (value, options) => {\n try {\n return encoding === 'base64'\n ? Binary.fromBase64(value)\n : Binary.fromHex(value)\n } catch (e: any) {\n throw new ValidationError(e.message, options)\n }\n }, true)] as const : [],\n ])\n}\n\nSchema.extend('lazy', (data, schema, options, strict) => {\n if (!schema.inner![kSchema]) {\n schema.inner = schema.builder!()\n schema.inner!.meta = { ...schema.meta, ...schema.inner!.meta }\n }\n return Schema.resolve(data, schema.inner!, options, strict)\n})\n\nSchema.extend('any', (data) => {\n return [data]\n})\n\nSchema.extend('never', (data, _, options) => {\n throw new ValidationError(`expected nullable but got ${data}`, options)\n})\n\nSchema.extend('const', (data, { value }, options) => {\n if (deepEqual(data, value)) return [value]\n throw new ValidationError(`expected ${value} but got ${data}`, options)\n})\n\nfunction checkWithinRange(data: number, meta: Schemastery.Meta<any>, description: string, options: Schemastery.Options, skipMin = false) {\n const { max = Infinity, min = -Infinity } = meta\n if (data > max) throw new ValidationError(`expected ${description} <= ${max} but got ${data}`, options)\n if (data < min && !skipMin) throw new ValidationError(`expected ${description} >= ${min} but got ${data}`, options)\n}\n\nSchema.extend('string', (data, { meta }, options) => {\n if (typeof data !== 'string') throw new ValidationError(`expected string but got ${data}`, options)\n if (meta.pattern) {\n const regexp = new RegExp(meta.pattern.source, meta.pattern.flags)\n if (!regexp.test(data)) throw new ValidationError(`expect string to match regexp ${regexp}`, options)\n }\n checkWithinRange(data.length, meta, 'string length', options)\n return [data]\n})\n\nfunction decimalShift(data: number, digits: number) {\n const str = data.toString()\n if (str.includes('e')) return data * Math.pow(10, digits)\n const index = str.indexOf('.')\n if (index === -1) return data * Math.pow(10, digits)\n const frac = str.slice(index + 1)\n const integer = str.slice(0, index)\n if (frac.length <= digits) return +(integer + frac.padEnd(digits, '0'))\n return +(integer + frac.slice(0, digits) + '.' + frac.slice(digits))\n}\n\nfunction isMultipleOf(data: number, min: number, step: number) {\n step = Math.abs(step)\n if (!/^\\d+\\.\\d+$/.test(step.toString())) {\n return (data - min) % step === 0\n }\n const index = step.toString().indexOf('.')\n const digits = step.toString().slice(index + 1).length\n return Math.abs(decimalShift(data, digits) - decimalShift(min, digits)) % decimalShift(step, digits) === 0\n}\n\nSchema.extend('number', (data, { meta }, options) => {\n if (typeof data !== 'number') throw new ValidationError(`expected number but got ${data}`, options)\n checkWithinRange(data, meta, 'number', options)\n const { step } = meta\n if (step && !isMultipleOf(data, meta.min ?? 0, step)) {\n throw new ValidationError(`expected number multiple of ${step} but got ${data}`, options)\n }\n return [data]\n})\n\nSchema.extend('boolean', (data, _, options) => {\n if (typeof data === 'boolean') return [data]\n throw new ValidationError(`expected boolean but got ${data}`, options)\n})\n\nSchema.extend('bitset', (data, { bits, meta }, options) => {\n let value = 0, keys: string[] = []\n if (typeof data === 'number') {\n value = data\n for (const key in bits!) {\n if (data & bits![key]!) {\n keys.push(key)\n }\n }\n } else if (Array.isArray(data)) {\n keys = data\n for (const key of keys) {\n if (typeof key !== 'string') throw new ValidationError(`expected string but got ${key}`, options)\n if (key in bits!) value |= bits![key]!\n }\n } else {\n throw new ValidationError(`expected number or array but got ${data}`, options)\n }\n if (value === meta.default) return [value]\n return [value, keys]\n})\n\nSchema.extend('function', (data, _, options) => {\n if (typeof data === 'function') return [data]\n throw new ValidationError(`expected function but got ${data}`, options)\n})\n\nSchema.extend('is', (data, { constructor }, options) => {\n if (typeof constructor === 'function') {\n if (data instanceof constructor) return [data]\n throw new ValidationError(`expected ${constructor.name} but got ${data}`, options)\n } else {\n if (isNullable(data)) {\n throw new ValidationError(`expected ${constructor} but got ${data}`, options)\n }\n let prototype = Object.getPrototypeOf(data)\n while (prototype) {\n if (prototype.constructor?.name === constructor) return [data]\n prototype = Object.getPrototypeOf(prototype)\n }\n throw new ValidationError(`expected ${constructor} but got ${data}`, options)\n }\n})\n\nfunction property(data: any, key: keyof any, schema: Schema, options: Schemastery.Options) {\n try {\n const [value, adapted] = Schema.resolve(data[key], schema, {\n ...options,\n path: [...options.path || [], key],\n })\n if (adapted !== undefined) data[key] = adapted\n return value\n } catch (e) {\n if (!options?.autofix) throw e\n delete data[key]\n return schema.meta.default\n }\n}\n\nSchema.extend('array', (data, { inner, meta }, options) => {\n if (!Array.isArray(data)) throw new ValidationError(`expected array but got ${data}`, options)\n checkWithinRange(data.length, meta, 'array length', options, !isNullable(inner!.meta.default))\n return [data.map((_, index) => property(data, index, inner!, options))]\n})\n\nSchema.extend('dict', (data, { inner, sKey }, options, strict) => {\n if (!isPlainObject(data)) throw new ValidationError(`expected object but got ${data}`, options)\n const result: any = {}\n for (const key in data) {\n let rKey: string\n try {\n rKey = Schema.resolve(key, sKey!, options)[0]\n } catch (error) {\n if (strict) continue\n throw error\n }\n result[rKey] = property(data, key, inner!, options)\n data[rKey] = data[key]\n if (key !== rKey) delete data[key]\n }\n return [result]\n})\n\nSchema.extend('tuple', (data, { list }, options, strict) => {\n if (!Array.isArray(data)) throw new ValidationError(`expected array but got ${data}`, options)\n const result = list!.map((inner, index) => property(data, index, inner, options))\n if (strict) return [result]\n result.push(...data.slice(list!.length))\n return [result]\n})\n\nfunction merge(result: any, data: any) {\n for (const key in data) {\n if (key in result) continue\n result[key] = data[key]\n }\n}\n\nSchema.extend('object', (data, { dict }, options, strict) => {\n if (!isPlainObject(data)) throw new ValidationError(`expected object but got ${data}`, options)\n const result: any = {}\n for (const key in dict) {\n const value = property(data, key, dict![key]!, options)\n if (!isNullable(value) || key in data) {\n result[key] = value\n }\n }\n if (!strict) merge(result, data)\n return [result]\n})\n\nSchema.extend('union', (data, { list, toString }, options, strict) => {\n const messages: any[] = []\n for (const inner of list!) {\n try {\n return Schema.resolve(data, inner, options, strict)\n } catch (error) {\n messages.push(error)\n }\n }\n throw new ValidationError(`expected ${toString()} but got ${JSON.stringify(data)}`, options)\n})\n\nSchema.extend('intersect', (data, { list, toString }, options, strict) => {\n if (!list!.length) return [data]\n let result\n for (const inner of list!) {\n const value: any = Schema.resolve(data, inner, options, true)[0]\n if (isNullable(value)) continue\n if (isNullable(result)) {\n result = value\n } else if (typeof result !== typeof value) {\n throw new ValidationError(`expected ${toString()} but got ${JSON.stringify(data)}`, options)\n } else if (typeof value === 'object') {\n merge(result ??= {}, value)\n } else if (result !== value) {\n throw new ValidationError(`expected ${toString()} but got ${JSON.stringify(data)}`, options)\n }\n }\n if (!strict && isPlainObject(data)) merge(result, data)\n return [result]\n})\n\nSchema.extend('transform', (data, { inner, callback, preserve }, options) => {\n const [result, adapted = data] = Schema.resolve(data, inner!, options, true)\n if (preserve) {\n return [callback!(result)]\n // } else if (isPlainObject(data)) {\n // const temp: any = {}\n // for (const key in result) {\n // if (!(key in data)) continue\n // temp[key] = data[key]\n // delete data[key]\n // }\n // Object.assign(data, callback!(temp))\n // return [callback!(result)]\n } else {\n return [callback!(result), callback!(adapted)]\n }\n})\n\ntype Formatter = (schema: Schema, inline?: boolean) => string\nconst formatters: Dict<Formatter> = {}\n\nfunction defineMethod(name: string, keys: (keyof Schema)[], format: Formatter) {\n formatters[name] = format\n Object.assign(Schema, {\n [name](...args: any[]) {\n const schema = new Schema({ type: name } as Schema)\n keys.forEach((key, index) => {\n switch (key) {\n case 'sKey': schema.sKey = args[index] ?? Schema.string(); break\n case 'inner': schema.inner = Schema.from(args[index]); break\n case 'list': schema.list = args[index].map(Schema.from); break\n case 'dict': schema.dict = valueMap(args[index], Schema.from); break\n case 'bits': {\n schema.bits = {}\n for (const key in args[index]) {\n if (typeof args[index][key] !== 'number') continue\n schema.bits[key] = args[index][key]\n }\n break\n }\n case 'callback': {\n const callback = schema.callback = args[index]\n ;callback['toJSON'] ||= () => callback.toString()\n break\n }\n case 'constructor': {\n const constructor = schema.constructor = args[index]\n if (typeof constructor === 'function') {\n ;constructor['toJSON'] ||= () => constructor['name']\n }\n break\n }\n default: schema[key] = args[index] as never\n }\n })\n if (name === 'object' || name === 'dict') {\n schema.meta.default = {}\n } else if (name === 'array' || name === 'tuple') {\n schema.meta.default = []\n } else if (name === 'bitset') {\n schema.meta.default = 0\n }\n return schema\n },\n })\n}\n\ndefineMethod('is', ['constructor'], ({ constructor }) => {\n if (typeof constructor === 'function') {\n return constructor.name\n } else {\n return constructor!\n }\n})\n\ndefineMethod('any', [], () => 'any')\ndefineMethod('never', [], () => 'never')\ndefineMethod('const', ['value'], ({ value }) => typeof value === 'string' ? JSON.stringify(value) : value)\ndefineMethod('string', [], () => 'string')\ndefineMethod('number', [], () => 'number')\ndefineMethod('boolean', [], () => 'boolean')\ndefineMethod('bitset', ['bits'], () => 'bitset')\ndefineMethod('function', [], () => 'function')\ndefineMethod('array', ['inner'], ({ inner }) => `${inner!.toString(true)}[]`)\ndefineMethod('dict', ['inner', 'sKey'], ({ inner, sKey }) => `{ [key: ${sKey!.toString()}]: ${inner!.toString()} }`)\ndefineMethod('tuple', ['list'], ({ list }) => `[${list!.map((inner) => inner.toString()).join(', ')}]`)\n\ndefineMethod('object', ['dict'], ({ dict }) => {\n if (Object.keys(dict!).length === 0) return '{}'\n return `{ ${Object.entries(dict!).map(([key, inner]) => {\n return `${key}${inner!.meta.required ? '' : '?'}: ${inner!.toString()}`\n }).join(', ')} }`\n})\n\ndefineMethod('union', ['list'], ({ list }, inline) => {\n const result = list!.map(({ toString: format }) => format()).join(' | ')\n return inline ? `(${result})` : result\n})\n\ndefineMethod('intersect', ['list'], ({ list }) => {\n return `${list!.map((inner) => inner.toString(true)).join(' & ')}`\n})\n\ndefineMethod('transform', ['inner', 'callback', 'preserve'], ({ inner }, isInner) => inner!.toString(isInner))\n\nexport = Schema\n","// packages/tlmemory/src/index.ts\n// 插件入口与装配中心(阶段二):\n// - 依赖注入:tools / llm / systemPrompt 三服务显式声明;\n// - 同步切片:systemPrompt.section 只消费内存预热缓存,严禁异步 I/O;\n// - 事件联动:user/message 预热召回缓存,turn/end 派发非阻塞反思提炼;\n// - 可逆注销:全部副作用(切片/工具/监听/服务/数据库)收敛于单一 Disposer。\n// Cordis 上下文声明合并统一收敛于 types.ts,此处严禁重复声明以免属性签名冲突。\nimport type { Context } from 'cordis'\nimport Schema from 'schemastery'\nimport path from 'node:path'\nimport fs from 'node:fs'\nimport crypto from 'node:crypto'\nimport { MemoryDB } from './db.js'\nimport { MemoryExtractor } from './extractor.js'\nimport { registerMemoryTools } from './tools.js'\nimport { MemoryRecallEngine } from './recall.js'\nimport { MemoryServer } from './server.js'\nimport type { SearchResult } from './types.js'\n\n// 阶段一交付物再导出(保证包构建产物完整性与回归断言通过)\nexport { MemoryDB } from './db.js'\nexport { MemoryExtractor } from './extractor.js'\nexport { registerMemoryTools } from './tools.js'\n// 阶段三交付物:嵌入式 REST 与 WebSocket 实时中继服务(供主包与测试用例引用)\nexport { MemoryServer } from './server.js'\nexport type {\n MemoryNode,\n MemoryScope,\n MemoryCategory,\n SearchOptions,\n SearchResult,\n RawReflectionItem,\n ReflectionResponse,\n SaveMemoryArgs,\n QueryMemoryArgs,\n} from './types.js'\n\nexport interface Config {\n dbPath?: string\n serverPort?: number\n maxRecallCount?: number\n enableAutoReflection?: boolean\n}\n\nexport const Config: Schema<Config> = Schema.object({\n dbPath: Schema.string().description('SQLite 数据库物理文件路径(默认置于全局 ~/.dsh/tlmemory.db)'),\n serverPort: Schema.number().default(4890).description('侧边栏与 REST API 服务端口'),\n maxRecallCount: Schema.number().default(5).description('单轮最大系统提示词注入记忆条数'),\n enableAutoReflection: Schema.boolean().default(true).description('是否开启会话结束异步自动反思提炼'),\n})\n\nexport const name = 'tlmemory'\nexport const inject = ['tools', 'llm', 'systemPrompt']\n\n/** 递归探测 .git 根目录并哈希截断生成项目作用域标识(repo:<12位sha256>) */\nfunction resolveProjectScope(): string {\n let currentDir = process.cwd()\n while (currentDir !== path.parse(currentDir).root) {\n if (fs.existsSync(path.join(currentDir, '.git'))) {\n const hash = crypto.createHash('sha256').update(path.normalize(currentDir)).digest('hex')\n return `repo:${hash.slice(0, 12)}`\n }\n currentDir = path.dirname(currentDir)\n }\n const fallbackHash = crypto.createHash('sha256').update(path.normalize(process.cwd())).digest('hex')\n return `repo:${fallbackHash.slice(0, 12)}`\n}\n\nexport function apply(ctx: Context, config: Config): () => void {\n ctx.logger?.info?.(`[tlmemory] 插件装配启动中...`)\n\n const db = new MemoryDB(config.dbPath)\n const recallEngine = new MemoryRecallEngine(db)\n const extractor = new MemoryExtractor(ctx, db)\n const projectScope = resolveProjectScope()\n\n let activeRecalledMemories: SearchResult[] = []\n let activePromptSectionText = ''\n\n // 挂载系统提示词切片:text 必须为纯同步函数,直接消费内存预热缓存,严禁异步 I/O\n const unregisterSection =\n ctx.systemPrompt?.section?.({\n name: 'tlmemory:injected-context',\n order: 115,\n text: () => activePromptSectionText,\n }) ?? (() => {})\n\n const unregisterTools = registerMemoryTools(ctx, db, () => projectScope)\n\n // 阶段二:网络服务为桩实现,仅承载生命周期接口\n const server = new MemoryServer(db, config.serverPort ?? 4890, ctx.logger)\n server.start()\n\n let lastUserMessage = ''\n\n // 监听会话事件流:用户输入同步预热召回缓存,轮次结束非阻塞派发反思提炼\n const unregisterSessionEvent = ctx.on('session/event' as any, (event: any) => {\n if (event?.type === 'user/message') {\n const text = typeof event.content === 'string' ? event.content : event.content?.text ?? ''\n lastUserMessage = text\n\n activeRecalledMemories = recallEngine.recall(text, projectScope, config.maxRecallCount ?? 5)\n activePromptSectionText = recallEngine.formatPromptBlock(activeRecalledMemories)\n\n server.broadcastHits(projectScope, activeRecalledMemories.map((m) => m.id))\n }\n\n if (event?.type === 'turn/end' && (config.enableAutoReflection ?? true)) {\n const assistantText = event.last_assistant_message ?? ''\n if (lastUserMessage && assistantText) {\n // 非阻塞后台微任务:主响应流完成后再执行反思提炼,对会话性能零损耗\n setImmediate(() => {\n extractor\n .extractAndConsolidate(lastUserMessage, assistantText, projectScope)\n .then(() => server.notifyTreeChanged(projectScope))\n .catch((err) => ctx.logger?.error?.('[tlmemory] 后台提炼长叶失败:', err))\n })\n }\n activePromptSectionText = ''\n lastUserMessage = ''\n }\n })\n\n return () => {\n ctx.logger?.info?.('[tlmemory] 正在执行全量副作用注销...')\n unregisterSection()\n unregisterTools()\n unregisterSessionEvent()\n server.stop()\n db.close()\n ctx.logger?.info?.('[tlmemory] 插件已彻底安全注销')\n }\n}","// packages/tlmemory/src/db.ts\n// SQLite 物化路径(Materialized Path)与 FTS5 Trigram 索引存储引擎。\n// 安全基线:\n// 1. 数据库物理路径默认强制收敛至 os.homedir()/.dsh/tlmemory.db,杜绝路径穿越。\n// 2. 所有树状路径分段必须通过白名单正则 ^[a-zA-Z0-9_\\u4e00-\\u9fa5\\-]+$ 校验净化。\nimport path from 'node:path'\nimport fs from 'node:fs'\nimport os from 'node:os'\nimport Database from 'better-sqlite3'\nimport type { MemoryNode, SearchOptions, SearchResult } from './types.js'\n\n/** 路径分段白名单正则:仅允许字母、数字、下划线、中文与连字符 */\nconst SEGMENT_WHITELIST = /[^a-zA-Z0-9_\\u4e00-\\u9fa5\\-]/g\n\nfunction sanitizeSegment(seg: unknown): string {\n return String(seg ?? '').replace(SEGMENT_WHITELIST, '').trim()\n}\n\n/** LIKE 通配符转义,防止恶意前缀绕过 */\nfunction escapeLikePattern(input: string): string {\n return input.replace(/[\\\\%_]/g, (m) => `\\\\${m}`)\n}\n\nexport class MemoryDB {\n private db: Database.Database\n\n constructor(dbPath?: string) {\n // 显式 ':memory:' 必须直达 SQLite 内存库,禁止落入默认磁盘路径分支\n const resolvedPath = dbPath === ':memory:' ? ':memory:' : dbPath ?? path.join(os.homedir(), '.dsh', 'tlmemory.db')\n if (resolvedPath !== ':memory:') {\n fs.mkdirSync(path.dirname(resolvedPath), { recursive: true })\n }\n this.db = new Database(resolvedPath)\n this.db.pragma('journal_mode = WAL')\n this.db.pragma('foreign_keys = ON')\n this.migrate()\n }\n\n private migrate(): void {\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS nodes (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n tree_type TEXT NOT NULL,\n parent_id INTEGER REFERENCES nodes(id),\n path TEXT NOT NULL,\n name TEXT NOT NULL,\n is_leaf INTEGER NOT NULL DEFAULT 0,\n content TEXT,\n keywords TEXT,\n reinforce_count INTEGER NOT NULL DEFAULT 1,\n is_pinned INTEGER NOT NULL DEFAULT 0,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n UNIQUE (tree_type, path, name)\n );\n\n CREATE INDEX IF NOT EXISTS idx_nodes_tree_path ON nodes(tree_type, path);\n\n CREATE VIRTUAL TABLE IF NOT EXISTS memory_fts USING fts5(\n tree_type, path, name, content, keywords,\n tokenize = 'trigram'\n );\n\n CREATE TRIGGER IF NOT EXISTS trg_nodes_ai AFTER INSERT ON nodes BEGIN\n INSERT INTO memory_fts(rowid, tree_type, path, name, content, keywords)\n VALUES (new.id, new.tree_type, new.path, new.name, new.content, new.keywords);\n END;\n\n CREATE TRIGGER IF NOT EXISTS trg_nodes_ad AFTER DELETE ON nodes BEGIN\n DELETE FROM memory_fts WHERE rowid = old.id;\n END;\n\n CREATE TRIGGER IF NOT EXISTS trg_nodes_au AFTER UPDATE ON nodes BEGIN\n DELETE FROM memory_fts WHERE rowid = old.id;\n INSERT INTO memory_fts(rowid, tree_type, path, name, content, keywords)\n VALUES (new.id, new.tree_type, new.path, new.name, new.content, new.keywords);\n END;\n `)\n }\n\n /**\n * 沿物化路径递归构建目录节点并在末端挂载/强化原子断言叶子。\n * 同 (tree_type, path, name) 冲突时执行强化:reinforce_count + 1 并更新内容与关键词。\n */\n public upsertLeaf(\n treeType: string,\n pathSegments: string[],\n name: string,\n content: string,\n keywords: string[],\n ): MemoryNode {\n const cleanSegments = (Array.isArray(pathSegments) ? pathSegments : [])\n .map(sanitizeSegment)\n .filter(Boolean)\n const fallbackSegments = cleanSegments.length > 0 ? cleanSegments : ['未分类']\n const cleanName = sanitizeSegment(name) || '未命名规则'\n const cleanContent = String(content ?? '').trim().slice(0, 80)\n const cleanKeywords = (Array.isArray(keywords) ? keywords : [])\n .map((k) => sanitizeSegment(k))\n .filter(Boolean)\n .join(' ')\n\n let parentId: number | null = null\n let fullPath = ''\n for (const seg of fallbackSegments) {\n fullPath += `/${seg}`\n parentId = this.upsertDirectory(treeType, parentId, `${fullPath}/`, seg)\n }\n\n return this.upsertNode(treeType, parentId, `${fullPath}/`, cleanName, 1, cleanContent, cleanKeywords)\n }\n\n private upsertDirectory(treeType: string, parentId: number | null, dirPath: string, name: string): number {\n const row = this.upsertNode(treeType, parentId, dirPath, name, 0, null, null)\n return Number(row.id)\n }\n\n private upsertNode(\n treeType: string,\n parentId: number | null,\n nodePath: string,\n name: string,\n isLeaf: number,\n content: string | null,\n keywords: string | null,\n ): MemoryNode {\n const now = Date.now()\n const result = this.db\n .prepare(`\n INSERT INTO nodes (tree_type, parent_id, path, name, is_leaf, content, keywords, reinforce_count, is_pinned, created_at, updated_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, 1, 0, ?, ?)\n ON CONFLICT(tree_type, path, name) DO UPDATE SET\n content = excluded.content,\n keywords = excluded.keywords,\n reinforce_count = reinforce_count + 1,\n updated_at = excluded.updated_at\n RETURNING *\n `)\n .get(treeType, parentId, nodePath, name, isLeaf, content, keywords, now, now) as Record<string, unknown>\n return this.rowToNode(result)\n }\n\n /** FTS5 Trigram 全文检索:BM25 排序,输出 score(越高越相关)与 bm25_rank */\n public search(query: string, options: SearchOptions = {}): SearchResult[] {\n const cleanQuery = String(query ?? '').trim()\n if (!cleanQuery) return []\n\n const { treeType, pathPrefix, limit = 5 } = options\n // 将查询包裹为短语查询,规避 FTS5 语法注入并兼容中英文混排 Trigram 匹配\n const matchQuery = `\"${cleanQuery.replace(/\"/g, '\"\"')}\"`\n\n const where: string[] = ['memory_fts MATCH ?']\n const params: unknown[] = [matchQuery]\n if (treeType) {\n where.push('n.tree_type = ?')\n params.push(treeType)\n }\n if (pathPrefix) {\n where.push(`n.path LIKE ? ESCAPE '\\\\'`)\n params.push(`${escapeLikePattern(pathPrefix)}%`)\n }\n params.push(limit)\n\n const rows = this.db\n .prepare(`\n SELECT n.*, bm25(memory_fts) AS bm25_score\n FROM memory_fts\n JOIN nodes n ON n.id = memory_fts.rowid\n WHERE ${where.join(' AND ')}\n ORDER BY bm25(memory_fts)\n LIMIT ?\n `)\n .all(...params) as Array<Record<string, unknown>>\n\n return rows.map((row, index) => {\n const node = this.rowToNode(row)\n const bm25 = Number(row.bm25_score ?? 0)\n return {\n ...node,\n score: Math.round(-bm25 * 100) / 100,\n bm25_rank: index + 1,\n } satisfies SearchResult\n })\n }\n\n public getAllNodes(treeType?: string): MemoryNode[] {\n const rows = treeType\n ? this.db.prepare('SELECT * FROM nodes WHERE tree_type = ? ORDER BY tree_type, path, name').all(treeType)\n : this.db.prepare('SELECT * FROM nodes ORDER BY tree_type, path, name').all()\n return (rows as Array<Record<string, unknown>>).map((row) => this.rowToNode(row))\n }\n\n /**\n * 人工剪枝:删除指定节点并级联移除其全部后代(沿 parent_id 外键链递归收敛),\n * 每行删除均经 trg_nodes_ad 触发器同步清理 FTS5 索引,杜绝孤立句柄残留。\n */\n public deleteNode(id: string): boolean {\n const result = this.db\n .prepare(`\n WITH RECURSIVE subtree(id) AS (\n SELECT id FROM nodes WHERE id = ?\n UNION ALL\n SELECT n.id FROM nodes n JOIN subtree s ON n.parent_id = s.id\n )\n DELETE FROM nodes WHERE id IN (SELECT id FROM subtree)\n `)\n .run(Number(id))\n return result.changes > 0\n }\n\n public close(): void {\n if (this.db.open) this.db.close()\n }\n\n private rowToNode(row: Record<string, unknown>): MemoryNode {\n return {\n id: String(row.id),\n tree_type: String(row.tree_type),\n parent_id: row.parent_id == null ? null : String(row.parent_id),\n path: String(row.path),\n name: String(row.name),\n is_leaf: Number(row.is_leaf ?? 0),\n content: row.content == null ? null : String(row.content),\n keywords: row.keywords == null ? null : String(row.keywords),\n reinforce_count: Number(row.reinforce_count ?? 0),\n is_pinned: Number(row.is_pinned ?? 0),\n created_at: Number(row.created_at ?? 0),\n updated_at: Number(row.updated_at ?? 0),\n }\n }\n}\n","// packages/tlmemory/src/extractor.ts\n// 异步深度反思长叶引擎:启发式门控 -> 活跃 LLM 流式结构化抽取 -> 物理原子化截断与路径净化。\nimport type { Context } from 'cordis'\nimport type { MemoryDB } from './db.js'\nimport type { RawReflectionItem, ReflectionResponse } from './types.js'\n\nconst REFLECTION_SYSTEM_PROMPT = `你是一个软件工程经验沉淀引擎。请审视刚才这一轮人机交互,提取长期有效的高价值架构规约、开发规范或避坑经验。\n\n【提炼规则】\n1. 坚决舍弃:单次临时对话、闲聊客套、简单拼写修复以及未得出明确结论的推演过程。\n2. 作用域划分标准:\n - global:跨项目通用的用户编码偏好、通用工具链规约或通用开发习惯。\n - project:当前仓库专有的架构设计、模块划分约定、特定依赖版本规约与特有踩坑反思。\n3. 文本压缩约束:\n - content 字段必须是提炼后的原子断言或操作约束,严禁输出代码块或情绪化长文。\n - 字符长度严格限制在 40 至 80 个中文字符以内。\n4. 路径分段(path_segments)通常包含 2 至 3 级中文分类名(例如 [\"技术选型\", \"构建工具\"])。\n\n【输出格式】\n必须严格输出纯 JSON 对象,严禁包裹任何代码块外的 Markdown 解释性文本:\n{\n \"reflections\": [\n {\n \"tree\": \"global\" | \"project\",\n \"path_segments\": [\"分类一级\", \"分类二级\"],\n \"name\": \"规则简名\",\n \"content\": \"40到80字高度精炼的核心断言规则\",\n \"keywords\": [\"关键词1\", \"关键词2\"]\n }\n ]\n}\n若本轮交互无长期价值,请直接输出 {\"reflections\": []}。`\n\nexport class MemoryExtractor {\n constructor(\n private ctx: Context,\n private db: MemoryDB,\n ) {}\n\n /** 第一重门禁:启发式过滤网关,丢弃寒暄客套与长度不足的文本 */\n private passesFilterGate(text: string): boolean {\n if (!text || text.trim().length < 15) return false\n const trivialPatterns = [\n /^(你好|在吗|hi|hello|继续|收到|好的|ok|yes)$/i,\n /^(谢谢|thank you|thanks)$/i,\n ]\n return !trivialPatterns.some((pattern) => pattern.test(text.trim()))\n }\n\n public async extractAndConsolidate(\n userMessage: string,\n assistantResponse: string,\n projectScope: string,\n ): Promise<void> {\n if (!this.passesFilterGate(userMessage) && !this.passesFilterGate(assistantResponse)) {\n return\n }\n\n if (!this.ctx.llm?.stream) {\n this.ctx.logger?.warn?.('[tlmemory] 宿主 ctx.llm 未就绪,跳过反思提取')\n return\n }\n\n const conversationContext = `[用户输入]\\n${userMessage}\\n\\n[智能体答复与操作]\\n${assistantResponse}`\n\n try {\n const stream = this.ctx.llm.stream({\n messages: [\n { role: 'system', content: REFLECTION_SYSTEM_PROMPT },\n { role: 'user', content: conversationContext },\n ],\n temperature: 0.1,\n })\n\n let rawOutput = ''\n for await (const chunk of stream) {\n rawOutput += chunk.delta || chunk.text || chunk.content || ''\n }\n\n const cleanJson = this.sanitizeJsonString(rawOutput)\n const parsed: ReflectionResponse = JSON.parse(cleanJson)\n\n if (!parsed.reflections || !Array.isArray(parsed.reflections)) {\n return\n }\n\n for (const item of parsed.reflections) {\n this.processSingleReflection(item, projectScope)\n }\n } catch (err) {\n this.ctx.logger?.error?.('[tlmemory] 异步反思提炼过程异常:', err)\n }\n }\n\n /** 剥离 Markdown 代码块围栏并收敛至首个 JSON 对象边界 */\n private sanitizeJsonString(raw: string): string {\n let sanitized = raw.trim()\n if (sanitized.startsWith('```json')) {\n sanitized = sanitized.slice(7)\n } else if (sanitized.startsWith('```')) {\n sanitized = sanitized.slice(3)\n }\n if (sanitized.endsWith('```')) {\n sanitized = sanitized.slice(0, -3)\n }\n sanitized = sanitized.trim()\n\n // 兜底收敛:仅保留首个 '{' 至末尾 '}' 之间的片段\n const start = sanitized.indexOf('{')\n const end = sanitized.lastIndexOf('}')\n if (start !== -1 && end !== -1 && end > start) {\n sanitized = sanitized.slice(start, end + 1)\n }\n return sanitized.trim()\n }\n\n private processSingleReflection(item: RawReflectionItem, projectScope: string): void {\n if (!item.content || !item.name) return\n\n // 第三重门禁:物理级原子化硬截断,单条断言不允许超过 80 字\n const boundedContent = item.content.trim().slice(0, 80)\n const targetTreeType = item.tree === 'global' ? 'global' : projectScope\n\n // 路径分段白名单净化,拦截 ../ ./ 空字节与转义通配符\n const cleanSegments = (item.path_segments || ['默认'])\n .map((seg) => seg.replace(/[^a-zA-Z0-9_\\u4e00-\\u9fa5]/g, ''))\n .filter(Boolean)\n\n if (cleanSegments.length === 0) cleanSegments.push('通用')\n\n const cleanKeywords = Array.isArray(item.keywords)\n ? item.keywords.map((k) => k.trim()).filter((k) => k.length > 0)\n : [item.name]\n\n this.db.upsertLeaf(\n targetTreeType,\n cleanSegments,\n item.name.replace(/[^a-zA-Z0-9_\\u4e00-\\u9fa5]/g, ''),\n boundedContent,\n cleanKeywords,\n )\n this.ctx.logger?.info?.(`[tlmemory] 知识沉淀入库 [${targetTreeType}]: ${item.name}`)\n }\n}","// packages/tlmemory/src/tools.ts\nimport type { Context } from \"cordis\";\nimport type { MemoryDB } from \"./db.js\";\n\nexport function registerMemoryTools(\n ctx: Context,\n db: MemoryDB,\n resolveCurrentScope: () => string,\n): () => void {\n if (!ctx.tools?.register) {\n ctx.logger?.warn?.(\"[tlmemory] ctx.tools 未就绪,跳过工具注册\");\n return () => {};\n }\n\n const unregisterSave = ctx.tools.register({\n name: \"tlmemory_save\",\n description:\n \"显式将重要用户规范、技术架构约束或踩坑避坑断言持久化至长期记忆树中\",\n parameters: {\n type: \"object\",\n properties: {\n tree_scope: {\n type: \"string\",\n enum: [\"global\", \"project\"],\n description:\n \"作用域:global 属于跨工程全局偏好,project 属于当前仓库专属规约\",\n },\n path_segments: {\n type: \"array\",\n items: { type: \"string\" },\n description: '树形分类路径段,例如 [\"工程化\", \"包管理\"]',\n },\n rule_name: {\n type: \"string\",\n description: '规则简述标题,例如 \"pnpm依赖构建放行\"',\n },\n content: {\n type: \"string\",\n description:\n \"原子断言文本,严格限制在40至80字符以内,禁止包含多余代码块\",\n },\n keywords: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"检索关键词列表\",\n },\n },\n required: [\n \"tree_scope\",\n \"path_segments\",\n \"rule_name\",\n \"content\",\n \"keywords\",\n ],\n },\n output: {\n schema: {\n type: \"object\",\n properties: {\n status: { type: \"string\", description: \"执行状态\" },\n message: { type: \"string\", description: \"详细提示信息\" },\n node_id: { type: \"string\", description: \"记忆节点唯一标识\" },\n },\n required: [\"status\", \"message\", \"node_id\"],\n },\n render: (result: any) => result?.message ?? JSON.stringify(result),\n },\n async execute(args: {\n tree_scope: \"global\" | \"project\";\n path_segments: string[];\n rule_name: string;\n content: string;\n keywords: string[];\n }) {\n const targetTree =\n args.tree_scope === \"global\" ? \"global\" : resolveCurrentScope();\n const sanitizedSegments = args.path_segments.map((s) =>\n s.replace(/[^a-zA-Z0-9_\\u4e00-\\u9fa5]/g, \"\"),\n );\n const sanitizedName = args.rule_name.replace(\n /[^a-zA-Z0-9_\\u4e00-\\u9fa5]/g,\n \"\",\n );\n const boundedContent = args.content.slice(0, 80);\n\n const node = db.upsertLeaf(\n targetTree,\n sanitizedSegments,\n sanitizedName,\n boundedContent,\n args.keywords || [sanitizedName],\n );\n\n return {\n status: \"success\",\n message: `记忆已成功入库 [${node.tree_type}]: ${node.path}${node.name}`,\n node_id: node.id,\n };\n },\n });\n\n const unregisterQuery = ctx.tools.register({\n name: \"tlmemory_query\",\n description:\n \"通过 FTS5 Trigram 全文索引检索与当前任务紧密相关的长期记忆断言\",\n parameters: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"查询文本或技术关键字\",\n },\n scope: {\n type: \"string\",\n enum: [\"all\", \"global\", \"project\"],\n description: \"查询范围,默认 all 覆盖全局与当前工程\",\n },\n limit: {\n type: \"number\",\n description: \"最大检索结果数,默认 5\",\n },\n },\n required: [\"query\"],\n },\n output: {\n schema: {\n type: \"object\",\n properties: {\n status: { type: \"string\", description: \"执行状态\" },\n hits_count: { type: \"number\", description: \"命中条数\" },\n memories: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n tree: { type: \"string\" },\n path: { type: \"string\" },\n content: { type: \"string\" },\n score: { type: \"number\" },\n },\n },\n description: \"命中的记忆列表\",\n },\n },\n required: [\"status\", \"hits_count\", \"memories\"],\n },\n render: (result: any) => {\n if (!result.memories || result.memories.length === 0) {\n return \"未检索到相关的长期记忆。\";\n }\n return result.memories\n .map(\n (m: any) =>\n `* [${m.tree}] ${m.path}: ${m.content} (得分: ${m.score.toFixed(1)})`,\n )\n .join(\"\\n\");\n },\n },\n async execute(args: {\n query: string;\n scope?: \"all\" | \"global\" | \"project\";\n limit?: number;\n }) {\n const currentScope = resolveCurrentScope();\n let treeType: string | undefined;\n if (args.scope === \"global\") treeType = \"global\";\n if (args.scope === \"project\") treeType = currentScope;\n\n const results = db.search(args.query, {\n treeType,\n limit: args.limit || 5,\n });\n\n return {\n status: \"success\",\n hits_count: results.length,\n memories: results.map((r) => ({\n tree: r.tree_type === \"global\" ? \"全局偏好\" : \"当前工程\",\n path: `${r.path}${r.name}`,\n content: r.content ?? \"\",\n score: r.score,\n })),\n };\n },\n });\n\n return () => {\n unregisterSave();\n unregisterQuery();\n };\n}\n","// packages/tlmemory/src/recall.ts\n// 复合加权召回引擎与系统提示词注入格式化器。\n// 打分模型:当前工程记忆叠加 ScopeBias 保证项目级契约在检索中绝对优先;\n// 输出统一收敛进 <long_term_memory_context> 受控标签,并进行 XML 实体转义阻断逃逸注入。\nimport type { MemoryDB } from './db.js'\nimport type { SearchResult } from './types.js'\n\n/** 当前工程记忆作用域偏置:体现当前代码规约的绝对优先级 */\nconst PROJECT_SCOPE_BIAS = 5.0\n\n/** 第二重门禁:XML 实体转义(& < > 全覆盖),阻断针对系统提示词上下文结构的逃逸攻击 */\nfunction escapeXmlEntities(input: string): string {\n return input\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n}\n\nexport class MemoryRecallEngine {\n constructor(private db: MemoryDB) {}\n\n /**\n * 双轨召回:项目记忆与全局记忆分别经 FTS5 检索后合流,\n * 项目命中叠加作用域偏置,按加权分数降序去重截断。\n * 用户输入为长句时,FTS5 Trigram 短语匹配要求完整连续子串、几乎必然零命中,\n * 因此先执行查询候选展开(整句 / 标点切分 token / 中英文段 / 中文滑窗子串),\n * 再跨候选聚合加权去重,保证长句输入同样能命中语义相关的记忆断言。\n */\n public recall(query: string, projectScope: string, maxCount: number = 5): SearchResult[] {\n const cleanQuery = query.trim()\n if (!cleanQuery) return []\n\n const candidates = this.expandQueryCandidates(cleanQuery)\n const merged = new Map<string, SearchResult>()\n\n for (const candidate of candidates) {\n const projectHits = this.db.search(candidate, { treeType: projectScope, limit: maxCount })\n const globalHits = this.db.search(candidate, { treeType: 'global', limit: maxCount })\n\n for (const hit of projectHits) {\n const uniqueKey = `${hit.tree_type}:${hit.path}${hit.name}`\n merged.set(uniqueKey, { ...hit, score: hit.score + PROJECT_SCOPE_BIAS })\n }\n for (const hit of globalHits) {\n const uniqueKey = `${hit.tree_type}:${hit.path}${hit.name}`\n // 已由项目作用域命中时保留偏置版本,否则采用全局分数\n if (!merged.has(uniqueKey)) merged.set(uniqueKey, hit)\n }\n }\n\n return Array.from(merged.values())\n .sort((a, b) => b.score - a.score)\n .slice(0, maxCount)\n }\n\n /** 查询候选展开:整句 -> 标点/空白切分 -> 中英文边界分段 -> 中文长段 Trigram 级滑窗子串 */\n private expandQueryCandidates(query: string): string[] {\n const candidates = new Set<string>([query])\n const tokens = query.split(/[\\s,,。;;、::!!??\"'()()\\[\\]{}]+/).filter((t) => t.length > 0)\n\n for (const token of tokens) {\n candidates.add(token)\n const segments = token.match(/[a-zA-Z0-9_-]+|[\\u4e00-\\u9fa5]+/g) ?? [token]\n for (const seg of segments) {\n candidates.add(seg)\n if (/[\\u4e00-\\u9fa5]/.test(seg) && seg.length > 3) {\n // FTS5 Trigram 的检索键最小粒度为 3 字:按 3 字窗口、2 字步长滑窗\n // (4 字窗口会因偶数步长错过奇数起点的 Trigram 序列,造成长句零命中)\n for (let i = 0; i <= seg.length - 3; i += 2) {\n candidates.add(seg.slice(i, i + 3))\n }\n candidates.add(seg.slice(-3))\n }\n }\n }\n return Array.from(candidates).slice(0, 16)\n }\n\n /** 将召回记忆格式化为受控 XML 标签包裹的同步注入文本,空结果返回空串 */\n public formatPromptBlock(memories: SearchResult[]): string {\n if (memories.length === 0) return ''\n\n const lines = memories.map((m) => {\n const scopeLabel = m.tree_type === 'global' ? '全局偏好' : '当前工程'\n const cleanPath = escapeXmlEntities(`${m.path}${m.name}`)\n const cleanContent = escapeXmlEntities(m.content || '')\n return ` - [${scopeLabel}] ${cleanPath}: ${cleanContent}`\n })\n\n return [\n '<long_term_memory_context>',\n '以下是系统自动检索匹配的长期工程契约与避坑经验,你在本轮推理与工具调用中必须严格遵守:',\n ...lines,\n '</long_term_memory_context>',\n ].join('\\n')\n }\n}","// packages/tlmemory/src/server.ts\n// 轻量内嵌服务与实时通信中继层(阶段三生产版)。\n// 安全基线(CVE-2026-82533 回环穿透防御):\n// 1. listen 严格显式绑定 IPv4 回环 127.0.0.1,严禁监听 0.0.0.0;\n// 2. WebSocket upgrade 握手强校验 Host 与 Origin 双头,仅放行 127.0.0.1 / localhost;\n// 3. 静态资源经 path.normalize 归一化并强制锚定 dist 根内,拦截目录穿越逃逸。\nimport http from 'node:http'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { WebSocketServer, WebSocket } from 'ws'\nimport type { MemoryDB } from './db.js'\n\n/** 回环绑定常量:严禁替换为 0.0.0.0 或省略(省略将默认绑定所有网卡) */\nconst LOOPBACK_HOST = '127.0.0.1'\n\nconst MIME_MAP: Record<string, string> = {\n '.html': 'text/html; charset=utf-8',\n '.js': 'application/javascript',\n '.css': 'text/css',\n '.svg': 'image/svg+xml',\n '.png': 'image/png',\n '.json': 'application/json; charset=utf-8',\n}\n\n/** Host 头白名单校验:仅接受 IPv4 回环地址与 localhost 主机名 */\nfunction isAllowedHost(hostHeader: string | undefined): boolean {\n if (!hostHeader) return false\n const hostname = hostHeader.split(':')[0].toLowerCase()\n return hostname === '127.0.0.1' || hostname === 'localhost'\n}\n\n/**\n * Origin 头白名单校验:阻断跨站 WebSocket 劫持(CSWSH)。\n * 浏览器连接强制携带 Origin 且 JS 无法伪造,非回环 Origin 一律销毁;\n * 本地非浏览器客户端(如 ws 库)不携带 Origin,属合法本地调用,放行(Host 校验仍在)。\n */\nfunction isAllowedOrigin(originHeader: string | undefined): boolean {\n if (!originHeader) return true\n return originHeader.includes('127.0.0.1') || originHeader.includes('localhost')\n}\n\n/** 解析 web/dist 静态产物根目录(兼容 CJS __dirname 与 ESM import.meta.url 双产物) */\nfunction resolveWebDist(): string {\n const currentDir =\n typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url))\n return path.resolve(currentDir, '../web/dist')\n}\n\nexport class MemoryServer {\n private server: http.Server | null = null\n private wss: WebSocketServer | null = null\n private clients: Set<WebSocket> = new Set()\n private readonly distPath: string\n\n constructor(\n private db: MemoryDB,\n private port: number = 4890,\n private logger?: { info: (...args: unknown[]) => void; error: (...args: unknown[]) => void },\n ) {\n this.distPath = resolveWebDist()\n }\n\n public get actualPort(): number {\n const addr = this.server?.address()\n return typeof addr === 'object' && addr !== null ? addr.port : 0\n }\n\n public start(): void {\n if (this.server) return\n\n this.server = http.createServer((req, res) => {\n this.handleHttp(req, res)\n })\n\n this.wss = new WebSocketServer({ noServer: true })\n\n this.wss.on('connection', (ws: WebSocket) => {\n this.clients.add(ws)\n ws.on('close', () => this.clients.delete(ws))\n })\n\n // upgrade 握手:Host 与 Origin 双头白名单校验,任一不合法立即销毁底层 socket\n this.server.on('upgrade', (request, socket, head) => {\n if (!isAllowedHost(request.headers.host) || !isAllowedOrigin(request.headers.origin)) {\n socket.destroy()\n return\n }\n this.wss?.handleUpgrade(request, socket, head, (ws) => {\n this.wss?.emit('connection', ws, request)\n })\n })\n\n // 绝对绑定至本地回环地址,严禁监听 0.0.0.0\n this.server.listen(this.port, LOOPBACK_HOST, () => {\n this.logger?.info?.(`[tlmemory-server] 本地管理服务就绪: http://127.0.0.1:${this.port}`)\n })\n\n this.server.on('error', (err) => {\n this.logger?.error?.('[tlmemory-server] 本地网络服务异常:', (err as Error).message)\n })\n }\n\n public broadcastHits(treeType: string, hitNodeIds: string[]): void {\n const payload = JSON.stringify({\n type: 'MEMORY_HITS',\n treeType,\n hitNodeIds,\n timestamp: Date.now(),\n })\n for (const client of this.clients) {\n if (client.readyState === WebSocket.OPEN) {\n client.send(payload)\n }\n }\n }\n\n public notifyTreeChanged(treeType: string): void {\n const payload = JSON.stringify({\n type: 'TREE_CHANGED',\n treeType,\n timestamp: Date.now(),\n })\n for (const client of this.clients) {\n if (client.readyState === WebSocket.OPEN) {\n client.send(payload)\n }\n }\n }\n\n private handleHttp(req: http.IncomingMessage, res: http.ServerResponse): void {\n res.setHeader('Access-Control-Allow-Origin', '*')\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, DELETE, OPTIONS')\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type')\n\n if (req.method === 'OPTIONS') {\n res.writeHead(204)\n res.end()\n return\n }\n\n const url = new URL(req.url || '/', `http://${req.headers.host || '127.0.0.1'}`)\n const pathname = url.pathname\n\n try {\n if (req.method === 'GET' && pathname === '/api/nodes') {\n const treeType = url.searchParams.get('treeType') ?? undefined\n const nodes = this.db.getAllNodes(treeType)\n this.sendJson(res, 200, { data: nodes })\n return\n }\n\n // 记忆树读取契约:GET /api/memories?tree=global\n // 与 /api/nodes 共享同一数据源,tree/treeType 参数均被接受(tree 优先)\n if (req.method === 'GET' && pathname === '/api/memories') {\n const treeType =\n url.searchParams.get('tree') ?? url.searchParams.get('treeType') ?? undefined\n const nodes = this.db.getAllNodes(treeType)\n this.sendJson(res, 200, { data: nodes })\n return\n }\n\n if (req.method === 'GET' && pathname === '/api/search') {\n const query = url.searchParams.get('q') || ''\n const treeType = url.searchParams.get('treeType') ?? undefined\n const hits = this.db.search(query, { treeType })\n this.sendJson(res, 200, { data: hits })\n return\n }\n\n if (req.method === 'DELETE' && pathname.startsWith('/api/nodes/')) {\n const id = pathname.slice('/api/nodes/'.length)\n const removed = this.db.deleteNode(id)\n this.sendJson(res, 200, { success: removed })\n return\n }\n\n this.serveStatic(req, res, pathname)\n } catch (e) {\n this.sendJson(res, 500, { error: (e as Error).message })\n }\n }\n\n private serveStatic(req: http.IncomingMessage, res: http.ServerResponse, pathname: string): void {\n const distPath = this.distPath\n let safePath = path.normalize(path.join(distPath, pathname === '/' ? 'index.html' : pathname))\n\n // 目录穿越防护:normalize 归一化后必须严格锚定在 dist 根目录内(含路径分隔符,防前缀绕过)\n if (!safePath.startsWith(distPath + path.sep)) {\n res.writeHead(403)\n res.end('Forbidden')\n return\n }\n\n if (!fs.existsSync(safePath) || fs.statSync(safePath).isDirectory()) {\n safePath = path.join(distPath, 'index.html')\n }\n\n if (!fs.existsSync(safePath)) {\n res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' })\n res.end('前端静态资源尚未构建,请进入 packages/tlmemory/web 执行 pnpm build')\n return\n }\n\n const ext = path.extname(safePath)\n res.writeHead(200, { 'Content-Type': MIME_MAP[ext] || 'application/octet-stream' })\n fs.createReadStream(safePath).pipe(res)\n }\n\n private sendJson(res: http.ServerResponse, statusCode: number, data: unknown): void {\n res.writeHead(statusCode, { 'Content-Type': 'application/json; charset=utf-8' })\n res.end(JSON.stringify(data))\n }\n\n public stop(): void {\n for (const client of this.clients) {\n client.terminate()\n }\n this.clients.clear()\n this.wss?.close()\n this.server?.close()\n this.wss = null\n this.server = null\n }\n}"],"mappings":"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","names":["value","Binary","result","a","b","Time","template","options","pattern","value","date","name","key","path","fs","name","fs","path","path","fs"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dsh-plugin-tlmemory",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Cross-session and cross-project memory manager for dsh",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"web/dist"
|
|
12
|
+
],
|
|
13
|
+
"peerDependencies": {
|
|
14
|
+
"cordis": "^3.0.0"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"better-sqlite3": "^11.8.0",
|
|
18
|
+
"ws": "^8.18.0"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@types/better-sqlite3": "^7.6.12",
|
|
22
|
+
"@types/node": "^20.0.0",
|
|
23
|
+
"@types/ws": "^8.5.14",
|
|
24
|
+
"cordis": "^3.0.0",
|
|
25
|
+
"schemastery": "^3.18.0",
|
|
26
|
+
"tsup": "^8.0.0",
|
|
27
|
+
"typescript": "^5.0.0",
|
|
28
|
+
"vitest": "^3.2.7"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsup",
|
|
32
|
+
"dev": "tsup --watch",
|
|
33
|
+
"test": "vitest run"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))n(r);new MutationObserver(r=>{for(const i of r)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&n(o)}).observe(document,{childList:!0,subtree:!0});function s(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?i.credentials="include":r.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function n(r){if(r.ep)return;r.ep=!0;const i=s(r);fetch(r.href,i)}})();/**
|
|
2
|
+
* @vue/shared v3.5.42
|
|
3
|
+
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
4
|
+
* @license MIT
|
|
5
|
+
**/function tn(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const q={},gt=[],De=()=>{},sr=()=>!1,ds=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),hs=e=>e.startsWith("onUpdate:"),ie=Object.assign,sn=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},Si=Object.prototype.hasOwnProperty,K=(e,t)=>Si.call(e,t),A=Array.isArray,et=e=>Kt(e)==="[object Map]",ss=e=>Kt(e)==="[object Set]",wn=e=>Kt(e)==="[object Date]",M=e=>typeof e=="function",Q=e=>typeof e=="string",ve=e=>typeof e=="symbol",B=e=>e!==null&&typeof e=="object",nr=e=>(B(e)||M(e))&&M(e.then)&&M(e.catch),rr=Object.prototype.toString,Kt=e=>rr.call(e),wi=e=>Kt(e).slice(8,-1),ir=e=>Kt(e)==="[object Object]",ps=e=>Q(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Ot=tn(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),gs=e=>{const t=Object.create(null);return s=>t[s]||(t[s]=e(s))},Ci=/-\w/g,we=gs(e=>e.replace(Ci,t=>t.slice(1).toUpperCase())),Ei=/\B([A-Z])/g,ut=gs(e=>e.replace(Ei,"-$1").toLowerCase()),or=gs(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ps=gs(e=>e?`on${or(e)}`:""),$e=(e,t)=>!Object.is(e,t),Zt=(e,...t)=>{for(let s=0;s<e.length;s++)e[s](...t)},lr=(e,t,s,n=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:s})},nn=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Cn;const _s=()=>Cn||(Cn=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function rn(e){if(A(e)){const t={};for(let s=0;s<e.length;s++){const n=e[s],r=Q(n)?Pi(n):rn(n);if(r)for(const i in r)t[i]=r[i]}return t}else if(Q(e)||B(e))return e}const Ti=/;(?![^(]*\))/g,Oi=/:([^]+)/,Ai=/\/\*[^]*?\*\//g;function Pi(e){const t={};return e.replace(Ai,"").split(Ti).forEach(s=>{if(s){const n=s.split(Oi);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function ot(e){let t="";if(Q(e))t=e;else if(A(e))for(let s=0;s<e.length;s++){const n=ot(e[s]);n&&(t+=n+" ")}else if(B(e))for(const s in e)e[s]&&(t+=s+" ");return t.trim()}const Ri="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Mi=tn(Ri);function cr(e){return!!e||e===""}function Ii(e,t){if(e.length!==t.length)return!1;let s=!0;for(let n=0;s&&n<e.length;n++)s=ms(e[n],t[n]);return s}function En(e,t){if(e.size!==t.size)return!1;const s=Array.from(t),n=new Uint8Array(s.length);for(const r of e){let i=-1;for(let o=0;o<s.length;o++)if(!n[o]&&ms(r,s[o])){i=o;break}if(i<0)return!1;n[i]=1}return!0}function ms(e,t){if(e===t)return!0;let s=wn(e),n=wn(t);if(s||n)return s&&n?e.getTime()===t.getTime():!1;if(s=ve(e),n=ve(t),s||n)return e===t;if(s=A(e),n=A(t),s||n)return s&&n?Ii(e,t):!1;if(s=B(e),n=B(t),s||n){if(!s||!n)return!1;if(s=et(e),n=et(t),s||n||(s=ss(e),n=ss(t),s||n))return s&&n?En(e,t):!1;const r=Object.keys(e).length,i=Object.keys(t).length;if(r!==i)return!1;for(const o in e){const l=e.hasOwnProperty(o),c=t.hasOwnProperty(o);if(l&&!c||!l&&c||!ms(e[o],t[o]))return!1}}return String(e)===String(t)}const fr=e=>!!(e&&e.__v_isRef===!0),he=e=>Q(e)?e:e==null?"":A(e)||B(e)&&(e.toString===rr||!M(e.toString))?fr(e)?he(e.value):JSON.stringify(e,ur,2):String(e),ur=(e,t)=>fr(t)?ur(e,t.value):et(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[n,r],i)=>(s[Rs(n,i)+" =>"]=r,s),{})}:ss(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>Rs(s))}:ve(t)?Rs(t):B(t)&&!A(t)&&!ir(t)?String(t):t,Rs=(e,t="")=>{var s;return ve(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};/**
|
|
6
|
+
* @vue/reactivity v3.5.42
|
|
7
|
+
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
8
|
+
* @license MIT
|
|
9
|
+
**/let se;class ar{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&se&&(se.active?(this.parent=se,this.index=(se.scopes||(se.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes){const n=this.scopes.slice();for(t=0,s=n.length;t<s;t++)n[t].pause()}for(t=0,s=this.effects.length;t<s;t++)this.effects[t].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let t,s;if(this.scopes){const r=this.scopes.slice();for(t=0,s=r.length;t<s;t++)r[t].resume()}const n=this.effects.slice();for(t=0,s=n.length;t<s;t++)n[t].resume()}}run(t){if(this._active){const s=se;try{return se=this,t()}finally{se=s}}}on(){++this._on===1&&(this.prevScope=se,se=this)}off(){if(this._on>0&&--this._on===0){if(se===this)se=this.prevScope;else{let t=se;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let s,n;for(s=0,n=this.effects.length;s<n;s++)this.effects[s].stop();for(this.effects.length=0,s=0,n=this.cleanups.length;s<n;s++)this.cleanups[s]();if(this.cleanups.length=0,this.scopes){const r=this.scopes.slice();for(s=0,n=r.length;s<n;s++)r[s].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!t){const r=this.parent.scopes.pop();r&&r!==this&&(this.parent.scopes[this.index]=r,r.index=this.index)}this.parent=void 0}}}function dr(e){return new ar(e)}function hr(){return se}function Fi(e,t=!1){se&&se.cleanups.push(e)}let Y;const Ms=new WeakSet;class pr{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,se&&(se.active?se.effects.push(this):this.flags&=-2)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,Ms.has(this)&&(Ms.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||_r(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,Tn(this),mr(this);const t=Y,s=Ce;Y=this,Ce=!0;try{return this.fn()}finally{br(this),Y=t,Ce=s,this.flags&=-3}}stop(){if(this.flags&1){for(let t=this.deps;t;t=t.nextDep)cn(t);this.deps=this.depsTail=void 0,Tn(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?Ms.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){Ws(this)&&this.run()}get dirty(){return Ws(this)}}let gr=0,At,Pt;function _r(e,t=!1){if(e.flags|=8,t){e.next=Pt,Pt=e;return}e.next=At,At=e}function on(){gr++}function ln(){if(--gr>0)return;if(Pt){let t=Pt;for(Pt=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;At;){let t=At;for(At=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=s}}if(e)throw e}function mr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function br(e){let t,s=e.depsTail,n=s;for(;n;){const r=n.prevDep;n.version===-1?(n===s&&(s=r),cn(n),ji(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=r}e.deps=t,e.depsTail=s}function Ws(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(yr(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function yr(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Nt)||(e.globalVersion=Nt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ws(e))))return;e.flags|=2;const t=e.dep,s=Y,n=Ce;Y=e,Ce=!0;try{mr(e);const r=e.fn(e._value);(t.version===0||$e(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{Y=s,Ce=n,br(e),e.flags&=-3}}function cn(e,t=!1){const{dep:s,prevSub:n,nextSub:r}=e;if(n&&(n.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=n,e.nextSub=void 0),s.subs===e&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let i=s.computed.deps;i;i=i.nextDep)cn(i,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function ji(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let Ce=!0;const xr=[];function ke(){xr.push(Ce),Ce=!1}function qe(){const e=xr.pop();Ce=e===void 0?!0:e}function Tn(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=Y;Y=void 0;try{t()}finally{Y=s}}}let Nt=0;class Ni{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class fn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Y||!Ce||Y===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==Y)s=this.activeLink=new Ni(Y,this),Y.deps?(s.prevDep=Y.depsTail,Y.depsTail.nextDep=s,Y.depsTail=s):Y.deps=Y.depsTail=s,vr(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=Y.depsTail,s.nextDep=void 0,Y.depsTail.nextDep=s,Y.depsTail=s,Y.deps===s&&(Y.deps=n)}return s}trigger(t){this.version++,Nt++,this.notify(t)}notify(t){on();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{ln()}}}function vr(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)vr(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const ns=new WeakMap,lt=Symbol(""),Bs=Symbol(""),$t=Symbol("");function le(e,t,s){if(Ce&&Y){let n=ns.get(e);n||ns.set(e,n=new Map);let r=n.get(s);r||(n.set(s,r=new fn),r.map=n,r.key=s),r.track()}}function Ue(e,t,s,n,r,i){const o=ns.get(e);if(!o){Nt++;return}const l=c=>{c&&c.trigger()};if(on(),t==="clear")o.forEach(l);else{const c=A(e),d=c&&ps(s);if(c&&s==="length"){const u=Number(n);o.forEach((p,v)=>{(v==="length"||v===$t||!ve(v)&&v>=u)&&l(p)})}else switch((s!==void 0||o.has(void 0))&&l(o.get(s)),d&&l(o.get($t)),t){case"add":c?d&&l(o.get("length")):(l(o.get(lt)),et(e)&&l(o.get(Bs)));break;case"delete":c||(l(o.get(lt)),et(e)&&l(o.get(Bs)));break;case"set":et(e)&&l(o.get(lt));break}}ln()}function $i(e,t){const s=ns.get(e);return s&&s.get(t)}function at(e){const t=H(e);return t===e?t:(le(t,"iterate",$t),me(e)?t:t.map(Ee))}function bs(e){return le(e=H(e),"iterate",$t),e}function je(e,t){return Je(e)?mt(Be(e)?Ee(t):t):Ee(t)}const Di={__proto__:null,[Symbol.iterator](){return Is(this,Symbol.iterator,e=>je(this,e))},concat(...e){return at(this).concat(...e.map(t=>A(t)?at(t):t))},entries(){return Is(this,"entries",e=>(e[1]=je(this,e[1]),e))},every(e,t){return Le(this,"every",e,t,void 0,arguments)},filter(e,t){return Le(this,"filter",e,t,s=>s.map(n=>je(this,n)),arguments)},find(e,t){return Le(this,"find",e,t,s=>je(this,s),arguments)},findIndex(e,t){return Le(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Le(this,"findLast",e,t,s=>je(this,s),arguments)},findLastIndex(e,t){return Le(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Le(this,"forEach",e,t,void 0,arguments)},includes(...e){return Fs(this,"includes",e)},indexOf(...e){return Fs(this,"indexOf",e)},join(e){return at(this).join(e)},lastIndexOf(...e){return Fs(this,"lastIndexOf",e)},map(e,t){return Le(this,"map",e,t,void 0,arguments)},pop(){return wt(this,"pop")},push(...e){return wt(this,"push",e)},reduce(e,...t){return On(this,"reduce",e,t)},reduceRight(e,...t){return On(this,"reduceRight",e,t)},shift(){return wt(this,"shift")},some(e,t){return Le(this,"some",e,t,void 0,arguments)},splice(...e){return wt(this,"splice",e)},toReversed(){return at(this).toReversed()},toSorted(e){return at(this).toSorted(e)},toSpliced(...e){return at(this).toSpliced(...e)},unshift(...e){return wt(this,"unshift",e)},values(){return Is(this,"values",e=>je(this,e))}};function Is(e,t,s){const n=bs(e),r=n[t]();return n!==e&&!me(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.done||(i.value=s(i.value)),i}),r}const Hi=Array.prototype;function Le(e,t,s,n,r,i){const o=bs(e),l=o!==e&&!me(e),c=o[t];if(c!==Hi[t]){const p=c.apply(e,i);return l?Ee(p):p}let d=s;o!==e&&(l?d=function(p,v){return s.call(this,je(e,p),v,e)}:s.length>2&&(d=function(p,v){return s.call(this,p,v,e)}));const u=c.call(o,d,n);return l&&r?r(u):u}function On(e,t,s,n){const r=bs(e),i=r!==e&&!me(e);let o=s,l=!1;r!==e&&(i?(l=n.length===0,o=function(d,u,p){return l&&(l=!1,d=je(e,d)),s.call(this,d,je(e,u),p,e)}):s.length>3&&(o=function(d,u,p){return s.call(this,d,u,p,e)}));const c=r[t](o,...n);return l?je(e,c):c}function Fs(e,t,s){const n=H(e);le(n,"iterate",$t);const r=n[t](...s);return(r===-1||r===!1)&&xs(s[0])?(s[0]=H(s[0]),n[t](...s)):r}function wt(e,t,s=[]){ke(),on();const n=H(e)[t].apply(e,s);return ln(),qe(),n}const Li=tn("__proto__,__v_isRef,__isVue"),Sr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ve));function Vi(e){ve(e)||(e=String(e));const t=H(this);return le(t,"has",e),t.hasOwnProperty(e)}class wr{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,n){if(s==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(s==="__v_isReactive")return!r;if(s==="__v_isReadonly")return r;if(s==="__v_isShallow")return i;if(s==="__v_raw")return n===(r?i?zi:Or:i?Tr:Er).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const o=A(t);if(!r){let c;if(o&&(c=Di[s]))return c;if(s==="hasOwnProperty")return Vi}const l=Reflect.get(t,s,X(t)?t:n);if((ve(s)?Sr.has(s):Li(s))||(r||le(t,"get",s),i))return l;if(X(l)){const c=o&&ps(s)?l:l.value;return r&&B(c)?qs(c):c}return B(l)?r?qs(l):ys(l):l}}class Cr extends wr{constructor(t=!1){super(!1,t)}set(t,s,n,r){let i=t[s];const o=A(t)&&ps(s);if(!this._isShallow){const d=Je(i);if(!me(n)&&!Je(n)&&(i=H(i),n=H(n)),!o&&X(i)&&!X(n))return d||(i.value=n),!0}const l=o?Number(s)<t.length:K(t,s),c=Reflect.set(t,s,n,X(t)?t:r);return t===H(r)&&c&&(l?$e(n,i)&&Ue(t,"set",s,n):Ue(t,"add",s,n)),c}deleteProperty(t,s){const n=K(t,s);t[s];const r=Reflect.deleteProperty(t,s);return r&&n&&Ue(t,"delete",s,void 0),r}has(t,s){const n=Reflect.has(t,s);return(!ve(s)||!Sr.has(s))&&le(t,"has",s),n}ownKeys(t){return le(t,"iterate",A(t)?"length":lt),Reflect.ownKeys(t)}}class Ki extends wr{constructor(t=!1){super(!0,t)}set(t,s){return!0}deleteProperty(t,s){return!0}}const Ui=new Cr,Wi=new Ki,Bi=new Cr(!0);const ks=e=>e,Jt=e=>Reflect.getPrototypeOf(e);function ki(e,t,s){return function(...n){const r=this.__v_raw,i=H(r),o=et(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,d=r[e](...n),u=s?ks:t?mt:Ee;return!t&&le(i,"iterate",c?Bs:lt),ie(Object.create(d),{next(){const{value:p,done:v}=d.next();return v?{value:p,done:v}:{value:l?[u(p[0]),u(p[1])]:u(p),done:v}}})}}function Gt(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function qi(e,t){const s={get(r){const i=this.__v_raw,o=H(i),l=H(r);e||($e(r,l)&&le(o,"get",r),le(o,"get",l));const{has:c}=Jt(o),d=t?ks:e?mt:Ee;if(c.call(o,r))return d(i.get(r));if(c.call(o,l))return d(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&le(H(r),"iterate",lt),r.size},has(r){const i=this.__v_raw,o=H(i),l=H(r);return e||($e(r,l)&&le(o,"has",r),le(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=H(l),d=t?ks:e?mt:Ee;return!e&&le(c,"iterate",lt),l.forEach((u,p)=>r.call(i,d(u),d(p),o))}};return ie(s,e?{add:Gt("add"),set:Gt("set"),delete:Gt("delete"),clear:Gt("clear")}:{add(r){const i=H(this),o=Jt(i),l=H(r),c=!t&&!me(r)&&!Je(r)?l:r;return o.has.call(i,c)||$e(r,c)&&o.has.call(i,r)||$e(l,c)&&o.has.call(i,l)||(i.add(c),Ue(i,"add",c,c)),this},set(r,i){!t&&!me(i)&&!Je(i)&&(i=H(i));const o=H(this),{has:l,get:c}=Jt(o);let d=l.call(o,r);d||(r=H(r),d=l.call(o,r));const u=c.call(o,r);return o.set(r,i),d?$e(i,u)&&Ue(o,"set",r,i):Ue(o,"add",r,i),this},delete(r){const i=H(this),{has:o,get:l}=Jt(i);let c=o.call(i,r);c||(r=H(r),c=o.call(i,r)),l&&l.call(i,r);const d=i.delete(r);return c&&Ue(i,"delete",r,void 0),d},clear(){const r=H(this),i=r.size!==0,o=r.clear();return i&&Ue(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{s[r]=ki(r,e,t)}),s}function un(e,t){const s=qi(e,t);return(n,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?n:Reflect.get(K(s,r)&&r in n?s:n,r,i)}const Ji={get:un(!1,!1)},Gi={get:un(!1,!0)},Yi={get:un(!0,!1)};const Er=new WeakMap,Tr=new WeakMap,Or=new WeakMap,zi=new WeakMap;function Qi(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ys(e){return Je(e)?e:an(e,!1,Ui,Ji,Er)}function Xi(e){return an(e,!1,Bi,Gi,Tr)}function qs(e){return an(e,!0,Wi,Yi,Or)}function an(e,t,s,n,r){if(!B(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const i=r.get(e);if(i)return i;const o=Qi(wi(e));if(o===0)return e;const l=new Proxy(e,o===2?n:s);return r.set(e,l),l}function Be(e){return Je(e)?Be(e.__v_raw):!!(e&&e.__v_isReactive)}function Je(e){return!!(e&&e.__v_isReadonly)}function me(e){return!!(e&&e.__v_isShallow)}function xs(e){return e?!!e.__v_raw:!1}function H(e){const t=e&&e.__v_raw;return t?H(t):e}function dn(e){return!K(e,"__v_skip")&&Object.isExtensible(e)&&lr(e,"__v_skip",!0),e}const Ee=e=>B(e)?ys(e):e,mt=e=>B(e)?qs(e):e;function X(e){return e?e.__v_isRef===!0:!1}function Xe(e){return Zi(e,!1)}function Zi(e,t){return X(e)?e:new eo(e,t)}class eo{constructor(t,s){this.dep=new fn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:H(t),this._value=s?t:Ee(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||me(t)||Je(t);t=n?t:H(t),$e(t,s)&&(this._rawValue=t,this._value=n?t:Ee(t),this.dep.trigger())}}function ne(e){return X(e)?e.value:e}const to={get:(e,t,s)=>t==="__v_raw"?e:ne(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const r=e[t];return X(r)&&!X(s)?(r.value=s,!0):Reflect.set(e,t,s,n)}};function Ar(e){return Be(e)?e:new Proxy(e,to)}function so(e){const t=A(e)?new Array(e.length):{};for(const s in e)t[s]=ro(e,s);return t}class no{constructor(t,s,n){this._object=t,this._defaultValue=n,this.__v_isRef=!0,this._value=void 0,this._key=ve(s)?s:String(s),this._raw=H(t);let r=!0,i=t;if(!A(t)||ve(this._key)||!ps(this._key))do r=!xs(i)||me(i);while(r&&(i=i.__v_raw));this._shallow=r}get value(){let t=this._object[this._key];return this._shallow&&(t=ne(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&X(this._raw[this._key])){const s=this._object[this._key];if(X(s)){s.value=t;return}}this._object[this._key]=t}get dep(){return $i(this._raw,this._key)}}function ro(e,t,s){return new no(e,t,s)}class io{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new fn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Nt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&Y!==this)return _r(this,!0),!0}get value(){const t=this.dep.track();return yr(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function oo(e,t,s=!1){let n,r;return M(e)?n=e:(n=e.get,r=e.set),new io(n,r,s)}const Yt={},rs=new WeakMap;let it;function lo(e,t=!1,s=it){if(s){let n=rs.get(s);n||rs.set(s,n=[]),n.push(e)}}function co(e,t,s=q){const{immediate:n,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=s,d=T=>r?T:me(T)||r===!1||r===0?We(T,1):We(T);let u,p,v,C,I=!1,P=!1;if(X(e)?(p=()=>e.value,I=me(e)):Be(e)?(p=()=>d(e),I=!0):A(e)?(P=!0,I=e.some(T=>Be(T)||me(T)),p=()=>e.map(T=>{if(X(T))return T.value;if(Be(T))return d(T);if(M(T))return c?c(T,2):T()})):M(e)?t?p=c?()=>c(e,2):e:p=()=>{if(v){ke();try{v()}finally{qe()}}const T=it;it=u;try{return c?c(e,3,[C]):e(C)}finally{it=T}}:p=De,t&&r){const T=p,V=r===!0?1/0:r;p=()=>We(T(),V)}const z=hr(),J=()=>{u.stop(),z&&z.active&&sn(z.effects,u)};if(i&&t){const T=t;t=(...V)=>{const Se=T(...V);return J(),Se}}let j=P?new Array(e.length).fill(Yt):Yt;const L=T=>{if(!(!(u.flags&1)||!u.dirty&&!T))if(t){const V=u.run();if(T||r||I||(P?V.some((Se,oe)=>$e(Se,j[oe])):$e(V,j))){v&&v();const Se=it;it=u;try{const oe=[V,j===Yt?void 0:P&&j[0]===Yt?[]:j,C];j=V,c?c(t,3,oe):t(...oe)}finally{it=Se}}}else u.run()};return l&&l(L),u=new pr(p),u.scheduler=o?()=>o(L,!1):L,C=T=>lo(T,!1,u),v=u.onStop=()=>{const T=rs.get(u);if(T){if(c)c(T,4);else for(const V of T)V();rs.delete(u)}},t?n?L(!0):j=u.run():o?o(L.bind(null,!0),!0):u.run(),J.pause=u.pause.bind(u),J.resume=u.resume.bind(u),J.stop=J,J}function We(e,t=1/0,s){if(t<=0||!B(e)||e.__v_skip||(s=s||new Map,(s.get(e)||0)>=t))return e;if(s.set(e,t),t--,X(e))We(e.value,t,s);else if(A(e))for(let n=0;n<e.length;n++)We(e[n],t,s);else if(ss(e)||et(e))e.forEach(n=>{We(n,t,s)});else if(ir(e)){for(const n in e)We(e[n],t,s);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&&We(e[n],t,s)}return e}/**
|
|
10
|
+
* @vue/runtime-core v3.5.42
|
|
11
|
+
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
12
|
+
* @license MIT
|
|
13
|
+
**/function Ut(e,t,s,n){try{return n?e(...n):e()}catch(r){vs(r,t,s)}}function Te(e,t,s,n){if(M(e)){const r=Ut(e,t,s,n);return r&&nr(r)&&r.catch(i=>{vs(i,t,s)}),r}if(A(e)){const r=[];for(let i=0;i<e.length;i++)r.push(Te(e[i],t,s,n));return r}}function vs(e,t,s,n=!0){const r=t?t.vnode:null,{errorHandler:i,throwUnhandledErrorInProduction:o}=t&&t.appContext.config||q;if(t){let l=t.parent;const c=t.proxy,d=`https://vuejs.org/error-reference/#runtime-${s}`;for(;l;){const u=l.ec;if(u){for(let p=0;p<u.length;p++)if(u[p](e,c,d)===!1)return}l=l.parent}if(i){ke(),Ut(i,null,10,[e,c,d]),qe();return}}fo(e,s,r,n,o)}function fo(e,t,s,n=!0,r=!1){if(r)throw e;console.error(e)}const fe=[];let Fe=-1;const _t=[];let Ze=null,ht=0;const Pr=Promise.resolve();let is=null;function Rr(e){const t=is||Pr;return e?t.then(this?e.bind(this):e):t}function uo(e){let t=Fe+1,s=fe.length;for(;t<s;){const n=t+s>>>1,r=fe[n],i=Dt(r);i<e||i===e&&r.flags&2?t=n+1:s=n}return t}function hn(e){if(!(e.flags&1)){const t=Dt(e),s=fe[fe.length-1];!s||!(e.flags&2)&&t>=Dt(s)?fe.push(e):fe.splice(uo(t),0,e),e.flags|=1,Mr()}}function Mr(){is||(is=Pr.then(Fr))}function ao(e){if(!A(e))Ze&&e.id===-1?Ze.splice(ht+1,0,e):e.flags&1||(_t.push(e),e.flags|=1);else for(let t=0;t<e.length;t++)_t.push(e[t]);Mr()}function An(e,t,s=Fe+1){for(;s<fe.length;s++){const n=fe[s];if(n&&n.flags&2){if(e&&n.id!==e.uid)continue;fe.splice(s,1),s--,n.flags&4&&(n.flags&=-2),n(),n.flags&4||(n.flags&=-2)}}}function Ir(e){if(_t.length){const t=[...new Set(_t)].sort((s,n)=>Dt(s)-Dt(n));if(_t.length=0,Ze){for(let s=0;s<t.length;s++)Ze.push(t[s]);return}for(Ze=t,ht=0;ht<Ze.length;ht++){const s=Ze[ht];s.flags&4&&(s.flags&=-2),s.flags&8||s(),s.flags&=-2}Ze=null,ht=0}}const Dt=e=>e.id==null?e.flags&2?-1:1/0:e.id;function Fr(e){try{for(Fe=0;Fe<fe.length;Fe++){const t=fe[Fe];t&&!(t.flags&8)&&(t.flags&4&&(t.flags&=-2),Ut(t,t.i,t.i?15:14),t.flags&4||(t.flags&=-2))}}finally{for(;Fe<fe.length;Fe++){const t=fe[Fe];t&&(t.flags&=-2)}Fe=-1,fe.length=0,Ir(),is=null,(fe.length||_t.length)&&Fr()}}let xe=null,jr=null;function os(e){const t=xe;return xe=e,jr=e&&e.type.__scopeId||null,t}function ho(e,t=xe,s){if(!t||e._n)return e;const n=(...r)=>{n._d&&Ln(-1);const i=os(t),o=ft.length;let l;try{l=e(...r)}finally{for(let c=ft.length;c>o;c--)oi();os(i),n._d&&Ln(1)}return l};return n._n=!0,n._c=!0,n._d=!0,n}function po(e,t){if(xe===null)return e;const s=Ts(xe),n=e.dirs||(e.dirs=[]);for(let r=0;r<t.length;r++){let[i,o,l,c=q]=t[r];i&&(M(i)&&(i={mounted:i,updated:i}),i.deep&&We(o),n.push({dir:i,instance:s,value:o,oldValue:void 0,arg:l,modifiers:c}))}return e}function nt(e,t,s,n){const r=e.dirs,i=t&&t.dirs;for(let o=0;o<r.length;o++){const l=r[o];i&&(l.oldValue=i[o].value);let c=l.dir[n];c&&(ke(),Te(c,s,8,[e.el,l,e,t]),qe())}}function go(e,t){if(ue){let s=ue.provides;const n=ue.parent&&ue.parent.provides;n===s&&(s=ue.provides=Object.create(n)),s[e]=t}}function Rt(e,t,s=!1){const n=ai();if(n||ct){let r=ct?ct._context.provides:n?n.parent==null||n.ce?n.vnode.appContext&&n.vnode.appContext.provides:n.parent.provides:void 0;if(r&&e in r)return r[e];if(arguments.length>1)return s&&M(t)?t.call(n&&n.proxy):t}}function _o(){return!!(ai()||ct)}const mo=Symbol.for("v-scx"),bo=()=>Rt(mo);function es(e,t,s){return Nr(e,t,s)}function Nr(e,t,s=q){const{immediate:n,deep:r,flush:i,once:o}=s,l=ie({},s),c=t&&n||!t&&i!=="post";let d;if(Vt){if(i==="sync"){const C=bo();d=C.__watcherHandles||(C.__watcherHandles=[])}else if(!c){const C=()=>{};return C.stop=De,C.resume=De,C.pause=De,C}}const u=ue;l.call=(C,I,P)=>Te(C,u,I,P);let p=!1;i==="post"?l.scheduler=C=>{ae(C,u&&u.suspense)}:i!=="sync"&&(p=!0,l.scheduler=(C,I)=>{I?C():hn(C)}),l.augmentJob=C=>{t&&(C.flags|=4),p&&(C.flags|=2,u&&(C.id=u.uid,C.i=u))};const v=co(e,t,l);return Vt&&(d?d.push(v):c&&v()),v}function yo(e,t,s){const n=this.proxy,r=Q(e)?e.includes(".")?$r(n,e):()=>n[e]:e.bind(n,n);let i;M(t)?i=t:(i=t.handler,s=t);const o=Wt(this),l=Nr(r,i.bind(n),s);return o(),l}function $r(e,t){const s=t.split(".");return()=>{let n=e;for(let r=0;r<s.length&&n;r++)n=n[s[r]];return n}}const xo=Symbol("_vte"),Ss=e=>e.__isTeleport,js=Symbol("_leaveCb");function vo(e){let t=e[0];if(e.length>1){for(const s of e)if(s.type!==Ge){t=s;break}}return t}function Dr(e){if(!gn(e))return Ss(e.type)&&e.children?vo(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:s}=e;if(s){if(t&16)return s[0];if(t&32&&M(s.default))return s.default()}}function pn(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const s=e.component.subTree;pn(Ss(s.type)&&Dr(s)||s,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Hr(e,t){return M(e)?ie({name:e.name},t,{setup:e}):e}function Lr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Pn(e,t){let s;return!!((s=Object.getOwnPropertyDescriptor(e,t))&&!s.configurable)}const ls=new WeakMap;function Mt(e,t,s,n,r=!1){if(A(e)){e.forEach((P,z)=>Mt(P,t&&(A(t)?t[z]:t),s,n,r));return}if(It(n)&&!r){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&Mt(e,t,s,n.component.subTree);return}const i=n.shapeFlag&4?Ts(n.component):n.el,o=r?null:i,{i:l,r:c}=e,d=t&&t.r,u=l.refs===q?l.refs={}:l.refs,p=l.setupState,v=H(p),C=p===q?sr:P=>Pn(u,P)?!1:K(v,P),I=(P,z)=>!(z&&Pn(u,z));if(d!=null&&d!==c){if(Rn(t),Q(d))u[d]=null,C(d)&&(p[d]=null);else if(X(d)){const P=t;I(d,P.k)&&(d.value=null),P.k&&(u[P.k]=null)}}if(M(c))Ut(c,l,12,[o,u]);else{const P=Q(c),z=X(c);if(P||z){const J=()=>{if(e.f){const j=P?C(c)?p[c]:u[c]:I()||!e.k?c.value:u[e.k];if(r)A(j)&&sn(j,i);else if(A(j))j.includes(i)||j.push(i);else if(P)u[c]=[i],C(c)&&(p[c]=u[c]);else{const L=[i];I(c,e.k)&&(c.value=L),e.k&&(u[e.k]=L)}}else P?(u[c]=o,C(c)&&(p[c]=o)):z&&(I(c,e.k)&&(c.value=o),e.k&&(u[e.k]=o))};if(o){const j=()=>{J(),ls.delete(e)};j.id=-1,ls.set(e,j),ae(j,s)}else Rn(e),J()}}}function Rn(e){const t=ls.get(e);t&&(t.flags|=8,ls.delete(e))}_s().requestIdleCallback;_s().cancelIdleCallback;const It=e=>!!e.type.__asyncLoader,gn=e=>e.type.__isKeepAlive;function So(e,t){Vr(e,"a",t)}function wo(e,t){Vr(e,"da",t)}function Vr(e,t,s=ue){const n=e.__wdc||(e.__wdc=()=>{let r=s;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(ws(t,n,s),s){let r=s.parent;for(;r&&r.parent;)gn(r.parent.vnode)&&Co(n,t,s,r),r=r.parent}}function Co(e,t,s,n){const r=ws(t,e,n,!0);Ur(()=>{sn(n[t],r)},s)}function ws(e,t,s=ue,n=!1){if(s){const r=s[e]||(s[e]=[]),i=t.__weh||(t.__weh=(...o)=>{ke();const l=Wt(s),c=Te(t,s,e,o);return l(),qe(),c});return n?r.unshift(i):r.push(i),i}}const Ye=e=>(t,s=ue)=>{(!Vt||e==="sp")&&ws(e,(...n)=>t(...n),s)},Eo=Ye("bm"),Kr=Ye("m"),To=Ye("bu"),Oo=Ye("u"),Ao=Ye("bum"),Ur=Ye("um"),Po=Ye("sp"),Ro=Ye("rtg"),Mo=Ye("rtc");function Io(e,t=ue){ws("ec",e,t)}const Fo=Symbol.for("v-ndc");function Js(e,t,s,n){let r;const i=s,o=A(e);if(o||Q(e)){const l=o&&Be(e);let c=!1,d=!1;l&&(c=!me(e),d=Je(e),e=bs(e)),r=new Array(e.length);for(let u=0,p=e.length;u<p;u++)r[u]=t(c?d?mt(Ee(e[u])):Ee(e[u]):e[u],u,void 0,i)}else if(typeof e=="number"){r=new Array(e);for(let l=0;l<e;l++)r[l]=t(l+1,l,void 0,i)}else if(B(e))if(e[Symbol.iterator])r=Array.from(e,(l,c)=>t(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,d=l.length;c<d;c++){const u=l[c];r[c]=t(e[u],u,c,i)}}else r=[];return r}const Gs=e=>e?di(e)?Ts(e):Gs(e.parent):null,Ft=ie(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Gs(e.parent),$root:e=>Gs(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Br(e),$forceUpdate:e=>e.f||(e.f=()=>{hn(e.update)}),$nextTick:e=>e.n||(e.n=Rr.bind(e.proxy)),$watch:e=>yo.bind(e)}),Ns=(e,t)=>e!==q&&!e.__isScriptSetup&&K(e,t),jo={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:r,props:i,accessCache:o,type:l,appContext:c}=e;if(t[0]!=="$"){const v=o[t];if(v!==void 0)switch(v){case 1:return n[t];case 2:return r[t];case 4:return s[t];case 3:return i[t]}else{if(Ns(n,t))return o[t]=1,n[t];if(r!==q&&K(r,t))return o[t]=2,r[t];if(K(i,t))return o[t]=3,i[t];if(s!==q&&K(s,t))return o[t]=4,s[t];Ys&&(o[t]=0)}}const d=Ft[t];let u,p;if(d)return t==="$attrs"&&le(e.attrs,"get",""),d(e);if((u=l.__cssModules)&&(u=u[t]))return u;if(s!==q&&K(s,t))return o[t]=4,s[t];if(p=c.config.globalProperties,K(p,t))return p[t]},set({_:e},t,s){const{data:n,setupState:r,ctx:i}=e;return Ns(r,t)?(r[t]=s,!0):n!==q&&K(n,t)?(n[t]=s,!0):K(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:r,props:i,type:o}},l){let c;return!!(s[l]||e!==q&&l[0]!=="$"&&K(e,l)||Ns(t,l)||K(i,l)||K(n,l)||K(Ft,l)||K(r.config.globalProperties,l)||(c=o.__cssModules)&&c[l])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:K(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function Mn(e){return A(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let Ys=!0;function No(e){const t=Br(e),s=e.proxy,n=e.ctx;Ys=!1,t.beforeCreate&&In(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:d,created:u,beforeMount:p,mounted:v,beforeUpdate:C,updated:I,activated:P,deactivated:z,beforeDestroy:J,beforeUnmount:j,destroyed:L,unmounted:T,render:V,renderTracked:Se,renderTriggered:oe,errorCaptured:N,serverPrefetch:D,expose:ee,inheritAttrs:be,components:Oe,directives:ze,filters:yt}=t;if(d&&$o(d,n,null),o)for(const F in o){const G=o[F];M(G)&&(n[F]=G.bind(s))}if(r){const F=r.call(s,s);B(F)&&(e.data=ys(F))}if(Ys=!0,i)for(const F in i){const G=i[F],tt=M(G)?G.bind(s,s):M(G.get)?G.get.bind(s,s):De,kt=!M(G)&&M(G.set)?G.set.bind(s):De,st=as({get:tt,set:kt});Object.defineProperty(n,F,{enumerable:!0,configurable:!0,get:()=>st.value,set:Ae=>st.value=Ae})}if(l)for(const F in l)Wr(l[F],n,s,F);if(c){const F=M(c)?c.call(s):c;Reflect.ownKeys(F).forEach(G=>{go(G,F[G])})}u&&In(u,e,"c");function Z(F,G){A(G)?G.forEach(tt=>F(tt.bind(s))):G&&F(G.bind(s))}if(Z(Eo,p),Z(Kr,v),Z(To,C),Z(Oo,I),Z(So,P),Z(wo,z),Z(Io,N),Z(Mo,Se),Z(Ro,oe),Z(Ao,j),Z(Ur,T),Z(Po,D),A(ee))if(ee.length){const F=e.exposed||(e.exposed={});ee.forEach(G=>{Object.defineProperty(F,G,{get:()=>s[G],set:tt=>s[G]=tt,enumerable:!0})})}else e.exposed||(e.exposed={});V&&e.render===De&&(e.render=V),be!=null&&(e.inheritAttrs=be),Oe&&(e.components=Oe),ze&&(e.directives=ze),D&&Lr(e)}function $o(e,t,s=De){A(e)&&(e=zs(e));for(const n in e){const r=e[n];let i;B(r)?"default"in r?i=Rt(r.from||n,r.default,!0):i=Rt(r.from||n):i=Rt(r),X(i)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[n]=i}}function In(e,t,s){Te(A(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function Wr(e,t,s,n){let r=n.includes(".")?$r(s,n):()=>s[n];if(Q(e)){const i=t[e];M(i)&&es(r,i)}else if(M(e))es(r,e.bind(s));else if(B(e))if(A(e))e.forEach(i=>Wr(i,t,s,n));else{const i=M(e.handler)?e.handler.bind(s):t[e.handler];M(i)&&es(r,i,e)}}function Br(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!s&&!n?c=t:(c={},r.length&&r.forEach(d=>cs(c,d,o,!0)),cs(c,t,o)),B(t)&&i.set(t,c),c}function cs(e,t,s,n=!1){const{mixins:r,extends:i}=t;i&&cs(e,i,s,!0),r&&r.forEach(o=>cs(e,o,s,!0));for(const o in t)if(!(n&&o==="expose")){const l=Do[o]||s&&s[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Do={data:Fn,props:jn,emits:jn,methods:Et,computed:Et,beforeCreate:ce,created:ce,beforeMount:ce,mounted:ce,beforeUpdate:ce,updated:ce,beforeDestroy:ce,beforeUnmount:ce,destroyed:ce,unmounted:ce,activated:ce,deactivated:ce,errorCaptured:ce,serverPrefetch:ce,components:Et,directives:Et,watch:Lo,provide:Fn,inject:Ho};function Fn(e,t){return t?e?function(){return ie(M(e)?e.call(this,this):e,M(t)?t.call(this,this):t)}:t:e}function Ho(e,t){return Et(zs(e),zs(t))}function zs(e){if(A(e)){const t={};for(let s=0;s<e.length;s++)t[e[s]]=e[s];return t}return e}function ce(e,t){return e?[...new Set([].concat(e,t))]:t}function Et(e,t){return e?ie(Object.create(null),e,t):t}function jn(e,t){return e?A(e)&&A(t)?[...new Set([...e,...t])]:ie(Object.create(null),Mn(e),Mn(t??{})):t}function Lo(e,t){if(!e)return t;if(!t)return e;const s=ie(Object.create(null),e);for(const n in t)s[n]=ce(e[n],t[n]);return s}function kr(){return{app:null,config:{isNativeTag:sr,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Vo=0;function Ko(e,t){return function(n,r=null){M(n)||(n=ie({},n)),r!=null&&!B(r)&&(r=null);const i=kr(),o=new WeakSet,l=[];let c=!1;const d=i.app={_uid:Vo++,_component:n,_props:r,_container:null,_context:i,_instance:null,version:bl,get config(){return i.config},set config(u){},use(u,...p){return o.has(u)||(u&&M(u.install)?(o.add(u),u.install(d,...p)):M(u)&&(o.add(u),u(d,...p))),d},mixin(u){return i.mixins.includes(u)||i.mixins.push(u),d},component(u,p){return p?(i.components[u]=p,d):i.components[u]},directive(u,p){return p?(i.directives[u]=p,d):i.directives[u]},mount(u,p,v){if(!c){const C=d._ceVNode||He(n,r);return C.appContext=i,v===!0?v="svg":v===!1&&(v=void 0),e(C,u,v),c=!0,d._container=u,u.__vue_app__=d,Ts(C.component)}},onUnmount(u){l.push(u)},unmount(){c&&(Te(l,d._instance,16),e(null,d._container),delete d._container.__vue_app__)},provide(u,p){return i.provides[u]=p,d},runWithContext(u){const p=ct;ct=d;try{return u()}finally{ct=p}}};return d}}let ct=null;const Uo=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${we(t)}Modifiers`]||e[`${ut(t)}Modifiers`];function Wo(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||q;let r=s;const i=t.startsWith("update:"),o=i&&Uo(n,t.slice(7));o&&(o.trim&&(r=s.map(u=>Q(u)?u.trim():u)),o.number&&(r=r.map(nn)));let l,c=n[l=Ps(t)]||n[l=Ps(we(t))];!c&&i&&(c=n[l=Ps(ut(t))]),c&&Te(c,e,6,r);const d=n[l+"Once"];if(d){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Te(d,e,6,r)}}const Bo=new WeakMap;function qr(e,t,s=!1){const n=s?Bo:t.emitsCache,r=n.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!M(e)){const c=d=>{const u=qr(d,t,!0);u&&(l=!0,ie(o,u))};!s&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(B(e)&&n.set(e,null),null):(A(i)?i.forEach(c=>o[c]=null):ie(o,i),B(e)&&n.set(e,o),o)}function Cs(e,t){return!e||!ds(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),K(e,t[0].toLowerCase()+t.slice(1))||K(e,ut(t))||K(e,t))}function Nn(e){const{type:t,vnode:s,proxy:n,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:d,renderCache:u,props:p,data:v,setupState:C,ctx:I,inheritAttrs:P}=e,z=os(e);let J,j;try{if(s.shapeFlag&4){const T=r||n,V=T;J=Ne(d.call(V,T,u,p,C,v,I)),j=l}else{const T=t;J=Ne(T.length>1?T(p,{attrs:l,slots:o,emit:c}):T(p,null)),j=t.props?l:ko(l)}}catch(T){ft.length=0,vs(T,e,1),J=He(Ge)}let L=J;if(j&&P!==!1){const T=Object.keys(j),{shapeFlag:V}=L;T.length&&V&7&&(i&&T.some(hs)&&(j=qo(j,i)),L=bt(L,j,!1,!0))}if(s.dirs&&(L=bt(L,null,!1,!0),L.dirs=L.dirs?L.dirs.concat(s.dirs):s.dirs),s.transition){const T=Ss(L.type)&&Dr(L)||L;pn(T,s.transition)}return J=L,os(z),J}const ko=e=>{let t;for(const s in e)(s==="class"||s==="style"||ds(s))&&((t||(t={}))[s]=e[s]);return t},qo=(e,t)=>{const s={};for(const n in e)(!hs(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function Jo(e,t,s){const{props:n,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,d=i.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&c>=0){if(c&1024)return!0;if(c&16)return n?$n(n,o,d):!!o;if(c&8){const u=t.dynamicProps;for(let p=0;p<u.length;p++){const v=u[p];if(Jr(o,n,v)&&!Cs(d,v))return!0}}}else return(r||l)&&(!l||!l.$stable)?!0:n===o?!1:n?o?$n(n,o,d):!0:!!o;return!1}function $n(e,t,s){const n=Object.keys(t);if(n.length!==Object.keys(e).length)return!0;for(let r=0;r<n.length;r++){const i=n[r];if(Jr(t,e,i)&&!Cs(s,i))return!0}return!1}function Jr(e,t,s){const n=e[s],r=t[s];return s==="style"&&B(n)&&B(r)?!ms(n,r):n!==r}function Go({vnode:e,parent:t,suspense:s},n){for(;t;){const r=t.subTree;if(r.suspense&&r.suspense.activeBranch===e&&(r.suspense.vnode.el=r.el=n,e=r),r===e)(e=t.vnode).el=n,t=t.parent;else break}s&&s.activeBranch===e&&(s.vnode.el=n)}const Gr={},Yr=()=>Object.create(Gr),zr=e=>Object.getPrototypeOf(e)===Gr;function Yo(e,t,s,n=!1){const r={},i=Yr();e.propsDefaults=Object.create(null),Qr(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);s?e.props=n?r:Xi(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function zo(e,t,s,n){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=H(r),[c]=e.propsOptions;let d=!1;if((n||o>0)&&!(o&16)){if(o&8){const u=e.vnode.dynamicProps;for(let p=0;p<u.length;p++){let v=u[p];if(Cs(e.emitsOptions,v))continue;const C=t[v];if(c)if(K(i,v))C!==i[v]&&(i[v]=C,d=!0);else{const I=we(v);r[I]=Qs(c,l,I,C,e,!1)}else C!==i[v]&&(i[v]=C,d=!0)}}}else{Qr(e,t,r,i)&&(d=!0);let u;for(const p in l)(!t||!K(t,p)&&((u=ut(p))===p||!K(t,u)))&&(c?s&&(s[p]!==void 0||s[u]!==void 0)&&(r[p]=Qs(c,l,p,void 0,e,!0)):delete r[p]);if(i!==l)for(const p in i)(!t||!K(t,p))&&(delete i[p],d=!0)}d&&Ue(e.attrs,"set","")}function Qr(e,t,s,n){const[r,i]=e.propsOptions;let o=!1,l;if(t)for(let c in t){if(Ot(c))continue;const d=t[c];let u;r&&K(r,u=we(c))?!i||!i.includes(u)?s[u]=d:(l||(l={}))[u]=d:Cs(e.emitsOptions,c)||(!(c in n)||d!==n[c])&&(n[c]=d,o=!0)}if(i){const c=H(s),d=l||q;for(let u=0;u<i.length;u++){const p=i[u];s[p]=Qs(r,c,p,d[p],e,!K(d,p))}}return o}function Qs(e,t,s,n,r,i){const o=e[s];if(o!=null){const l=K(o,"default");if(l&&n===void 0){const c=o.default;if(o.type!==Function&&!o.skipFactory&&M(c)){const{propsDefaults:d}=r;if(s in d)n=d[s];else{const u=Wt(r);n=d[s]=c.call(null,t),u()}}else n=c;r.ce&&r.ce._setProp(s,n)}o[0]&&(i&&!l?n=!1:o[1]&&(n===""||n===ut(s))&&(n=!0))}return n}const Qo=new WeakMap;function Xr(e,t,s=!1){const n=s?Qo:t.propsCache,r=n.get(e);if(r)return r;const i=e.props,o={},l=[];let c=!1;if(!M(e)){const u=p=>{c=!0;const[v,C]=Xr(p,t,!0);ie(o,v),C&&l.push(...C)};!s&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!i&&!c)return B(e)&&n.set(e,gt),gt;if(A(i))for(let u=0;u<i.length;u++){const p=we(i[u]);Dn(p)&&(o[p]=q)}else if(i)for(const u in i){const p=we(u);if(Dn(p)){const v=i[u],C=o[p]=A(v)||M(v)?{type:v}:ie({},v),I=C.type;let P=!1,z=!0;if(A(I))for(let J=0;J<I.length;++J){const j=I[J],L=M(j)&&j.name;if(L==="Boolean"){P=!0;break}else L==="String"&&(z=!1)}else P=M(I)&&I.name==="Boolean";C[0]=P,C[1]=z,(P||K(C,"default"))&&l.push(p)}}const d=[o,l];return B(e)&&n.set(e,d),d}function Dn(e){return e[0]!=="$"&&!Ot(e)}const _n=e=>e==="_"||e==="_ctx"||e==="$stable",mn=e=>A(e)?e.map(Ne):[Ne(e)],Xo=(e,t,s)=>{if(t._n)return t;const n=ho((...r)=>mn(t(...r)),s);return n._c=!1,n},Zr=(e,t,s)=>{const n=e._ctx;for(const r in e){if(_n(r))continue;const i=e[r];if(M(i))t[r]=Xo(r,i,n);else if(i!=null){const o=mn(i);t[r]=()=>o}}},ei=(e,t)=>{const s=mn(t);e.slots.default=()=>s},ti=(e,t,s)=>{for(const n in t)(s||!_n(n))&&(e[n]=t[n])},Zo=(e,t,s)=>{const n=e.slots=Yr();if(e.vnode.shapeFlag&32){const r=t._;r?(ti(n,t,s),s&&lr(n,"_",r,!0)):Zr(t,n)}else t&&ei(e,t)},el=(e,t,s)=>{const{vnode:n,slots:r}=e;let i=!0,o=q;if(n.shapeFlag&32){const l=t._;l?s&&l===1?i=!1:ti(r,t,s):(i=!t.$stable,Zr(t,r)),o=t}else t&&(ei(e,t),o={default:1});if(i)for(const l in r)!_n(l)&&o[l]==null&&delete r[l]},ae=il;function tl(e){return sl(e)}function sl(e,t){const s=_s();s.__VUE__=!0;const{insert:n,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:d,setElementText:u,parentNode:p,nextSibling:v,setScopeId:C=De,insertStaticContent:I}=e,P=(f,a,h,b=null,m=null,g=null,S=void 0,x=null,y=!!a.dynamicChildren)=>{if(f===a)return;f&&!Ct(f,a)&&(b=qt(f),Ae(f,m,g,!0),f=null),a.patchFlag===-2&&(y=!1,a.dynamicChildren=null);const{type:_,ref:O,shapeFlag:w}=a;switch(_){case Es:z(f,a,h,b);break;case Ge:J(f,a,h,b);break;case Ds:f==null&&j(a,h,b,S);break;case ye:Oe(f,a,h,b,m,g,S,x,y);break;default:w&1?V(f,a,h,b,m,g,S,x,y):w&6?ze(f,a,h,b,m,g,S,x,y):(w&64||w&128)&&_.process(f,a,h,b,m,g,S,x,y,vt)}O!=null&&m?Mt(O,f&&f.ref,g,a||f,!a):O==null&&f&&f.ref!=null&&Mt(f.ref,null,g,f,!0)},z=(f,a,h,b)=>{if(f==null)n(a.el=l(a.children),h,b);else{const m=a.el=f.el;a.children!==f.children&&d(m,a.children)}},J=(f,a,h,b)=>{f==null?n(a.el=c(a.children||""),h,b):a.el=f.el},j=(f,a,h,b)=>{[f.el,f.anchor]=I(f.children,a,h,b,f.el,f.anchor)},L=({el:f,anchor:a},h,b)=>{let m;for(;f&&f!==a;)m=v(f),n(f,h,b),f=m;n(a,h,b)},T=({el:f,anchor:a})=>{let h;for(;f&&f!==a;)h=v(f),r(f),f=h;r(a)},V=(f,a,h,b,m,g,S,x,y)=>{if(a.type==="svg"?S="svg":a.type==="math"&&(S="mathml"),f==null)Se(a,h,b,m,g,S,x,y);else{const _=f.el&&f.el._isVueCE?f.el:null;try{_&&_._beginPatch(),D(f,a,m,g,S,x,y)}finally{_&&_._endPatch()}}},Se=(f,a,h,b,m,g,S,x)=>{let y,_;const{props:O,shapeFlag:w,transition:E,dirs:R}=f;if(y=f.el=o(f.type,g,O&&O.is,O),w&8?u(y,f.children):w&16&&N(f.children,y,null,b,m,$s(f,g),S,x),R&&nt(f,null,b,"created"),oe(y,f,f.scopeId,S,b),O){for(const k in O)k!=="value"&&!Ot(k)&&i(y,k,null,O[k],g,b);"value"in O&&i(y,"value",null,O.value,g),(_=O.onVnodeBeforeMount)&&Ie(_,b,f)}R&&nt(f,null,b,"beforeMount");const $=nl(m,E);$&&E.beforeEnter(y),n(y,a,h),((_=O&&O.onVnodeMounted)||$||R)&&ae(()=>{try{_&&Ie(_,b,f),$&&E.enter(y),R&&nt(f,null,b,"mounted")}finally{}},m)},oe=(f,a,h,b,m)=>{if(h&&C(f,h),b)for(let g=0;g<b.length;g++)C(f,b[g]);if(m){let g=m.subTree;if(a===g||ii(g.type)&&(g.ssContent===a||g.ssFallback===a)){const S=m.vnode;oe(f,S,S.scopeId,S.slotScopeIds,m.parent)}}},N=(f,a,h,b,m,g,S,x,y=0)=>{for(let _=y;_<f.length;_++){const O=f[_]=x?Ke(f[_]):Ne(f[_]);P(null,O,a,h,b,m,g,S,x)}},D=(f,a,h,b,m,g,S)=>{const x=a.el=f.el;let{patchFlag:y,dynamicChildren:_,dirs:O}=a;y|=f.patchFlag&16;const w=f.props||q,E=a.props||q;let R;if(h&&rt(h,!1),(R=E.onVnodeBeforeUpdate)&&Ie(R,h,a,f),O&&nt(a,f,h,"beforeUpdate"),h&&rt(h,!0),_&&(!f.dynamicChildren||f.dynamicChildren.length!==_.length)&&(y=0,S=!1,_=null),(w.innerHTML&&E.innerHTML==null||w.textContent&&E.textContent==null)&&u(x,""),_?ee(f.dynamicChildren,_,x,h,b,$s(a,m),g):S||G(f,a,x,null,h,b,$s(a,m),g,!1),y>0){if(y&16)be(x,w,E,h,m);else if(y&2&&w.class!==E.class&&i(x,"class",null,E.class,m),y&4&&i(x,"style",w.style,E.style,m),y&8){const $=a.dynamicProps;for(let k=0;k<$.length;k++){const W=$[k],te=w[W],re=E[W];(re!==te||W==="value")&&i(x,W,te,re,m,h)}}y&1&&f.children!==a.children&&u(x,a.children)}else!S&&_==null&&be(x,w,E,h,m);((R=E.onVnodeUpdated)||O)&&ae(()=>{R&&Ie(R,h,a,f),O&&nt(a,f,h,"updated")},b)},ee=(f,a,h,b,m,g,S)=>{for(let x=0;x<a.length;x++){const y=f[x],_=a[x],O=y.el&&(y.type===ye||!Ct(y,_)||y.shapeFlag&198)?p(y.el):h;P(y,_,O,null,b,m,g,S,!0)}},be=(f,a,h,b,m)=>{if(a!==h){if(a!==q)for(const g in a)!Ot(g)&&!(g in h)&&i(f,g,a[g],null,m,b);for(const g in h){if(Ot(g))continue;const S=h[g],x=a[g];S!==x&&g!=="value"&&i(f,g,x,S,m,b)}"value"in h&&i(f,"value",a.value,h.value,m)}},Oe=(f,a,h,b,m,g,S,x,y)=>{const _=a.el=f?f.el:l(""),O=a.anchor=f?f.anchor:l("");let{patchFlag:w,dynamicChildren:E,slotScopeIds:R}=a;R&&(x=x?x.concat(R):R),f==null?(n(_,h,b),n(O,h,b),N(a.children||[],h,O,m,g,S,x,y)):w>0&&w&64&&E&&f.dynamicChildren&&f.dynamicChildren.length===E.length?(ee(f.dynamicChildren,E,h,m,g,S,x),(a.key!=null||m&&a===m.subTree)&&si(f,a,!0)):G(f,a,h,O,m,g,S,x,y)},ze=(f,a,h,b,m,g,S,x,y)=>{a.slotScopeIds=x,f==null?a.shapeFlag&512?m.ctx.activate(a,h,b,S,y):yt(a,h,b,m,g,S,y):Bt(f,a,y)},yt=(f,a,h,b,m,g,S)=>{const x=f.component=dl(f,b,m);if(gn(f)&&(x.ctx.renderer=vt),hl(x,!1,S),x.asyncDep){if(m&&m.registerDep(x,Z,S),!f.el){const y=x.subTree=He(Ge);J(null,y,a,h),f.placeholder=y.el}}else Z(x,f,a,h,m,g,S)},Bt=(f,a,h)=>{const b=a.component=f.component;if(Jo(f,a,h))if(b.asyncDep&&!b.asyncResolved){F(b,a,h);return}else b.next=a,b.update();else a.el=f.el,b.vnode=a},Z=(f,a,h,b,m,g,S)=>{const x=()=>{if(f.isMounted){let{next:w,bu:E,u:R,parent:$,vnode:k}=f;{const Re=ni(f);if(Re){w&&(w.el=k.el,F(f,w,S)),Re.asyncDep.then(()=>{ae(()=>{f.isUnmounted||_()},m)});return}}let W=w,te;rt(f,!1),w?(w.el=k.el,F(f,w,S)):w=k,E&&Zt(E),(te=w.props&&w.props.onVnodeBeforeUpdate)&&Ie(te,$,w,k),rt(f,!0);const re=Nn(f),Pe=f.subTree;f.subTree=re,P(Pe,re,p(Pe.el),qt(Pe),f,m,g),w.el=re.el,W===null&&Go(f,re.el),R&&ae(R,m),(te=w.props&&w.props.onVnodeUpdated)&&ae(()=>Ie(te,$,w,k),m)}else{let w;const{el:E,props:R}=a,{bm:$,m:k,parent:W,root:te,type:re}=f,Pe=It(a);rt(f,!1),$&&Zt($),!Pe&&(w=R&&R.onVnodeBeforeMount)&&Ie(w,W,a),rt(f,!0);{te.ce&&te.ce._hasShadowRoot()&&te.ce._injectChildStyle(re,f.parent?f.parent.type:void 0);const Re=f.subTree=Nn(f);P(null,Re,h,b,f,m,g),a.el=Re.el}if(k&&ae(k,m),!Pe&&(w=R&&R.onVnodeMounted)){const Re=a;ae(()=>Ie(w,W,Re),m)}(a.shapeFlag&256||W&&It(W.vnode)&&W.vnode.shapeFlag&256)&&f.a&&ae(f.a,m),f.isMounted=!0,a=h=b=null}};f.scope.on();const y=f.effect=new pr(x);f.scope.off();const _=f.update=y.run.bind(y),O=f.job=y.runIfDirty.bind(y);O.i=f,O.id=f.uid,y.scheduler=()=>hn(O),rt(f,!0),_()},F=(f,a,h)=>{a.component=f;const b=f.vnode.props;f.vnode=a,f.next=null,zo(f,a.props,b,h),el(f,a.children,h),ke(),An(f),qe()},G=(f,a,h,b,m,g,S,x,y=!1)=>{const _=f&&f.children,O=f?f.shapeFlag:0,w=a.children,{patchFlag:E,shapeFlag:R}=a;if(E>0){if(E&128){kt(_,w,h,b,m,g,S,x,y);return}else if(E&256){tt(_,w,h,b,m,g,S,x,y);return}}R&8?(O&16&&xt(_,m,g),w!==_&&u(h,w)):O&16?R&16?kt(_,w,h,b,m,g,S,x,y):xt(_,m,g,!0):(O&8&&u(h,""),R&16&&N(w,h,b,m,g,S,x,y))},tt=(f,a,h,b,m,g,S,x,y)=>{f=f||gt,a=a||gt;const _=f.length,O=a.length,w=Math.min(_,O);let E;for(E=0;E<w;E++){const R=a[E]=y?Ke(a[E]):Ne(a[E]);P(f[E],R,h,null,m,g,S,x,y)}_>O?xt(f,m,g,!0,!1,w):N(a,h,b,m,g,S,x,y,w)},kt=(f,a,h,b,m,g,S,x,y)=>{let _=0;const O=a.length;let w=f.length-1,E=O-1;for(;_<=w&&_<=E;){const R=f[_],$=a[_]=y?Ke(a[_]):Ne(a[_]);if(Ct(R,$))P(R,$,h,null,m,g,S,x,y);else break;_++}for(;_<=w&&_<=E;){const R=f[w],$=a[E]=y?Ke(a[E]):Ne(a[E]);if(Ct(R,$))P(R,$,h,null,m,g,S,x,y);else break;w--,E--}if(_>w){if(_<=E){const R=E+1,$=R<O?a[R].el:b;for(;_<=E;)P(null,a[_]=y?Ke(a[_]):Ne(a[_]),h,$,m,g,S,x,y),_++}}else if(_>E)for(;_<=w;)Ae(f[_],m,g,!0),_++;else{const R=_,$=_,k=new Map;for(_=$;_<=E;_++){const pe=a[_]=y?Ke(a[_]):Ne(a[_]);pe.key!=null&&k.set(pe.key,_)}let W,te=0;const re=E-$+1;let Pe=!1,Re=0;const St=new Array(re);for(_=0;_<re;_++)St[_]=0;for(_=R;_<=w;_++){const pe=f[_];if(te>=re){Ae(pe,m,g,!0);continue}let Me;if(pe.key!=null)Me=k.get(pe.key);else for(W=$;W<=E;W++)if(St[W-$]===0&&Ct(pe,a[W])){Me=W;break}Me===void 0?Ae(pe,m,g,!0):(St[Me-$]=_+1,Me>=Re?Re=Me:Pe=!0,P(pe,a[Me],h,null,m,g,S,x,y),te++)}const xn=Pe?rl(St):gt;for(W=xn.length-1,_=re-1;_>=0;_--){const pe=$+_,Me=a[pe],vn=a[pe+1],Sn=pe+1<O?vn.el||ri(vn):b;St[_]===0?P(null,Me,h,Sn,m,g,S,x,y):Pe&&(W<0||_!==xn[W]?st(Me,h,Sn,2):W--)}}},st=(f,a,h,b,m=null)=>{const{el:g,type:S,transition:x,children:y,shapeFlag:_}=f;if(_&6){st(f.component.subTree,a,h,b);return}if(_&128){f.suspense.move(a,h,b);return}if(_&64){S.move(f,a,h,vt);return}if(S===ye){n(g,a,h);for(let w=0;w<y.length;w++)st(y[w],a,h,b);n(f.anchor,a,h);return}if(S===Ds){L(f,a,h);return}if(b!==2&&_&1&&x)if(b===0)x.persisted&&!g[js]?n(g,a,h):(x.beforeEnter(g),n(g,a,h),ae(()=>x.enter(g),m));else{const{leave:w,delayLeave:E,afterLeave:R}=x,$=()=>{f.ctx.isUnmounted?r(g):n(g,a,h)},k=()=>{const W=g._isLeaving||!!g[js];g._isLeaving&&g[js](!0),x.persisted&&!W?$():w(g,()=>{$(),R&&R()})};E?E(g,$,k):k()}else n(g,a,h)},Ae=(f,a,h,b=!1,m=!1)=>{const{type:g,props:S,ref:x,children:y,dynamicChildren:_,shapeFlag:O,patchFlag:w,dirs:E,cacheIndex:R,memo:$}=f;if(w===-2&&(m=!1),x!=null&&(ke(),Mt(x,null,h,f,!0),qe()),R!=null&&(a.renderCache[R]=void 0),O&256){a.ctx.deactivate(f);return}const k=O&1&&E,W=!It(f);let te;if(W&&(te=S&&S.onVnodeBeforeUnmount)&&Ie(te,a,f),O&6)vi(f.component,h,b);else{if(O&128){f.suspense.unmount(h,b);return}k&&nt(f,null,a,"beforeUnmount"),O&64?f.type.remove(f,a,h,vt,b):_&&!_.hasOnce&&(g!==ye||w>0&&w&64)?xt(_,a,h,!1,!0):(g===ye&&w&384||!m&&O&16)&&xt(y,a,h),b&&bn(f)}const re=$!=null&&R==null;(W&&(te=S&&S.onVnodeUnmounted)||k||re)&&ae(()=>{te&&Ie(te,a,f),k&&nt(f,null,a,"unmounted"),re&&(f.el=null)},h)},bn=f=>{const{type:a,el:h,anchor:b,transition:m}=f;if(a===ye){xi(h,b);return}if(a===Ds){T(f);return}const g=()=>{r(h),m&&!m.persisted&&m.afterLeave&&m.afterLeave()};if(f.shapeFlag&1&&m&&!m.persisted){const{leave:S,delayLeave:x}=m,y=()=>S(h,g);x?x(f.el,g,y):y()}else g()},xi=(f,a)=>{let h;for(;f!==a;)h=v(f),r(f),f=h;r(a)},vi=(f,a,h)=>{const{bum:b,scope:m,job:g,subTree:S,um:x,m:y,a:_}=f;Hn(y),Hn(_),b&&Zt(b),m.stop(),g&&(g.flags|=8,Ae(S,f,a,h)),x&&ae(x,a),ae(()=>{f.isUnmounted=!0},a)},xt=(f,a,h,b=!1,m=!1,g=0)=>{for(let S=g;S<f.length;S++)Ae(f[S],a,h,b,m)},qt=f=>{if(f.shapeFlag&6)return qt(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const a=v(f.anchor||f.el),h=a&&a[xo];return h?v(h):a};let As=!1;const yn=(f,a,h)=>{let b;f==null?a._vnode&&(Ae(a._vnode,null,null,!0),b=a._vnode.component):P(a._vnode||null,f,a,null,null,null,h),a._vnode=f,As||(As=!0,An(b),Ir(),As=!1)},vt={p:P,um:Ae,m:st,r:bn,mt:yt,mc:N,pc:G,pbc:ee,n:qt,o:e};return{render:yn,hydrate:void 0,createApp:Ko(yn)}}function $s({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function rt({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function nl(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function si(e,t,s=!1){const n=e.children,r=t.children;if(A(n)&&A(r))for(let i=0;i<n.length;i++){const o=n[i];let l=r[i];l.shapeFlag&1&&!l.dynamicChildren&&((l.patchFlag<=0||l.patchFlag===32)&&(l=r[i]=Ke(r[i]),l.el=o.el),!s&&l.patchFlag!==-2&&si(o,l)),l.type===Es&&(l.patchFlag===-1&&(l=r[i]=Ke(l)),l.el=o.el),l.type===Ge&&!l.el&&(l.el=o.el)}}function rl(e){const t=e.slice(),s=[0];let n,r,i,o,l;const c=e.length;for(n=0;n<c;n++){const d=e[n];if(d!==0){if(r=s[s.length-1],e[r]<d){t[n]=r,s.push(n);continue}for(i=0,o=s.length-1;i<o;)l=i+o>>1,e[s[l]]<d?i=l+1:o=l;d<e[s[i]]&&(i>0&&(t[n]=s[i-1]),s[i]=n)}}for(i=s.length,o=s[i-1];i-- >0;)s[i]=o,o=t[o];return s}function ni(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:ni(t)}function Hn(e){if(e)for(let t=0;t<e.length;t++)e[t].flags|=8}function ri(e){if(e.placeholder)return e.placeholder;const t=e.component;return t?ri(t.subTree):null}const ii=e=>e.__isSuspense;function il(e,t){t&&t.pendingBranch?A(e)?t.effects.push(...e):t.effects.push(e):ao(e)}const ye=Symbol.for("v-fgt"),Es=Symbol.for("v-txt"),Ge=Symbol.for("v-cmt"),Ds=Symbol.for("v-stc"),ft=[];let _e=null;function de(e=!1){ft.push(_e=e?null:[])}function oi(){ft.pop(),_e=ft[ft.length-1]||null}let Ht=1;function Ln(e,t=!1){Ht+=e,e<0&&_e&&t&&(_e.hasOnce=!0)}function li(e){return e.dynamicChildren=Ht>0?_e||gt:null,oi(),Ht>0&&_e&&_e.push(e),e}function ge(e,t,s,n,r,i){return li(U(e,t,s,n,r,i,!0))}function ol(e,t,s,n,r){return li(He(e,t,s,n,r,!0))}function ci(e){return e?e.__v_isVNode===!0:!1}function Ct(e,t){return e.type===t.type&&e.key===t.key}const fi=({key:e})=>e??null,ts=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?Q(e)||X(e)||M(e)?{i:xe,r:e,k:t,f:!!s}:e:null);function U(e,t=null,s=null,n=0,r=null,i=e===ye?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&fi(t),ref:t&&ts(t),scopeId:jr,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:n,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:xe};return l?(fs(c,s),i&128&&e.normalize(c)):s&&(c.shapeFlag|=Q(s)?8:16),Ht>0&&!o&&_e&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&_e.push(c),c}const He=ll;function ll(e,t=null,s=null,n=0,r=null,i=!1){if((!e||e===Fo)&&(e=Ge),ci(e)){const l=bt(e,t,!0);return s&&fs(l,s),Ht>0&&!i&&_e&&(l.shapeFlag&6?_e[_e.indexOf(e)]=l:_e.push(l)),l.patchFlag=-2,l}if(ml(e)&&(e=e.__vccOpts),t){t=cl(t);let{class:l,style:c}=t;l&&!Q(l)&&(t.class=ot(l)),B(c)&&(xs(c)&&!A(c)&&(c=ie({},c)),t.style=rn(c))}const o=Q(e)?1:ii(e)?128:Ss(e)?64:B(e)?4:M(e)?2:0;return U(e,t,s,n,r,o,i,!0)}function cl(e){return e?xs(e)||zr(e)?ie({},e):e:null}function bt(e,t,s=!1,n=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,d=t?fl(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:d,key:d&&fi(d),ref:t&&t.ref?s&&i?A(i)?i.concat(ts(t)):[i,ts(t)]:ts(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ye?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&bt(e.ssContent),ssFallback:e.ssFallback&&bt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&n&&pn(u,c.clone(u)),u}function ui(e=" ",t=0){return He(Es,null,e,t)}function Hs(e="",t=!1){return t?(de(),ol(Ge,null,e)):He(Ge,null,e)}function Ne(e){return e==null||typeof e=="boolean"?He(Ge):A(e)?He(ye,null,e.slice()):ci(e)?Ke(e):He(Es,null,String(e))}function Ke(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:bt(e)}function fs(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(A(t))s=16;else if(typeof t=="object")if(n&65){const r=t.default;r&&(r._c&&(r._d=!1),fs(e,r()),r._c&&(r._d=!0));return}else{s=32;const r=t._;!r&&!zr(t)?t._ctx=xe:r===3&&xe&&(xe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(M(t)){if(n&65){fs(e,{default:t});return}t={default:t,_ctx:xe},s=32}else t=String(t),n&64?(s=16,t=[ui(t)]):s=8;e.children=t,e.shapeFlag|=s}function fl(...e){const t={};for(let s=0;s<e.length;s++){const n=e[s];for(const r in n)if(r==="class")t.class!==n.class&&(t.class=ot([t.class,n.class]));else if(r==="style")t.style=rn([t.style,n.style]);else if(ds(r)){const i=t[r],o=n[r];o&&i!==o&&!(A(i)&&i.includes(o))?t[r]=i?[].concat(i,o):o:o==null&&i==null&&!hs(r)&&(t[r]=o)}else r!==""&&(t[r]=n[r])}return t}function Ie(e,t,s,n=null){Te(e,t,7,[s,n])}const ul=kr();let al=0;function dl(e,t,s){const n=e.type,r=(t?t.appContext:e.appContext)||ul,i={uid:al++,vnode:e,type:n,parent:t,appContext:r,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new ar(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(r.provides),ids:t?t.ids:["",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Xr(n,r),emitsOptions:qr(n,r),emit:null,emitted:null,propsDefaults:q,inheritAttrs:n.inheritAttrs,ctx:q,data:q,props:q,attrs:q,slots:q,refs:q,setupState:q,setupContext:null,suspense:s,suspenseId:s?s.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return i.ctx={_:i},i.root=t?t.root:i,i.emit=Wo.bind(null,i),e.ce&&e.ce(i),i}let ue=null;const ai=()=>ue||xe;let us,Lt;{const e=_s(),t=(s,n)=>{let r;return(r=e[s])||(r=e[s]=[]),r.push(n),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};us=t("__VUE_INSTANCE_SETTERS__",s=>ue=s),Lt=t("__VUE_SSR_SETTERS__",s=>Vt=s)}const Wt=e=>{const t=ue;return us(e),e.scope.on(),()=>{e.scope.off(),us(t)}},Vn=()=>{ue&&ue.scope.off(),us(null)};function di(e){return e.vnode.shapeFlag&4}let Vt=!1;function hl(e,t=!1,s=!1){t&&Lt(t);const{props:n,children:r}=e.vnode,i=di(e);Yo(e,n,i,t),Zo(e,r,s||t);const o=i?pl(e,t):void 0;return t&&Lt(!1),o}function pl(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,jo);const{setup:n}=s;if(n){ke();const r=e.setupContext=n.length>1?_l(e):null,i=Wt(e),o=Ut(n,e,0,[e.props,r]),l=nr(o);if(qe(),i(),(l||e.sp)&&!It(e)&&Lr(e),l){if(o.then(Vn,Vn),t)return o.then(c=>{Lt(!0);try{Kn(e,c,t)}finally{Lt(!1)}}).catch(c=>{vs(c,e,0)});e.asyncDep=o}else Kn(e,o)}else hi(e)}function Kn(e,t,s){M(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:B(t)&&(e.setupState=Ar(t)),hi(e)}function hi(e,t,s){const n=e.type;e.render||(e.render=n.render||De);{const r=Wt(e);ke();try{No(e)}finally{qe(),r()}}}const gl={get(e,t){return le(e,"get",""),e[t]}};function _l(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,gl),slots:e.slots,emit:e.emit,expose:t}}function Ts(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Ar(dn(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in Ft)return Ft[s](e)},has(t,s){return s in t||s in Ft}})):e.proxy}function ml(e){return M(e)&&"__vccOpts"in e}const as=(e,t)=>oo(e,t,Vt),bl="3.5.42";/**
|
|
14
|
+
* @vue/runtime-dom v3.5.42
|
|
15
|
+
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
16
|
+
* @license MIT
|
|
17
|
+
**/let Xs;const Un=typeof window<"u"&&window.trustedTypes;if(Un)try{Xs=Un.createPolicy("vue",{createHTML:e=>e})}catch{}const pi=Xs?e=>Xs.createHTML(e):e=>e,yl="http://www.w3.org/2000/svg",xl="http://www.w3.org/1998/Math/MathML",Ve=typeof document<"u"?document:null,Wn=Ve&&Ve.createElement("template"),vl={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const r=t==="svg"?Ve.createElementNS(yl,e):t==="mathml"?Ve.createElementNS(xl,e):s?Ve.createElement(e,{is:s}):Ve.createElement(e);return e==="select"&&n&&n.multiple!=null&&r.setAttribute("multiple",n.multiple),r},createText:e=>Ve.createTextNode(e),createComment:e=>Ve.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ve.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,r,i){const o=s?s.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),s),!(r===i||!(r=r.nextSibling)););else{Wn.innerHTML=pi(n==="svg"?`<svg>${e}</svg>`:n==="mathml"?`<math>${e}</math>`:e);const l=Wn.content;if(n==="svg"||n==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,s)}return[o?o.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},Sl=Symbol("_vtc");function wl(e,t,s){const n=e[Sl];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const Bn=Symbol("_vod"),Cl=Symbol("_vsh"),El=Symbol(""),Tl=/(?:^|;)\s*display\s*:/;function Ol(e,t,s){const n=e.style,r=Q(s);let i=!1;if(s&&!r){if(t)if(Q(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();s[l]==null&&Tt(n,l,"")}else for(const o in t)s[o]==null&&Tt(n,o,"");for(const o in s){o==="display"&&(i=!0);const l=s[o];l!=null?Pl(e,o,!Q(t)&&t?t[o]:void 0,l)||Tt(n,o,l):Tt(n,o,"")}}else if(r){if(t!==s){const o=n[El];o&&(s+=";"+o),n.cssText=s,i=Tl.test(s)}}else t&&e.removeAttribute("style");Bn in e&&(e[Bn]=i?n.display:"",e[Cl]&&(n.display="none"))}const zt=/\s*!important$/;function Tt(e,t,s){if(A(s))s.forEach(n=>Tt(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))zt.test(s)?e.setProperty(t,s.replace(zt,""),"important"):e.setProperty(t,s);else{const n=Al(e,t);zt.test(s)?e.setProperty(ut(n),s.replace(zt,""),"important"):e[n]=s}}const kn=["Webkit","Moz","ms"],Ls={};function Al(e,t){const s=Ls[t];if(s)return s;let n=we(t);if(n!=="filter"&&n in e)return Ls[t]=n;n=or(n);for(let r=0;r<kn.length;r++){const i=kn[r]+n;if(i in e)return Ls[t]=i}return t}function Pl(e,t,s,n){return e.tagName==="TEXTAREA"&&(t==="width"||t==="height")&&Q(n)&&s===n}const qn="http://www.w3.org/1999/xlink";function Jn(e,t,s,n,r,i=Mi(t)){n&&t.startsWith("xlink:")?s==null?e.removeAttributeNS(qn,t.slice(6,t.length)):e.setAttributeNS(qn,t,s):s==null||i&&!cr(s)?e.removeAttribute(t):e.setAttribute(t,i?"":ve(s)?String(s):s)}function Gn(e,t,s,n,r){if(t==="innerHTML"||t==="textContent"){s!=null&&(e[t]=t==="innerHTML"?pi(s):s);return}const i=e.tagName;if(t==="value"&&i!=="PROGRESS"&&!i.includes("-")){const l=i==="OPTION"?e.getAttribute("value")||"":e.value,c=s==null?e.type==="checkbox"?"on":"":String(s);(l!==c||!("_value"in e))&&(e.value=c),s==null&&e.removeAttribute(t),e._value=s;return}let o=!1;if(s===""||s==null){const l=typeof e[t];l==="boolean"?s=cr(s):s==null&&l==="string"?(s="",o=!0):l==="number"&&(s=0,o=!0)}try{e[t]=s}catch{}o&&e.removeAttribute(r||t)}function pt(e,t,s,n){e.addEventListener(t,s,n)}function Rl(e,t,s,n){e.removeEventListener(t,s,n)}const Yn=Symbol("_vei");function Ml(e,t,s,n,r=null){const i=e[Yn]||(e[Yn]={}),o=i[t];if(n&&o)o.value=n;else{const[l,c]=jl(t);if(n){const d=i[t]=Dl(n,r);pt(e,l,d,c)}else o&&(Rl(e,l,o,c),i[t]=void 0)}}const Il=/(Once|Passive|Capture)$/,Fl=/^on:?(?:Once|Passive|Capture)$/;function jl(e){let t,s;for(;(s=e.match(Il))&&!Fl.test(e);)t||(t={}),e=e.slice(0,e.length-s[1].length),t[s[1].toLowerCase()]=!0;return[e[2]===":"?e.slice(3):ut(e.slice(2)),t]}let Vs=0;const Nl=Promise.resolve(),$l=()=>Vs||(Nl.then(()=>Vs=0),Vs=Date.now());function Dl(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;const r=s.value;if(A(r)){const i=n.stopImmediatePropagation;n.stopImmediatePropagation=()=>{i.call(n),n._stopped=!0};const o=r.slice(),l=[n];for(let c=0;c<o.length&&!n._stopped;c++){const d=o[c];d&&Te(d,t,5,l)}}else Te(r,t,5,[n])};return s.value=e,s.attached=$l(),s}const zn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Hl=(e,t,s,n,r,i)=>{const o=r==="svg";t==="class"?wl(e,n,o):t==="style"?Ol(e,s,n):ds(t)?hs(t)||Ml(e,t,s,n,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Ll(e,t,n,o))?(Gn(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Jn(e,t,n,o,i,t!=="value")):e._isVueCE&&(Vl(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Q(n)))?Gn(e,we(t),n,i,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),Jn(e,t,n,o))};function Ll(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&zn(t)&&M(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return zn(t)&&Q(s)?!1:t in e}function Vl(e,t){const s=e._def.props;if(!s)return!1;const n=we(t);return Array.isArray(s)?s.some(r=>we(r)===n):Object.keys(s).some(r=>we(r)===n)}const Qn=e=>{const t=e.props["onUpdate:modelValue"]||!1;return A(t)?s=>Zt(t,s):t};function Kl(e){e.target.composing=!0}function Xn(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Qt=Symbol("_assign"),Xt=Symbol("_initialValue");function Ks(e,t,s){return t&&(e=e.trim()),s&&(e=nn(e)),e}const Ul={created(e,{modifiers:{lazy:t,trim:s,number:n}},r){e.parentNode&&(e.type==="text"?e[Xt]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[Xt]=e.defaultValue.replace(/\r\n?/g,`
|
|
18
|
+
`))),e[Qt]=Qn(r);const i=n||r.props&&r.props.type==="number";pt(e,t?"change":"input",o=>{o.target.composing||e[Qt](Ks(e.value,s,i))}),(s||i)&&pt(e,"change",()=>{e.value=Ks(e.value,s,i)}),t||(pt(e,"compositionstart",Kl),pt(e,"compositionend",Xn),pt(e,"change",Xn))},mounted(e,{value:t,modifiers:{trim:s,number:n}}){const r=t??"",i=e[Xt];delete e[Xt],i!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==i?e[Qt](Ks(e.value,s,n)):e.value=r},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:r,number:i}},o){if(e[Qt]=Qn(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?nn(e.value):e.value,c=t??"";if(l===c)return;const d=e.getRootNode();(d instanceof Document||d instanceof ShadowRoot)&&d.activeElement===e&&e.type!=="range"&&(n&&t===s||r&&e.value.trim()===c)||(e.value=c)}},Wl=ie({patchProp:Hl},vl);let Zn;function Bl(){return Zn||(Zn=tl(Wl))}const kl=(...e)=>{const t=Bl().createApp(...e),{mount:s}=t;return t.mount=n=>{const r=Jl(n);if(!r)return;const i=t._component;!M(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=s(r,!1,ql(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function ql(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Jl(e){return Q(e)?document.querySelector(e):e}/*!
|
|
19
|
+
* pinia v2.2.0
|
|
20
|
+
* (c) 2024 Eduardo San Martin Morote
|
|
21
|
+
* @license MIT
|
|
22
|
+
*/let gi;const Os=e=>gi=e,_i=Symbol();function Zs(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var jt;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(jt||(jt={}));function Gl(){const e=dr(!0),t=e.run(()=>Xe({}));let s=[],n=[];const r=dn({install(i){Os(r),r._a=i,i.provide(_i,r),i.config.globalProperties.$pinia=r,n.forEach(o=>s.push(o)),n=[]},use(i){return this._a?s.push(i):n.push(i),this},_p:s,_a:null,_e:e,_s:new Map,state:t});return r}const mi=()=>{};function er(e,t,s,n=mi){e.push(t);const r=()=>{const i=e.indexOf(t);i>-1&&(e.splice(i,1),n())};return!s&&hr()&&Fi(r),r}function dt(e,...t){e.slice().forEach(s=>{s(...t)})}const Yl=e=>e(),tr=Symbol(),Us=Symbol();function en(e,t){e instanceof Map&&t instanceof Map?t.forEach((s,n)=>e.set(n,s)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const s in t){if(!t.hasOwnProperty(s))continue;const n=t[s],r=e[s];Zs(r)&&Zs(n)&&e.hasOwnProperty(s)&&!X(n)&&!Be(n)?e[s]=en(r,n):e[s]=n}return e}const zl=Symbol();function Ql(e){return!Zs(e)||!e.hasOwnProperty(zl)}const{assign:Qe}=Object;function Xl(e){return!!(X(e)&&e.effect)}function Zl(e,t,s,n){const{state:r,actions:i,getters:o}=t,l=s.state.value[e];let c;function d(){l||(s.state.value[e]=r?r():{});const u=so(s.state.value[e]);return Qe(u,i,Object.keys(o||{}).reduce((p,v)=>(p[v]=dn(as(()=>{Os(s);const C=s._s.get(e);return o[v].call(C,C)})),p),{}))}return c=bi(e,d,t,s,n,!0),c}function bi(e,t,s={},n,r,i){let o;const l=Qe({actions:{}},s),c={deep:!0};let d,u,p=[],v=[],C;const I=n.state.value[e];!i&&!I&&(n.state.value[e]={});let P;function z(N){let D;d=u=!1,typeof N=="function"?(N(n.state.value[e]),D={type:jt.patchFunction,storeId:e,events:C}):(en(n.state.value[e],N),D={type:jt.patchObject,payload:N,storeId:e,events:C});const ee=P=Symbol();Rr().then(()=>{P===ee&&(d=!0)}),u=!0,dt(p,D,n.state.value[e])}const J=i?function(){const{state:D}=s,ee=D?D():{};this.$patch(be=>{Qe(be,ee)})}:mi;function j(){o.stop(),p=[],v=[],n._s.delete(e)}const L=(N,D="")=>{if(tr in N)return N[Us]=D,N;const ee=function(){Os(n);const be=Array.from(arguments),Oe=[],ze=[];function yt(F){Oe.push(F)}function Bt(F){ze.push(F)}dt(v,{args:be,name:ee[Us],store:V,after:yt,onError:Bt});let Z;try{Z=N.apply(this&&this.$id===e?this:V,be)}catch(F){throw dt(ze,F),F}return Z instanceof Promise?Z.then(F=>(dt(Oe,F),F)).catch(F=>(dt(ze,F),Promise.reject(F))):(dt(Oe,Z),Z)};return ee[tr]=!0,ee[Us]=D,ee},T={_p:n,$id:e,$onAction:er.bind(null,v),$patch:z,$reset:J,$subscribe(N,D={}){const ee=er(p,N,D.detached,()=>be()),be=o.run(()=>es(()=>n.state.value[e],Oe=>{(D.flush==="sync"?u:d)&&N({storeId:e,type:jt.direct,events:C},Oe)},Qe({},c,D)));return ee},$dispose:j},V=ys(T);n._s.set(e,V);const oe=(n._a&&n._a.runWithContext||Yl)(()=>n._e.run(()=>(o=dr()).run(()=>t({action:L}))));for(const N in oe){const D=oe[N];if(X(D)&&!Xl(D)||Be(D))i||(I&&Ql(D)&&(X(D)?D.value=I[N]:en(D,I[N])),n.state.value[e][N]=D);else if(typeof D=="function"){const ee=L(D,N);oe[N]=ee,l.actions[N]=D}}return Qe(V,oe),Qe(H(V),oe),Object.defineProperty(V,"$state",{get:()=>n.state.value[e],set:N=>{z(D=>{Qe(D,N)})}}),n._p.forEach(N=>{Qe(V,o.run(()=>N({store:V,app:n._a,pinia:n,options:l})))}),I&&i&&s.hydrate&&s.hydrate(V.$state,I),d=!0,u=!0,V}function ec(e,t,s){let n,r;const i=typeof t=="function";n=e,r=i?s:t;function o(l,c){const d=_o();return l=l||(d?Rt(_i,null):null),l&&Os(l),l=gi,l._s.has(n)||(i?bi(n,t,r,l):Zl(n,r,l)),l._s.get(n)}return o.$id=n,o}const yi=ec("memory",()=>{const e=Xe("project"),t=Xe([]),s=Xe(new Set),n=Xe(""),r=Xe([]),i=Xe(!1);async function o(){try{const p=await(await fetch("/api/nodes")).json();t.value=p.data||[]}catch(u){console.error("拉取节点数据失败:",u)}}async function l(u){await fetch(`/api/nodes/${u}`,{method:"DELETE"}),await o()}async function c(u){if(!u.trim()){r.value=[];return}const v=await(await fetch(`/api/search?q=${encodeURIComponent(u)}`)).json();r.value=v.data||[]}function d(){const p=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}`,v=new WebSocket(p);v.onopen=()=>{i.value=!0},v.onmessage=C=>{const I=JSON.parse(C.data);I.type==="MEMORY_HITS"?(s.value=new Set(I.hitNodeIds||[]),setTimeout(()=>{s.value.clear()},5e3)):I.type==="TREE_CHANGED"&&o()},v.onclose=()=>{i.value=!1,setTimeout(d,3e3)},v.onerror=()=>{v.close()}}return{currentTree:e,nodes:t,activeHitIds:s,searchQuery:n,searchResults:r,wsConnected:i,fetchNodes:o,deleteNode:l,performSearch:c,setupWebSocket:d}}),tc={class:"flex flex-col gap-2 font-mono"},sc={key:0,class:"text-center text-slate-600 py-8"},nc=["onClick"],rc={class:"flex items-center gap-1 text-slate-300 font-semibold"},ic={class:"text-[10px] text-slate-500 bg-slate-800 px-1 rounded"},oc={key:0,class:"p-1 flex flex-col gap-1"},lc={class:"flex justify-between items-center mb-1"},cc={class:"font-bold text-sky-300 flex items-center gap-1"},fc={key:0,class:"text-amber-400"},uc={class:"flex gap-1 items-center"},ac={class:"text-[10px] text-slate-500"},dc=["onClick"],hc={class:"text-slate-300 font-sans leading-relaxed text-[11px]"},pc=Hr({__name:"MemoryTree",setup(e){const t=yi(),s=Xe(new Set);function n(o){s.value.has(o)?s.value.delete(o):s.value.add(o)}const r=as(()=>t.nodes.filter(o=>t.currentTree==="global"?o.tree_type==="global":o.tree_type!=="global")),i=as(()=>{const o={};for(const l of r.value){const c=l.path||"/";o[c]||(o[c]=[]),o[c].push(l)}return o});return(o,l)=>(de(),ge("div",tc,[Object.keys(i.value).length===0?(de(),ge("div",sc," 当前记忆树暂无叶子沉淀 ")):Hs("",!0),(de(!0),ge(ye,null,Js(i.value,(c,d)=>(de(),ge("div",{key:d,class:"border border-slate-800/80 rounded bg-slate-950/40 overflow-hidden"},[U("div",{onClick:u=>n(d),class:"bg-slate-800/40 px-2 py-1 flex items-center justify-between cursor-pointer hover:bg-slate-800/70"},[U("div",rc,[U("span",null,he(s.value.has(d)?"▶":"▼"),1),U("span",null,"📁 "+he(d),1)]),U("span",ic,he(c.length),1)],8,nc),s.value.has(d)?Hs("",!0):(de(),ge("div",oc,[(de(!0),ge(ye,null,Js(c,u=>(de(),ge("div",{key:u.id,class:ot(["p-2 rounded border transition-all duration-300",ne(t).activeHitIds.has(u.id)?"bg-sky-950/80 border-sky-400 shadow-sm shadow-sky-500/50":"bg-slate-900/60 border-slate-800 hover:border-slate-700"])},[U("div",lc,[U("span",cc,[u.is_pinned?(de(),ge("span",fc,"📌")):Hs("",!0),ui(" "+he(u.name),1)]),U("div",uc,[U("span",ac,"×"+he(u.reinforce_count),1),U("button",{onClick:p=>ne(t).deleteNode(u.id),class:"text-rose-400 hover:text-rose-300 px-1 rounded"}," × ",8,dc)])]),U("div",hc,he(u.content),1)],2))),128))]))]))),128))]))}}),gc={class:"h-screen w-full flex flex-col bg-slate-900 text-slate-100 text-xs font-sans select-none"},_c={class:"flex border-b border-slate-800 bg-slate-950 p-2 gap-2 items-center"},mc={class:"flex-1 flex gap-1 justify-end"},bc={class:"p-2 border-b border-slate-800"},yc={class:"flex-1 overflow-y-auto p-2"},xc={key:0},vc={class:"text-slate-500 mb-2 font-mono"},Sc={class:"flex justify-between items-center text-slate-400 font-mono text-[10px]"},wc={class:"text-sky-400 font-bold"},Cc={class:"mt-1 text-slate-200"},Ec={key:1},Tc={class:"border-t border-slate-800 bg-slate-950 px-3 py-1 flex justify-between text-[10px] text-slate-500"},Oc=Hr({__name:"App",setup(e){const t=yi();return Kr(()=>{t.fetchNodes(),t.setupWebSocket()}),(s,n)=>(de(),ge("div",gc,[U("header",_c,[n[4]||(n[4]=U("div",{class:"font-bold text-sky-400 px-1 tracking-wider"},"TL·MEMORY",-1)),U("div",mc,[U("button",{onClick:n[0]||(n[0]=r=>ne(t).currentTree="project"),class:ot(["px-2 py-1 rounded transition-colors",ne(t).currentTree==="project"?"bg-sky-600 text-white font-medium":"bg-slate-800 text-slate-400 hover:bg-slate-700"])}," 当前工程 ",2),U("button",{onClick:n[1]||(n[1]=r=>ne(t).currentTree="global"),class:ot(["px-2 py-1 rounded transition-colors",ne(t).currentTree==="global"?"bg-sky-600 text-white font-medium":"bg-slate-800 text-slate-400 hover:bg-slate-700"])}," 全局偏好 ",2)])]),U("div",bc,[po(U("input",{"onUpdate:modelValue":n[2]||(n[2]=r=>ne(t).searchQuery=r),onInput:n[3]||(n[3]=r=>ne(t).performSearch(ne(t).searchQuery)),type:"text",placeholder:"FTS5 全文搜索记忆...",class:"w-full bg-slate-950 border border-slate-700 rounded px-2 py-1 text-slate-200 placeholder-slate-500 focus:outline-none focus:border-sky-500"},null,544),[[Ul,ne(t).searchQuery]])]),U("main",yc,[ne(t).searchQuery.trim().length>0?(de(),ge("div",xc,[U("div",vc,"全文检索匹配结果 ("+he(ne(t).searchResults.length)+")",1),(de(!0),ge(ye,null,Js(ne(t).searchResults,r=>{var i;return de(),ge("div",{key:r.id,class:"p-2 rounded mb-1 bg-slate-800/60 border border-slate-700/50"},[U("div",Sc,[U("span",null,he(r.path)+he(r.name),1),U("span",wc,"score: "+he((i=r.score)==null?void 0:i.toFixed(1)),1)]),U("div",Cc,he(r.content),1)])}),128))])):(de(),ge("div",Ec,[He(pc)]))]),U("footer",Tc,[U("span",null,"已载入节点: "+he(ne(t).nodes.length),1),U("span",{class:ot(["flex items-center gap-1",ne(t).wsConnected?"text-emerald-500":"text-rose-500"])}," ● "+he(ne(t).wsConnected?"实时链路正常":"实时链路断开"),3)])]))}});kl(Oc).use(Gl()).mount("#app");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.flex{display:flex}.h-screen{height:100vh}.w-full{width:100%}.flex-1{flex:1 1 0%}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-sky-400{--tw-border-opacity: 1;border-color:rgb(56 189 248 / var(--tw-border-opacity, 1))}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-slate-700\/50{border-color:#33415580}.border-slate-800{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-slate-800\/80{border-color:#1e293bcc}.bg-sky-600{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1))}.bg-sky-950\/80{background-color:#082f49cc}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-800\/40{background-color:#1e293b66}.bg-slate-800\/60{background-color:#1e293b99}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-900\/60{background-color:#0f172a99}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-slate-950\/40{background-color:#02061766}.p-1{padding:.25rem}.p-2{padding:.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-8{padding-top:2rem;padding-bottom:2rem}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-relaxed{line-height:1.625}.tracking-wider{letter-spacing:.05em}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-rose-400{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.text-rose-500{--tw-text-opacity: 1;color:rgb(244 63 94 / var(--tw-text-opacity, 1))}.text-sky-300{--tw-text-opacity: 1;color:rgb(125 211 252 / var(--tw-text-opacity, 1))}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.placeholder-slate-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(100 116 139 / var(--tw-placeholder-opacity, 1))}.placeholder-slate-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(100 116 139 / var(--tw-placeholder-opacity, 1))}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sky-500\/50{--tw-shadow-color: rgb(14 165 233 / .5);--tw-shadow: var(--tw-shadow-colored)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}.hover\:border-slate-700:hover{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.hover\:bg-slate-700:hover{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-800\/70:hover{background-color:#1e293bb3}.hover\:text-rose-300:hover{--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.focus\:border-sky-500:focus{--tw-border-opacity: 1;border-color:rgb(14 165 233 / var(--tw-border-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}
|