@vectorize-io/hindsight-client 0.4.18 → 0.4.19
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/dist/{generated/types.gen.d.ts → index.d.mts} +1426 -362
- package/dist/index.d.ts +5384 -0
- package/dist/index.js +1597 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1572 -0
- package/dist/index.mjs.map +1 -0
- package/generated/client/client.gen.ts +3 -1
- package/generated/sdk.gen.ts +17 -0
- package/generated/types.gen.ts +63 -1
- package/package.json +15 -5
- package/src/index.ts +2 -0
- package/dist/generated/client/client.gen.d.ts +0 -3
- package/dist/generated/client/client.gen.d.ts.map +0 -1
- package/dist/generated/client/client.gen.js +0 -233
- package/dist/generated/client/client.gen.js.map +0 -1
- package/dist/generated/client/index.d.ts +0 -9
- package/dist/generated/client/index.d.ts.map +0 -1
- package/dist/generated/client/index.js +0 -18
- package/dist/generated/client/index.js.map +0 -1
- package/dist/generated/client/types.gen.d.ts +0 -118
- package/dist/generated/client/types.gen.d.ts.map +0 -1
- package/dist/generated/client/types.gen.js +0 -4
- package/dist/generated/client/types.gen.js.map +0 -1
- package/dist/generated/client/utils.gen.d.ts +0 -34
- package/dist/generated/client/utils.gen.d.ts.map +0 -1
- package/dist/generated/client/utils.gen.js +0 -245
- package/dist/generated/client/utils.gen.js.map +0 -1
- package/dist/generated/client.gen.d.ts +0 -13
- package/dist/generated/client.gen.d.ts.map +0 -1
- package/dist/generated/client.gen.js +0 -7
- package/dist/generated/client.gen.js.map +0 -1
- package/dist/generated/core/auth.gen.d.ts +0 -19
- package/dist/generated/core/auth.gen.d.ts.map +0 -1
- package/dist/generated/core/auth.gen.js +0 -19
- package/dist/generated/core/auth.gen.js.map +0 -1
- package/dist/generated/core/bodySerializer.gen.d.ts +0 -26
- package/dist/generated/core/bodySerializer.gen.d.ts.map +0 -1
- package/dist/generated/core/bodySerializer.gen.js +0 -61
- package/dist/generated/core/bodySerializer.gen.js.map +0 -1
- package/dist/generated/core/params.gen.d.ts +0 -44
- package/dist/generated/core/params.gen.d.ts.map +0 -1
- package/dist/generated/core/params.gen.js +0 -105
- package/dist/generated/core/params.gen.js.map +0 -1
- package/dist/generated/core/pathSerializer.gen.d.ts +0 -34
- package/dist/generated/core/pathSerializer.gen.d.ts.map +0 -1
- package/dist/generated/core/pathSerializer.gen.js +0 -124
- package/dist/generated/core/pathSerializer.gen.js.map +0 -1
- package/dist/generated/core/queryKeySerializer.gen.d.ts +0 -19
- package/dist/generated/core/queryKeySerializer.gen.d.ts.map +0 -1
- package/dist/generated/core/queryKeySerializer.gen.js +0 -106
- package/dist/generated/core/queryKeySerializer.gen.js.map +0 -1
- package/dist/generated/core/serverSentEvents.gen.d.ts +0 -72
- package/dist/generated/core/serverSentEvents.gen.d.ts.map +0 -1
- package/dist/generated/core/serverSentEvents.gen.js +0 -140
- package/dist/generated/core/serverSentEvents.gen.js.map +0 -1
- package/dist/generated/core/types.gen.d.ts +0 -79
- package/dist/generated/core/types.gen.d.ts.map +0 -1
- package/dist/generated/core/types.gen.js +0 -4
- package/dist/generated/core/types.gen.js.map +0 -1
- package/dist/generated/core/utils.gen.d.ts +0 -20
- package/dist/generated/core/utils.gen.d.ts.map +0 -1
- package/dist/generated/core/utils.gen.js +0 -94
- package/dist/generated/core/utils.gen.js.map +0 -1
- package/dist/generated/index.d.ts +0 -3
- package/dist/generated/index.d.ts.map +0 -1
- package/dist/generated/index.js +0 -19
- package/dist/generated/index.js.map +0 -1
- package/dist/generated/sdk.gen.d.ts +0 -433
- package/dist/generated/sdk.gen.d.ts.map +0 -1
- package/dist/generated/sdk.gen.js +0 -636
- package/dist/generated/sdk.gen.js.map +0 -1
- package/dist/generated/types.gen.d.ts.map +0 -1
- package/dist/generated/types.gen.js +0 -4
- package/dist/generated/types.gen.js.map +0 -1
- package/dist/src/index.d.ts +0 -310
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -518
- package/dist/src/index.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../generated/core/bodySerializer.gen.ts","../generated/core/params.gen.ts","../generated/core/serverSentEvents.gen.ts","../generated/core/pathSerializer.gen.ts","../generated/core/utils.gen.ts","../generated/core/auth.gen.ts","../generated/client/utils.gen.ts","../generated/client/client.gen.ts","../generated/sdk.gen.ts","../generated/client.gen.ts","../src/index.ts"],"sourcesContent":["// This file is auto-generated by @hey-api/openapi-ts\n\nimport type {\n ArrayStyle,\n ObjectStyle,\n SerializerOptions,\n} from \"./pathSerializer.gen\";\n\nexport type QuerySerializer = (query: Record<string, unknown>) => string;\n\nexport type BodySerializer = (body: any) => any;\n\ntype QuerySerializerOptionsObject = {\n allowReserved?: boolean;\n array?: Partial<SerializerOptions<ArrayStyle>>;\n object?: Partial<SerializerOptions<ObjectStyle>>;\n};\n\nexport type QuerySerializerOptions = QuerySerializerOptionsObject & {\n /**\n * Per-parameter serialization overrides. When provided, these settings\n * override the global array/object settings for specific parameter names.\n */\n parameters?: Record<string, QuerySerializerOptionsObject>;\n};\n\nconst serializeFormDataPair = (\n data: FormData,\n key: string,\n value: unknown,\n): void => {\n if (typeof value === \"string\" || value instanceof Blob) {\n data.append(key, value);\n } else if (value instanceof Date) {\n data.append(key, value.toISOString());\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nconst serializeUrlSearchParamsPair = (\n data: URLSearchParams,\n key: string,\n value: unknown,\n): void => {\n if (typeof value === \"string\") {\n data.append(key, value);\n } else {\n data.append(key, JSON.stringify(value));\n }\n};\n\nexport const formDataBodySerializer = {\n bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(\n body: T,\n ): FormData => {\n const data = new FormData();\n\n Object.entries(body).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeFormDataPair(data, key, v));\n } else {\n serializeFormDataPair(data, key, value);\n }\n });\n\n return data;\n },\n};\n\nexport const jsonBodySerializer = {\n bodySerializer: <T>(body: T): string =>\n JSON.stringify(body, (_key, value) =>\n typeof value === \"bigint\" ? value.toString() : value,\n ),\n};\n\nexport const urlSearchParamsBodySerializer = {\n bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(\n body: T,\n ): string => {\n const data = new URLSearchParams();\n\n Object.entries(body).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((v) => serializeUrlSearchParamsPair(data, key, v));\n } else {\n serializeUrlSearchParamsPair(data, key, value);\n }\n });\n\n return data.toString();\n },\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\ntype Slot = \"body\" | \"headers\" | \"path\" | \"query\";\n\nexport type Field =\n | {\n in: Exclude<Slot, \"body\">;\n /**\n * Field name. This is the name we want the user to see and use.\n */\n key: string;\n /**\n * Field mapped name. This is the name we want to use in the request.\n * If omitted, we use the same value as `key`.\n */\n map?: string;\n }\n | {\n in: Extract<Slot, \"body\">;\n /**\n * Key isn't required for bodies.\n */\n key?: string;\n map?: string;\n }\n | {\n /**\n * Field name. This is the name we want the user to see and use.\n */\n key: string;\n /**\n * Field mapped name. This is the name we want to use in the request.\n * If `in` is omitted, `map` aliases `key` to the transport layer.\n */\n map: Slot;\n };\n\nexport interface Fields {\n allowExtra?: Partial<Record<Slot, boolean>>;\n args?: ReadonlyArray<Field>;\n}\n\nexport type FieldsConfig = ReadonlyArray<Field | Fields>;\n\nconst extraPrefixesMap: Record<string, Slot> = {\n $body_: \"body\",\n $headers_: \"headers\",\n $path_: \"path\",\n $query_: \"query\",\n};\nconst extraPrefixes = Object.entries(extraPrefixesMap);\n\ntype KeyMap = Map<\n string,\n | {\n in: Slot;\n map?: string;\n }\n | {\n in?: never;\n map: Slot;\n }\n>;\n\nconst buildKeyMap = (fields: FieldsConfig, map?: KeyMap): KeyMap => {\n if (!map) {\n map = new Map();\n }\n\n for (const config of fields) {\n if (\"in\" in config) {\n if (config.key) {\n map.set(config.key, {\n in: config.in,\n map: config.map,\n });\n }\n } else if (\"key\" in config) {\n map.set(config.key, {\n map: config.map,\n });\n } else if (config.args) {\n buildKeyMap(config.args, map);\n }\n }\n\n return map;\n};\n\ninterface Params {\n body: unknown;\n headers: Record<string, unknown>;\n path: Record<string, unknown>;\n query: Record<string, unknown>;\n}\n\nconst stripEmptySlots = (params: Params) => {\n for (const [slot, value] of Object.entries(params)) {\n if (value && typeof value === \"object\" && !Object.keys(value).length) {\n delete params[slot as Slot];\n }\n }\n};\n\nexport const buildClientParams = (\n args: ReadonlyArray<unknown>,\n fields: FieldsConfig,\n) => {\n const params: Params = {\n body: {},\n headers: {},\n path: {},\n query: {},\n };\n\n const map = buildKeyMap(fields);\n\n let config: FieldsConfig[number] | undefined;\n\n for (const [index, arg] of args.entries()) {\n if (fields[index]) {\n config = fields[index];\n }\n\n if (!config) {\n continue;\n }\n\n if (\"in\" in config) {\n if (config.key) {\n const field = map.get(config.key)!;\n const name = field.map || config.key;\n if (field.in) {\n (params[field.in] as Record<string, unknown>)[name] = arg;\n }\n } else {\n params.body = arg;\n }\n } else {\n for (const [key, value] of Object.entries(arg ?? {})) {\n const field = map.get(key);\n\n if (field) {\n if (field.in) {\n const name = field.map || key;\n (params[field.in] as Record<string, unknown>)[name] = value;\n } else {\n params[field.map] = value;\n }\n } else {\n const extra = extraPrefixes.find(([prefix]) =>\n key.startsWith(prefix),\n );\n\n if (extra) {\n const [prefix, slot] = extra;\n (params[slot] as Record<string, unknown>)[\n key.slice(prefix.length)\n ] = value;\n } else if (\"allowExtra\" in config && config.allowExtra) {\n for (const [slot, allowed] of Object.entries(config.allowExtra)) {\n if (allowed) {\n (params[slot as Slot] as Record<string, unknown>)[key] = value;\n break;\n }\n }\n }\n }\n }\n }\n }\n\n stripEmptySlots(params);\n\n return params;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Config } from \"./types.gen\";\n\nexport type ServerSentEventsOptions<TData = unknown> = Omit<\n RequestInit,\n \"method\"\n> &\n Pick<Config, \"method\" | \"responseTransformer\" | \"responseValidator\"> & {\n /**\n * Fetch API implementation. You can use this option to provide a custom\n * fetch instance.\n *\n * @default globalThis.fetch\n */\n fetch?: typeof fetch;\n /**\n * Implementing clients can call request interceptors inside this hook.\n */\n onRequest?: (url: string, init: RequestInit) => Promise<Request>;\n /**\n * Callback invoked when a network or parsing error occurs during streaming.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param error The error that occurred.\n */\n onSseError?: (error: unknown) => void;\n /**\n * Callback invoked when an event is streamed from the server.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @param event Event streamed from the server.\n * @returns Nothing (void).\n */\n onSseEvent?: (event: StreamEvent<TData>) => void;\n serializedBody?: RequestInit[\"body\"];\n /**\n * Default retry delay in milliseconds.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 3000\n */\n sseDefaultRetryDelay?: number;\n /**\n * Maximum number of retry attempts before giving up.\n */\n sseMaxRetryAttempts?: number;\n /**\n * Maximum retry delay in milliseconds.\n *\n * Applies only when exponential backoff is used.\n *\n * This option applies only if the endpoint returns a stream of events.\n *\n * @default 30000\n */\n sseMaxRetryDelay?: number;\n /**\n * Optional sleep function for retry backoff.\n *\n * Defaults to using `setTimeout`.\n */\n sseSleepFn?: (ms: number) => Promise<void>;\n url: string;\n };\n\nexport interface StreamEvent<TData = unknown> {\n data: TData;\n event?: string;\n id?: string;\n retry?: number;\n}\n\nexport type ServerSentEventsResult<\n TData = unknown,\n TReturn = void,\n TNext = unknown,\n> = {\n stream: AsyncGenerator<\n TData extends Record<string, unknown> ? TData[keyof TData] : TData,\n TReturn,\n TNext\n >;\n};\n\nexport const createSseClient = <TData = unknown>({\n onRequest,\n onSseError,\n onSseEvent,\n responseTransformer,\n responseValidator,\n sseDefaultRetryDelay,\n sseMaxRetryAttempts,\n sseMaxRetryDelay,\n sseSleepFn,\n url,\n ...options\n}: ServerSentEventsOptions): ServerSentEventsResult<TData> => {\n let lastEventId: string | undefined;\n\n const sleep =\n sseSleepFn ??\n ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms)));\n\n const createStream = async function* () {\n let retryDelay: number = sseDefaultRetryDelay ?? 3000;\n let attempt = 0;\n const signal = options.signal ?? new AbortController().signal;\n\n while (true) {\n if (signal.aborted) break;\n\n attempt++;\n\n const headers =\n options.headers instanceof Headers\n ? options.headers\n : new Headers(options.headers as Record<string, string> | undefined);\n\n if (lastEventId !== undefined) {\n headers.set(\"Last-Event-ID\", lastEventId);\n }\n\n try {\n const requestInit: RequestInit = {\n redirect: \"follow\",\n ...options,\n body: options.serializedBody,\n headers,\n signal,\n };\n let request = new Request(url, requestInit);\n if (onRequest) {\n request = await onRequest(url, requestInit);\n }\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = options.fetch ?? globalThis.fetch;\n const response = await _fetch(request);\n\n if (!response.ok)\n throw new Error(\n `SSE failed: ${response.status} ${response.statusText}`,\n );\n\n if (!response.body) throw new Error(\"No body in SSE response\");\n\n const reader = response.body\n .pipeThrough(new TextDecoderStream())\n .getReader();\n\n let buffer = \"\";\n\n const abortHandler = () => {\n try {\n reader.cancel();\n } catch {\n // noop\n }\n };\n\n signal.addEventListener(\"abort\", abortHandler);\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += value;\n\n const chunks = buffer.split(\"\\n\\n\");\n buffer = chunks.pop() ?? \"\";\n\n for (const chunk of chunks) {\n const lines = chunk.split(\"\\n\");\n const dataLines: Array<string> = [];\n let eventName: string | undefined;\n\n for (const line of lines) {\n if (line.startsWith(\"data:\")) {\n dataLines.push(line.replace(/^data:\\s*/, \"\"));\n } else if (line.startsWith(\"event:\")) {\n eventName = line.replace(/^event:\\s*/, \"\");\n } else if (line.startsWith(\"id:\")) {\n lastEventId = line.replace(/^id:\\s*/, \"\");\n } else if (line.startsWith(\"retry:\")) {\n const parsed = Number.parseInt(\n line.replace(/^retry:\\s*/, \"\"),\n 10,\n );\n if (!Number.isNaN(parsed)) {\n retryDelay = parsed;\n }\n }\n }\n\n let data: unknown;\n let parsedJson = false;\n\n if (dataLines.length) {\n const rawData = dataLines.join(\"\\n\");\n try {\n data = JSON.parse(rawData);\n parsedJson = true;\n } catch {\n data = rawData;\n }\n }\n\n if (parsedJson) {\n if (responseValidator) {\n await responseValidator(data);\n }\n\n if (responseTransformer) {\n data = await responseTransformer(data);\n }\n }\n\n onSseEvent?.({\n data,\n event: eventName,\n id: lastEventId,\n retry: retryDelay,\n });\n\n if (dataLines.length) {\n yield data as any;\n }\n }\n }\n } finally {\n signal.removeEventListener(\"abort\", abortHandler);\n reader.releaseLock();\n }\n\n break; // exit loop on normal completion\n } catch (error) {\n // connection failed or aborted; retry after delay\n onSseError?.(error);\n\n if (\n sseMaxRetryAttempts !== undefined &&\n attempt >= sseMaxRetryAttempts\n ) {\n break; // stop after firing error\n }\n\n // exponential backoff: double retry each attempt, cap at 30s\n const backoff = Math.min(\n retryDelay * 2 ** (attempt - 1),\n sseMaxRetryDelay ?? 30000,\n );\n await sleep(backoff);\n }\n }\n };\n\n const stream = createStream();\n\n return { stream };\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\ninterface SerializeOptions<T>\n extends SerializePrimitiveOptions, SerializerOptions<T> {}\n\ninterface SerializePrimitiveOptions {\n allowReserved?: boolean;\n name: string;\n}\n\nexport interface SerializerOptions<T> {\n /**\n * @default true\n */\n explode: boolean;\n style: T;\n}\n\nexport type ArrayStyle = \"form\" | \"spaceDelimited\" | \"pipeDelimited\";\nexport type ArraySeparatorStyle = ArrayStyle | MatrixStyle;\ntype MatrixStyle = \"label\" | \"matrix\" | \"simple\";\nexport type ObjectStyle = \"form\" | \"deepObject\";\ntype ObjectSeparatorStyle = ObjectStyle | MatrixStyle;\n\ninterface SerializePrimitiveParam extends SerializePrimitiveOptions {\n value: string;\n}\n\nexport const separatorArrayExplode = (style: ArraySeparatorStyle) => {\n switch (style) {\n case \"label\":\n return \".\";\n case \"matrix\":\n return \";\";\n case \"simple\":\n return \",\";\n default:\n return \"&\";\n }\n};\n\nexport const separatorArrayNoExplode = (style: ArraySeparatorStyle) => {\n switch (style) {\n case \"form\":\n return \",\";\n case \"pipeDelimited\":\n return \"|\";\n case \"spaceDelimited\":\n return \"%20\";\n default:\n return \",\";\n }\n};\n\nexport const separatorObjectExplode = (style: ObjectSeparatorStyle) => {\n switch (style) {\n case \"label\":\n return \".\";\n case \"matrix\":\n return \";\";\n case \"simple\":\n return \",\";\n default:\n return \"&\";\n }\n};\n\nexport const serializeArrayParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n}: SerializeOptions<ArraySeparatorStyle> & {\n value: unknown[];\n}) => {\n if (!explode) {\n const joinedValues = (\n allowReserved ? value : value.map((v) => encodeURIComponent(v as string))\n ).join(separatorArrayNoExplode(style));\n switch (style) {\n case \"label\":\n return `.${joinedValues}`;\n case \"matrix\":\n return `;${name}=${joinedValues}`;\n case \"simple\":\n return joinedValues;\n default:\n return `${name}=${joinedValues}`;\n }\n }\n\n const separator = separatorArrayExplode(style);\n const joinedValues = value\n .map((v) => {\n if (style === \"label\" || style === \"simple\") {\n return allowReserved ? v : encodeURIComponent(v as string);\n }\n\n return serializePrimitiveParam({\n allowReserved,\n name,\n value: v as string,\n });\n })\n .join(separator);\n return style === \"label\" || style === \"matrix\"\n ? separator + joinedValues\n : joinedValues;\n};\n\nexport const serializePrimitiveParam = ({\n allowReserved,\n name,\n value,\n}: SerializePrimitiveParam) => {\n if (value === undefined || value === null) {\n return \"\";\n }\n\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n );\n }\n\n return `${name}=${allowReserved ? value : encodeURIComponent(value)}`;\n};\n\nexport const serializeObjectParam = ({\n allowReserved,\n explode,\n name,\n style,\n value,\n valueOnly,\n}: SerializeOptions<ObjectSeparatorStyle> & {\n value: Record<string, unknown> | Date;\n valueOnly?: boolean;\n}) => {\n if (value instanceof Date) {\n return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`;\n }\n\n if (style !== \"deepObject\" && !explode) {\n let values: string[] = [];\n Object.entries(value).forEach(([key, v]) => {\n values = [\n ...values,\n key,\n allowReserved ? (v as string) : encodeURIComponent(v as string),\n ];\n });\n const joinedValues = values.join(\",\");\n switch (style) {\n case \"form\":\n return `${name}=${joinedValues}`;\n case \"label\":\n return `.${joinedValues}`;\n case \"matrix\":\n return `;${name}=${joinedValues}`;\n default:\n return joinedValues;\n }\n }\n\n const separator = separatorObjectExplode(style);\n const joinedValues = Object.entries(value)\n .map(([key, v]) =>\n serializePrimitiveParam({\n allowReserved,\n name: style === \"deepObject\" ? `${name}[${key}]` : key,\n value: v as string,\n }),\n )\n .join(separator);\n return style === \"label\" || style === \"matrix\"\n ? separator + joinedValues\n : joinedValues;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { BodySerializer, QuerySerializer } from \"./bodySerializer.gen\";\nimport {\n type ArraySeparatorStyle,\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from \"./pathSerializer.gen\";\n\nexport interface PathSerializer {\n path: Record<string, unknown>;\n url: string;\n}\n\nexport const PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nexport const defaultPathSerializer = ({ path, url: _url }: PathSerializer) => {\n let url = _url;\n const matches = _url.match(PATH_PARAM_RE);\n if (matches) {\n for (const match of matches) {\n let explode = false;\n let name = match.substring(1, match.length - 1);\n let style: ArraySeparatorStyle = \"simple\";\n\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n\n if (name.startsWith(\".\")) {\n name = name.substring(1);\n style = \"label\";\n } else if (name.startsWith(\";\")) {\n name = name.substring(1);\n style = \"matrix\";\n }\n\n const value = path[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n url = url.replace(\n match,\n serializeArrayParam({ explode, name, style, value }),\n );\n continue;\n }\n\n if (typeof value === \"object\") {\n url = url.replace(\n match,\n serializeObjectParam({\n explode,\n name,\n style,\n value: value as Record<string, unknown>,\n valueOnly: true,\n }),\n );\n continue;\n }\n\n if (style === \"matrix\") {\n url = url.replace(\n match,\n `;${serializePrimitiveParam({\n name,\n value: value as string,\n })}`,\n );\n continue;\n }\n\n const replaceValue = encodeURIComponent(\n style === \"label\" ? `.${value as string}` : (value as string),\n );\n url = url.replace(match, replaceValue);\n }\n }\n return url;\n};\n\nexport const getUrl = ({\n baseUrl,\n path,\n query,\n querySerializer,\n url: _url,\n}: {\n baseUrl?: string;\n path?: Record<string, unknown>;\n query?: Record<string, unknown>;\n querySerializer: QuerySerializer;\n url: string;\n}) => {\n const pathUrl = _url.startsWith(\"/\") ? _url : `/${_url}`;\n let url = (baseUrl ?? \"\") + pathUrl;\n if (path) {\n url = defaultPathSerializer({ path, url });\n }\n let search = query ? querySerializer(query) : \"\";\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n url += `?${search}`;\n }\n return url;\n};\n\nexport function getValidRequestBody(options: {\n body?: unknown;\n bodySerializer?: BodySerializer | null;\n serializedBody?: unknown;\n}) {\n const hasBody = options.body !== undefined;\n const isSerializedBody = hasBody && options.bodySerializer;\n\n if (isSerializedBody) {\n if (\"serializedBody\" in options) {\n const hasSerializedBody =\n options.serializedBody !== undefined && options.serializedBody !== \"\";\n\n return hasSerializedBody ? options.serializedBody : null;\n }\n\n // not all clients implement a serializedBody property (i.e. client-axios)\n return options.body !== \"\" ? options.body : null;\n }\n\n // plain/text body\n if (hasBody) {\n return options.body;\n }\n\n // no body was provided\n return undefined;\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nexport type AuthToken = string | undefined;\n\nexport interface Auth {\n /**\n * Which part of the request do we use to send the auth?\n *\n * @default 'header'\n */\n in?: \"header\" | \"query\" | \"cookie\";\n /**\n * Header or query parameter name.\n *\n * @default 'Authorization'\n */\n name?: string;\n scheme?: \"basic\" | \"bearer\";\n type: \"apiKey\" | \"http\";\n}\n\nexport const getAuthToken = async (\n auth: Auth,\n callback: ((auth: Auth) => Promise<AuthToken> | AuthToken) | AuthToken,\n): Promise<string | undefined> => {\n const token =\n typeof callback === \"function\" ? await callback(auth) : callback;\n\n if (!token) {\n return;\n }\n\n if (auth.scheme === \"bearer\") {\n return `Bearer ${token}`;\n }\n\n if (auth.scheme === \"basic\") {\n return `Basic ${btoa(token)}`;\n }\n\n return token;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { getAuthToken } from \"../core/auth.gen\";\nimport type { QuerySerializerOptions } from \"../core/bodySerializer.gen\";\nimport { jsonBodySerializer } from \"../core/bodySerializer.gen\";\nimport {\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n} from \"../core/pathSerializer.gen\";\nimport { getUrl } from \"../core/utils.gen\";\nimport type {\n Client,\n ClientOptions,\n Config,\n RequestOptions,\n} from \"./types.gen\";\n\nexport const createQuerySerializer = <T = unknown>({\n parameters = {},\n ...args\n}: QuerySerializerOptions = {}) => {\n const querySerializer = (queryParams: T) => {\n const search: string[] = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const name in queryParams) {\n const value = queryParams[name];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n const options = parameters[name] || args;\n\n if (Array.isArray(value)) {\n const serializedArray = serializeArrayParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: \"form\",\n value,\n ...options.array,\n });\n if (serializedArray) search.push(serializedArray);\n } else if (typeof value === \"object\") {\n const serializedObject = serializeObjectParam({\n allowReserved: options.allowReserved,\n explode: true,\n name,\n style: \"deepObject\",\n value: value as Record<string, unknown>,\n ...options.object,\n });\n if (serializedObject) search.push(serializedObject);\n } else {\n const serializedPrimitive = serializePrimitiveParam({\n allowReserved: options.allowReserved,\n name,\n value: value as string,\n });\n if (serializedPrimitive) search.push(serializedPrimitive);\n }\n }\n }\n return search.join(\"&\");\n };\n return querySerializer;\n};\n\n/**\n * Infers parseAs value from provided Content-Type header.\n */\nexport const getParseAs = (\n contentType: string | null,\n): Exclude<Config[\"parseAs\"], \"auto\"> => {\n if (!contentType) {\n // If no Content-Type header is provided, the best we can do is return the raw response body,\n // which is effectively the same as the 'stream' option.\n return \"stream\";\n }\n\n const cleanContent = contentType.split(\";\")[0]?.trim();\n\n if (!cleanContent) {\n return;\n }\n\n if (\n cleanContent.startsWith(\"application/json\") ||\n cleanContent.endsWith(\"+json\")\n ) {\n return \"json\";\n }\n\n if (cleanContent === \"multipart/form-data\") {\n return \"formData\";\n }\n\n if (\n [\"application/\", \"audio/\", \"image/\", \"video/\"].some((type) =>\n cleanContent.startsWith(type),\n )\n ) {\n return \"blob\";\n }\n\n if (cleanContent.startsWith(\"text/\")) {\n return \"text\";\n }\n\n return;\n};\n\nconst checkForExistence = (\n options: Pick<RequestOptions, \"auth\" | \"query\"> & {\n headers: Headers;\n },\n name?: string,\n): boolean => {\n if (!name) {\n return false;\n }\n if (\n options.headers.has(name) ||\n options.query?.[name] ||\n options.headers.get(\"Cookie\")?.includes(`${name}=`)\n ) {\n return true;\n }\n return false;\n};\n\nexport const setAuthParams = async ({\n security,\n ...options\n}: Pick<Required<RequestOptions>, \"security\"> &\n Pick<RequestOptions, \"auth\" | \"query\"> & {\n headers: Headers;\n }) => {\n for (const auth of security) {\n if (checkForExistence(options, auth.name)) {\n continue;\n }\n\n const token = await getAuthToken(auth, options.auth);\n\n if (!token) {\n continue;\n }\n\n const name = auth.name ?? \"Authorization\";\n\n switch (auth.in) {\n case \"query\":\n if (!options.query) {\n options.query = {};\n }\n options.query[name] = token;\n break;\n case \"cookie\":\n options.headers.append(\"Cookie\", `${name}=${token}`);\n break;\n case \"header\":\n default:\n options.headers.set(name, token);\n break;\n }\n }\n};\n\nexport const buildUrl: Client[\"buildUrl\"] = (options) =>\n getUrl({\n baseUrl: options.baseUrl as string,\n path: options.path,\n query: options.query,\n querySerializer:\n typeof options.querySerializer === \"function\"\n ? options.querySerializer\n : createQuerySerializer(options.querySerializer),\n url: options.url,\n });\n\nexport const mergeConfigs = (a: Config, b: Config): Config => {\n const config = { ...a, ...b };\n if (config.baseUrl?.endsWith(\"/\")) {\n config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);\n }\n config.headers = mergeHeaders(a.headers, b.headers);\n return config;\n};\n\nconst headersEntries = (headers: Headers): Array<[string, string]> => {\n const entries: Array<[string, string]> = [];\n headers.forEach((value, key) => {\n entries.push([key, value]);\n });\n return entries;\n};\n\nexport const mergeHeaders = (\n ...headers: Array<Required<Config>[\"headers\"] | undefined>\n): Headers => {\n const mergedHeaders = new Headers();\n for (const header of headers) {\n if (!header) {\n continue;\n }\n\n const iterator =\n header instanceof Headers\n ? headersEntries(header)\n : Object.entries(header);\n\n for (const [key, value] of iterator) {\n if (value === null) {\n mergedHeaders.delete(key);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n mergedHeaders.append(key, v as string);\n }\n } else if (value !== undefined) {\n // assume object headers are meant to be JSON stringified, i.e. their\n // content value in OpenAPI specification is 'application/json'\n mergedHeaders.set(\n key,\n typeof value === \"object\" ? JSON.stringify(value) : (value as string),\n );\n }\n }\n }\n return mergedHeaders;\n};\n\ntype ErrInterceptor<Err, Res, Req, Options> = (\n error: Err,\n response: Res,\n request: Req,\n options: Options,\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (\n request: Req,\n options: Options,\n) => Req | Promise<Req>;\n\ntype ResInterceptor<Res, Req, Options> = (\n response: Res,\n request: Req,\n options: Options,\n) => Res | Promise<Res>;\n\nclass Interceptors<Interceptor> {\n fns: Array<Interceptor | null> = [];\n\n clear(): void {\n this.fns = [];\n }\n\n eject(id: number | Interceptor): void {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = null;\n }\n }\n\n exists(id: number | Interceptor): boolean {\n const index = this.getInterceptorIndex(id);\n return Boolean(this.fns[index]);\n }\n\n getInterceptorIndex(id: number | Interceptor): number {\n if (typeof id === \"number\") {\n return this.fns[id] ? id : -1;\n }\n return this.fns.indexOf(id);\n }\n\n update(\n id: number | Interceptor,\n fn: Interceptor,\n ): number | Interceptor | false {\n const index = this.getInterceptorIndex(id);\n if (this.fns[index]) {\n this.fns[index] = fn;\n return id;\n }\n return false;\n }\n\n use(fn: Interceptor): number {\n this.fns.push(fn);\n return this.fns.length - 1;\n }\n}\n\nexport interface Middleware<Req, Res, Err, Options> {\n error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;\n request: Interceptors<ReqInterceptor<Req, Options>>;\n response: Interceptors<ResInterceptor<Res, Req, Options>>;\n}\n\nexport const createInterceptors = <Req, Res, Err, Options>(): Middleware<\n Req,\n Res,\n Err,\n Options\n> => ({\n error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),\n request: new Interceptors<ReqInterceptor<Req, Options>>(),\n response: new Interceptors<ResInterceptor<Res, Req, Options>>(),\n});\n\nconst defaultQuerySerializer = createQuerySerializer({\n allowReserved: false,\n array: {\n explode: true,\n style: \"form\",\n },\n object: {\n explode: true,\n style: \"deepObject\",\n },\n});\n\nconst defaultHeaders = {\n \"Content-Type\": \"application/json\",\n};\n\nexport const createConfig = <T extends ClientOptions = ClientOptions>(\n override: Config<Omit<ClientOptions, keyof T> & T> = {},\n): Config<Omit<ClientOptions, keyof T> & T> => ({\n ...jsonBodySerializer,\n headers: defaultHeaders,\n parseAs: \"auto\",\n querySerializer: defaultQuerySerializer,\n ...override,\n});\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { createSseClient } from \"../core/serverSentEvents.gen\";\nimport type { HttpMethod } from \"../core/types.gen\";\nimport { getValidRequestBody } from \"../core/utils.gen\";\nimport type {\n Client,\n Config,\n RequestOptions,\n ResolvedRequestOptions,\n} from \"./types.gen\";\nimport {\n buildUrl,\n createConfig,\n createInterceptors,\n getParseAs,\n mergeConfigs,\n mergeHeaders,\n setAuthParams,\n} from \"./utils.gen\";\n\ntype ReqInit = Omit<RequestInit, \"body\" | \"headers\"> & {\n body?: any;\n headers: ReturnType<typeof mergeHeaders>;\n};\n\nexport const createClient = (config: Config = {}): Client => {\n let _config = mergeConfigs(createConfig(), config);\n\n const getConfig = (): Config => ({ ..._config });\n\n const setConfig = (config: Config): Config => {\n _config = mergeConfigs(_config, config);\n return getConfig();\n };\n\n const interceptors = createInterceptors<\n Request,\n Response,\n unknown,\n ResolvedRequestOptions\n >();\n\n const beforeRequest = async (options: RequestOptions) => {\n const opts = {\n ..._config,\n ...options,\n fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,\n headers: mergeHeaders(_config.headers, options.headers),\n serializedBody: undefined,\n };\n\n if (opts.security) {\n await setAuthParams({\n ...opts,\n security: opts.security,\n });\n }\n\n if (opts.requestValidator) {\n await opts.requestValidator(opts);\n }\n\n if (opts.body !== undefined && opts.bodySerializer) {\n opts.serializedBody = opts.bodySerializer(opts.body);\n }\n\n // remove Content-Type header if body is empty to avoid sending invalid requests\n if (opts.body === undefined || opts.serializedBody === \"\") {\n opts.headers.delete(\"Content-Type\");\n }\n\n const url = buildUrl(opts);\n\n return { opts, url };\n };\n\n const request: Client[\"request\"] = async (options) => {\n // @ts-expect-error\n const { opts, url } = await beforeRequest(options);\n // Exclude hey-api internal fields that conflict with Deno's RequestInit.client\n const { client: _client, ...optsForRequest } = opts as typeof opts & { client?: unknown };\n const requestInit: ReqInit = {\n redirect: \"follow\",\n ...optsForRequest,\n body: getValidRequestBody(opts),\n };\n\n let request = new Request(url, requestInit);\n\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n\n // fetch must be assigned here, otherwise it would throw the error:\n // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n const _fetch = opts.fetch!;\n let response: Response;\n\n try {\n response = await _fetch(request);\n } catch (error) {\n // Handle fetch exceptions (AbortError, network errors, etc.)\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = (await fn(\n error,\n undefined as any,\n request,\n opts,\n )) as unknown;\n }\n }\n\n finalError = finalError || ({} as unknown);\n\n if (opts.throwOnError) {\n throw finalError;\n }\n\n // Return error response\n return opts.responseStyle === \"data\"\n ? undefined\n : {\n error: finalError,\n request,\n response: undefined as any,\n };\n }\n\n for (const fn of interceptors.response.fns) {\n if (fn) {\n response = await fn(response, request, opts);\n }\n }\n\n const result = {\n request,\n response,\n };\n\n if (response.ok) {\n const parseAs =\n (opts.parseAs === \"auto\"\n ? getParseAs(response.headers.get(\"Content-Type\"))\n : opts.parseAs) ?? \"json\";\n\n if (\n response.status === 204 ||\n response.headers.get(\"Content-Length\") === \"0\"\n ) {\n let emptyData: any;\n switch (parseAs) {\n case \"arrayBuffer\":\n case \"blob\":\n case \"text\":\n emptyData = await response[parseAs]();\n break;\n case \"formData\":\n emptyData = new FormData();\n break;\n case \"stream\":\n emptyData = response.body;\n break;\n case \"json\":\n default:\n emptyData = {};\n break;\n }\n return opts.responseStyle === \"data\"\n ? emptyData\n : {\n data: emptyData,\n ...result,\n };\n }\n\n let data: any;\n switch (parseAs) {\n case \"arrayBuffer\":\n case \"blob\":\n case \"formData\":\n case \"json\":\n case \"text\":\n data = await response[parseAs]();\n break;\n case \"stream\":\n return opts.responseStyle === \"data\"\n ? response.body\n : {\n data: response.body,\n ...result,\n };\n }\n\n if (parseAs === \"json\") {\n if (opts.responseValidator) {\n await opts.responseValidator(data);\n }\n\n if (opts.responseTransformer) {\n data = await opts.responseTransformer(data);\n }\n }\n\n return opts.responseStyle === \"data\"\n ? data\n : {\n data,\n ...result,\n };\n }\n\n const textError = await response.text();\n let jsonError: unknown;\n\n try {\n jsonError = JSON.parse(textError);\n } catch {\n // noop\n }\n\n const error = jsonError ?? textError;\n let finalError = error;\n\n for (const fn of interceptors.error.fns) {\n if (fn) {\n finalError = (await fn(error, response, request, opts)) as string;\n }\n }\n\n finalError = finalError || ({} as string);\n\n if (opts.throwOnError) {\n throw finalError;\n }\n\n // TODO: we probably want to return error and improve types\n return opts.responseStyle === \"data\"\n ? undefined\n : {\n error: finalError,\n ...result,\n };\n };\n\n const makeMethodFn =\n (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>\n request({ ...options, method });\n\n const makeSseFn =\n (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => {\n const { opts, url } = await beforeRequest(options);\n return createSseClient({\n ...opts,\n body: opts.body as BodyInit | null | undefined,\n headers: opts.headers as unknown as Record<string, string>,\n method,\n onRequest: async (url, init) => {\n let request = new Request(url, init);\n for (const fn of interceptors.request.fns) {\n if (fn) {\n request = await fn(request, opts);\n }\n }\n return request;\n },\n url,\n });\n };\n\n return {\n buildUrl,\n connect: makeMethodFn(\"CONNECT\"),\n delete: makeMethodFn(\"DELETE\"),\n get: makeMethodFn(\"GET\"),\n getConfig,\n head: makeMethodFn(\"HEAD\"),\n interceptors,\n options: makeMethodFn(\"OPTIONS\"),\n patch: makeMethodFn(\"PATCH\"),\n post: makeMethodFn(\"POST\"),\n put: makeMethodFn(\"PUT\"),\n request,\n setConfig,\n sse: {\n connect: makeSseFn(\"CONNECT\"),\n delete: makeSseFn(\"DELETE\"),\n get: makeSseFn(\"GET\"),\n head: makeSseFn(\"HEAD\"),\n options: makeSseFn(\"OPTIONS\"),\n patch: makeSseFn(\"PATCH\"),\n post: makeSseFn(\"POST\"),\n put: makeSseFn(\"PUT\"),\n trace: makeSseFn(\"TRACE\"),\n },\n trace: makeMethodFn(\"TRACE\"),\n } as Client;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport {\n type Client,\n formDataBodySerializer,\n type Options as Options2,\n type TDataShape,\n} from \"./client\";\nimport { client } from \"./client.gen\";\nimport type {\n AddBankBackgroundData,\n AddBankBackgroundErrors,\n AddBankBackgroundResponses,\n CancelOperationData,\n CancelOperationErrors,\n CancelOperationResponses,\n ClearBankMemoriesData,\n ClearBankMemoriesErrors,\n ClearBankMemoriesResponses,\n ClearMemoryObservationsData,\n ClearMemoryObservationsErrors,\n ClearMemoryObservationsResponses,\n ClearObservationsData,\n ClearObservationsErrors,\n ClearObservationsResponses,\n CreateDirectiveData,\n CreateDirectiveErrors,\n CreateDirectiveResponses,\n CreateMentalModelData,\n CreateMentalModelErrors,\n CreateMentalModelResponses,\n CreateOrUpdateBankData,\n CreateOrUpdateBankErrors,\n CreateOrUpdateBankResponses,\n CreateWebhookData,\n CreateWebhookErrors,\n CreateWebhookResponses,\n DeleteBankData,\n DeleteBankErrors,\n DeleteBankResponses,\n DeleteDirectiveData,\n DeleteDirectiveErrors,\n DeleteDirectiveResponses,\n DeleteDocumentData,\n DeleteDocumentErrors,\n DeleteDocumentResponses,\n DeleteMentalModelData,\n DeleteMentalModelErrors,\n DeleteMentalModelResponses,\n DeleteWebhookData,\n DeleteWebhookErrors,\n DeleteWebhookResponses,\n FileRetainData,\n FileRetainErrors,\n FileRetainResponses,\n GetAgentStatsData,\n GetAgentStatsErrors,\n GetAgentStatsResponses,\n GetBankConfigData,\n GetBankConfigErrors,\n GetBankConfigResponses,\n GetBankProfileData,\n GetBankProfileErrors,\n GetBankProfileResponses,\n GetChunkData,\n GetChunkErrors,\n GetChunkResponses,\n GetDirectiveData,\n GetDirectiveErrors,\n GetDirectiveResponses,\n GetDocumentData,\n GetDocumentErrors,\n GetDocumentResponses,\n GetEntityData,\n GetEntityErrors,\n GetEntityResponses,\n GetGraphData,\n GetGraphErrors,\n GetGraphResponses,\n GetMemoryData,\n GetMemoryErrors,\n GetMemoryResponses,\n GetMentalModelData,\n GetMentalModelErrors,\n GetMentalModelHistoryData,\n GetMentalModelHistoryErrors,\n GetMentalModelHistoryResponses,\n GetMentalModelResponses,\n GetObservationHistoryData,\n GetObservationHistoryErrors,\n GetObservationHistoryResponses,\n GetOperationStatusData,\n GetOperationStatusErrors,\n GetOperationStatusResponses,\n GetVersionData,\n GetVersionResponses,\n HealthEndpointHealthGetData,\n HealthEndpointHealthGetResponses,\n ListBanksData,\n ListBanksErrors,\n ListBanksResponses,\n ListDirectivesData,\n ListDirectivesErrors,\n ListDirectivesResponses,\n ListDocumentsData,\n ListDocumentsErrors,\n ListDocumentsResponses,\n ListEntitiesData,\n ListEntitiesErrors,\n ListEntitiesResponses,\n ListMemoriesData,\n ListMemoriesErrors,\n ListMemoriesResponses,\n ListMentalModelsData,\n ListMentalModelsErrors,\n ListMentalModelsResponses,\n ListOperationsData,\n ListOperationsErrors,\n ListOperationsResponses,\n ListTagsData,\n ListTagsErrors,\n ListTagsResponses,\n ListWebhookDeliveriesData,\n ListWebhookDeliveriesErrors,\n ListWebhookDeliveriesResponses,\n ListWebhooksData,\n ListWebhooksErrors,\n ListWebhooksResponses,\n MetricsEndpointMetricsGetData,\n MetricsEndpointMetricsGetResponses,\n RecallMemoriesData,\n RecallMemoriesErrors,\n RecallMemoriesResponses,\n RecoverConsolidationData,\n RecoverConsolidationErrors,\n RecoverConsolidationResponses,\n ReflectData,\n ReflectErrors,\n ReflectResponses,\n RefreshMentalModelData,\n RefreshMentalModelErrors,\n RefreshMentalModelResponses,\n RegenerateEntityObservationsData,\n RegenerateEntityObservationsErrors,\n RegenerateEntityObservationsResponses,\n ResetBankConfigData,\n ResetBankConfigErrors,\n ResetBankConfigResponses,\n RetainMemoriesData,\n RetainMemoriesErrors,\n RetainMemoriesResponses,\n RetryOperationData,\n RetryOperationErrors,\n RetryOperationResponses,\n TriggerConsolidationData,\n TriggerConsolidationErrors,\n TriggerConsolidationResponses,\n UpdateBankConfigData,\n UpdateBankConfigErrors,\n UpdateBankConfigResponses,\n UpdateBankData,\n UpdateBankDispositionData,\n UpdateBankDispositionErrors,\n UpdateBankDispositionResponses,\n UpdateBankErrors,\n UpdateBankResponses,\n UpdateDirectiveData,\n UpdateDirectiveErrors,\n UpdateDirectiveResponses,\n UpdateDocumentData,\n UpdateDocumentErrors,\n UpdateDocumentResponses,\n UpdateMentalModelData,\n UpdateMentalModelErrors,\n UpdateMentalModelResponses,\n UpdateWebhookData,\n UpdateWebhookErrors,\n UpdateWebhookResponses,\n} from \"./types.gen\";\n\nexport type Options<\n TData extends TDataShape = TDataShape,\n ThrowOnError extends boolean = boolean,\n> = Options2<TData, ThrowOnError> & {\n /**\n * You can provide a client instance returned by `createClient()` instead of\n * individual options. This might be also useful if you want to implement a\n * custom client.\n */\n client?: Client;\n /**\n * You can pass arbitrary values through the `meta` object. This can be\n * used to access values that aren't defined as part of the SDK function.\n */\n meta?: Record<string, unknown>;\n};\n\n/**\n * Health check endpoint\n *\n * Checks the health of the API and database connection\n */\nexport const healthEndpointHealthGet = <ThrowOnError extends boolean = false>(\n options?: Options<HealthEndpointHealthGetData, ThrowOnError>,\n) =>\n (options?.client ?? client).get<\n HealthEndpointHealthGetResponses,\n unknown,\n ThrowOnError\n >({ url: \"/health\", ...options });\n\n/**\n * Get API version and feature flags\n *\n * Returns API version information and enabled feature flags. Use this to check which capabilities are available in this deployment.\n */\nexport const getVersion = <ThrowOnError extends boolean = false>(\n options?: Options<GetVersionData, ThrowOnError>,\n) =>\n (options?.client ?? client).get<GetVersionResponses, unknown, ThrowOnError>({\n url: \"/version\",\n ...options,\n });\n\n/**\n * Prometheus metrics endpoint\n *\n * Exports metrics in Prometheus format for scraping\n */\nexport const metricsEndpointMetricsGet = <ThrowOnError extends boolean = false>(\n options?: Options<MetricsEndpointMetricsGetData, ThrowOnError>,\n) =>\n (options?.client ?? client).get<\n MetricsEndpointMetricsGetResponses,\n unknown,\n ThrowOnError\n >({ url: \"/metrics\", ...options });\n\n/**\n * Get memory graph data\n *\n * Retrieve graph data for visualization, optionally filtered by type (world/experience/opinion).\n */\nexport const getGraph = <ThrowOnError extends boolean = false>(\n options: Options<GetGraphData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n GetGraphResponses,\n GetGraphErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/graph\", ...options });\n\n/**\n * List memory units\n *\n * List memory units with pagination and optional full-text search. Supports filtering by type. Results are sorted by most recent first (mentioned_at DESC, then created_at DESC).\n */\nexport const listMemories = <ThrowOnError extends boolean = false>(\n options: Options<ListMemoriesData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n ListMemoriesResponses,\n ListMemoriesErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/memories/list\", ...options });\n\n/**\n * Get memory unit\n *\n * Get a single memory unit by ID with all its metadata including entities and tags. Note: the 'history' field is deprecated and always returns an empty list - use GET /memories/{memory_id}/history instead.\n */\nexport const getMemory = <ThrowOnError extends boolean = false>(\n options: Options<GetMemoryData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n GetMemoryResponses,\n GetMemoryErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/memories/{memory_id}\", ...options });\n\n/**\n * Get observation history\n *\n * Get the full history of an observation, with each change's source facts resolved to their text.\n */\nexport const getObservationHistory = <ThrowOnError extends boolean = false>(\n options: Options<GetObservationHistoryData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n GetObservationHistoryResponses,\n GetObservationHistoryErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/memories/{memory_id}/history\",\n ...options,\n });\n\n/**\n * Recall memory\n *\n * Recall memory using semantic similarity and spreading activation.\n *\n * The type parameter is optional and must be one of:\n * - `world`: General knowledge about people, places, events, and things that happen\n * - `experience`: Memories about experience, conversations, actions taken, and tasks performed\n */\nexport const recallMemories = <ThrowOnError extends boolean = false>(\n options: Options<RecallMemoriesData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n RecallMemoriesResponses,\n RecallMemoriesErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/memories/recall\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * Reflect and generate answer\n *\n * Reflect and formulate an answer using bank identity, world facts, and opinions.\n *\n * This endpoint:\n * 1. Retrieves experience (conversations and events)\n * 2. Retrieves world facts relevant to the query\n * 3. Retrieves existing opinions (bank's perspectives)\n * 4. Uses LLM to formulate a contextual answer\n * 5. Returns plain text answer and the facts used\n */\nexport const reflect = <ThrowOnError extends boolean = false>(\n options: Options<ReflectData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n ReflectResponses,\n ReflectErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/reflect\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * List all memory banks\n *\n * Get a list of all agents with their profiles\n */\nexport const listBanks = <ThrowOnError extends boolean = false>(\n options?: Options<ListBanksData, ThrowOnError>,\n) =>\n (options?.client ?? client).get<\n ListBanksResponses,\n ListBanksErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks\", ...options });\n\n/**\n * Get statistics for memory bank\n *\n * Get statistics about nodes and links for a specific agent\n */\nexport const getAgentStats = <ThrowOnError extends boolean = false>(\n options: Options<GetAgentStatsData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n GetAgentStatsResponses,\n GetAgentStatsErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/stats\", ...options });\n\n/**\n * List entities\n *\n * List all entities (people, organizations, etc.) known by the bank, ordered by mention count. Supports pagination.\n */\nexport const listEntities = <ThrowOnError extends boolean = false>(\n options: Options<ListEntitiesData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n ListEntitiesResponses,\n ListEntitiesErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/entities\", ...options });\n\n/**\n * Get entity details\n *\n * Get detailed information about an entity including observations (mental model).\n */\nexport const getEntity = <ThrowOnError extends boolean = false>(\n options: Options<GetEntityData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n GetEntityResponses,\n GetEntityErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/entities/{entity_id}\", ...options });\n\n/**\n * Regenerate entity observations (deprecated)\n *\n * This endpoint is deprecated. Entity observations have been replaced by mental models.\n *\n * @deprecated\n */\nexport const regenerateEntityObservations = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<RegenerateEntityObservationsData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n RegenerateEntityObservationsResponses,\n RegenerateEntityObservationsErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/entities/{entity_id}/regenerate\",\n ...options,\n });\n\n/**\n * List mental models\n *\n * List user-curated living documents that stay current.\n */\nexport const listMentalModels = <ThrowOnError extends boolean = false>(\n options: Options<ListMentalModelsData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n ListMentalModelsResponses,\n ListMentalModelsErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/mental-models\", ...options });\n\n/**\n * Create mental model\n *\n * Create a mental model by running reflect with the source query in the background. Returns an operation ID to track progress. The content is auto-generated by the reflect endpoint. Use the operations endpoint to check completion status.\n */\nexport const createMentalModel = <ThrowOnError extends boolean = false>(\n options: Options<CreateMentalModelData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n CreateMentalModelResponses,\n CreateMentalModelErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/mental-models\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * Delete mental model\n *\n * Delete a mental model.\n */\nexport const deleteMentalModel = <ThrowOnError extends boolean = false>(\n options: Options<DeleteMentalModelData, ThrowOnError>,\n) =>\n (options.client ?? client).delete<\n DeleteMentalModelResponses,\n DeleteMentalModelErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/mental-models/{mental_model_id}\",\n ...options,\n });\n\n/**\n * Get mental model\n *\n * Get a specific mental model by ID.\n */\nexport const getMentalModel = <ThrowOnError extends boolean = false>(\n options: Options<GetMentalModelData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n GetMentalModelResponses,\n GetMentalModelErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/mental-models/{mental_model_id}\",\n ...options,\n });\n\n/**\n * Update mental model\n *\n * Update a mental model's name and/or source query.\n */\nexport const updateMentalModel = <ThrowOnError extends boolean = false>(\n options: Options<UpdateMentalModelData, ThrowOnError>,\n) =>\n (options.client ?? client).patch<\n UpdateMentalModelResponses,\n UpdateMentalModelErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/mental-models/{mental_model_id}\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * Get mental model history\n *\n * Get the refresh history of a mental model, showing content changes over time.\n */\nexport const getMentalModelHistory = <ThrowOnError extends boolean = false>(\n options: Options<GetMentalModelHistoryData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n GetMentalModelHistoryResponses,\n GetMentalModelHistoryErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/mental-models/{mental_model_id}/history\",\n ...options,\n });\n\n/**\n * Refresh mental model\n *\n * Submit an async task to re-run the source query through reflect and update the content.\n */\nexport const refreshMentalModel = <ThrowOnError extends boolean = false>(\n options: Options<RefreshMentalModelData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n RefreshMentalModelResponses,\n RefreshMentalModelErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/mental-models/{mental_model_id}/refresh\",\n ...options,\n });\n\n/**\n * List directives\n *\n * List hard rules that are injected into prompts.\n */\nexport const listDirectives = <ThrowOnError extends boolean = false>(\n options: Options<ListDirectivesData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n ListDirectivesResponses,\n ListDirectivesErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/directives\", ...options });\n\n/**\n * Create directive\n *\n * Create a hard rule that will be injected into prompts.\n */\nexport const createDirective = <ThrowOnError extends boolean = false>(\n options: Options<CreateDirectiveData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n CreateDirectiveResponses,\n CreateDirectiveErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/directives\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * Delete directive\n *\n * Delete a directive.\n */\nexport const deleteDirective = <ThrowOnError extends boolean = false>(\n options: Options<DeleteDirectiveData, ThrowOnError>,\n) =>\n (options.client ?? client).delete<\n DeleteDirectiveResponses,\n DeleteDirectiveErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/directives/{directive_id}\",\n ...options,\n });\n\n/**\n * Get directive\n *\n * Get a specific directive by ID.\n */\nexport const getDirective = <ThrowOnError extends boolean = false>(\n options: Options<GetDirectiveData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n GetDirectiveResponses,\n GetDirectiveErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/directives/{directive_id}\",\n ...options,\n });\n\n/**\n * Update directive\n *\n * Update a directive's properties.\n */\nexport const updateDirective = <ThrowOnError extends boolean = false>(\n options: Options<UpdateDirectiveData, ThrowOnError>,\n) =>\n (options.client ?? client).patch<\n UpdateDirectiveResponses,\n UpdateDirectiveErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/directives/{directive_id}\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * List documents\n *\n * List documents with pagination and optional search. Documents are the source content from which memory units are extracted.\n */\nexport const listDocuments = <ThrowOnError extends boolean = false>(\n options: Options<ListDocumentsData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n ListDocumentsResponses,\n ListDocumentsErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/documents\", ...options });\n\n/**\n * Delete a document\n *\n * Delete a document and all its associated memory units and links.\n *\n * This will cascade delete:\n * - The document itself\n * - All memory units extracted from this document\n * - All links (temporal, semantic, entity) associated with those memory units\n *\n * This operation cannot be undone.\n */\nexport const deleteDocument = <ThrowOnError extends boolean = false>(\n options: Options<DeleteDocumentData, ThrowOnError>,\n) =>\n (options.client ?? client).delete<\n DeleteDocumentResponses,\n DeleteDocumentErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/documents/{document_id}\", ...options });\n\n/**\n * Get document details\n *\n * Get a specific document including its original text\n */\nexport const getDocument = <ThrowOnError extends boolean = false>(\n options: Options<GetDocumentData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n GetDocumentResponses,\n GetDocumentErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/documents/{document_id}\", ...options });\n\n/**\n * Update document\n *\n * Update mutable fields on a document without re-processing its content.\n *\n * **Tags** (`tags`): Propagated to all associated memory units. Observations derived from those units are invalidated and queued for re-consolidation under the new tags. Co-source memories from other documents that shared those observations are also reset.\n *\n * At least one field must be provided.\n */\nexport const updateDocument = <ThrowOnError extends boolean = false>(\n options: Options<UpdateDocumentData, ThrowOnError>,\n) =>\n (options.client ?? client).patch<\n UpdateDocumentResponses,\n UpdateDocumentErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/documents/{document_id}\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * List tags\n *\n * List all unique tags in a memory bank with usage counts. Supports wildcard search using '*' (e.g., 'user:*', '*-fred', 'tag*-2'). Case-insensitive.\n */\nexport const listTags = <ThrowOnError extends boolean = false>(\n options: Options<ListTagsData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n ListTagsResponses,\n ListTagsErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/tags\", ...options });\n\n/**\n * Get chunk details\n *\n * Get a specific chunk by its ID\n */\nexport const getChunk = <ThrowOnError extends boolean = false>(\n options: Options<GetChunkData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n GetChunkResponses,\n GetChunkErrors,\n ThrowOnError\n >({ url: \"/v1/default/chunks/{chunk_id}\", ...options });\n\n/**\n * List async operations\n *\n * Get a list of async operations for a specific agent, with optional filtering by status and operation type. Results are sorted by most recent first.\n */\nexport const listOperations = <ThrowOnError extends boolean = false>(\n options: Options<ListOperationsData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n ListOperationsResponses,\n ListOperationsErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/operations\", ...options });\n\n/**\n * Cancel a pending async operation\n *\n * Cancel a pending async operation by removing it from the queue\n */\nexport const cancelOperation = <ThrowOnError extends boolean = false>(\n options: Options<CancelOperationData, ThrowOnError>,\n) =>\n (options.client ?? client).delete<\n CancelOperationResponses,\n CancelOperationErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/operations/{operation_id}\",\n ...options,\n });\n\n/**\n * Get operation status\n *\n * Get the status of a specific async operation. Returns 'pending', 'completed', or 'failed'. Completed operations are removed from storage, so 'completed' means the operation finished successfully.\n */\nexport const getOperationStatus = <ThrowOnError extends boolean = false>(\n options: Options<GetOperationStatusData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n GetOperationStatusResponses,\n GetOperationStatusErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/operations/{operation_id}\",\n ...options,\n });\n\n/**\n * Retry a failed async operation\n *\n * Re-queue a failed async operation so the worker picks it up again\n */\nexport const retryOperation = <ThrowOnError extends boolean = false>(\n options: Options<RetryOperationData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n RetryOperationResponses,\n RetryOperationErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/operations/{operation_id}/retry\",\n ...options,\n });\n\n/**\n * Get memory bank profile\n *\n * Get disposition traits and mission for a memory bank. Auto-creates agent with defaults if not exists.\n *\n * @deprecated\n */\nexport const getBankProfile = <ThrowOnError extends boolean = false>(\n options: Options<GetBankProfileData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n GetBankProfileResponses,\n GetBankProfileErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/profile\", ...options });\n\n/**\n * Update memory bank disposition\n *\n * Update bank's disposition traits (skepticism, literalism, empathy)\n *\n * @deprecated\n */\nexport const updateBankDisposition = <ThrowOnError extends boolean = false>(\n options: Options<UpdateBankDispositionData, ThrowOnError>,\n) =>\n (options.client ?? client).put<\n UpdateBankDispositionResponses,\n UpdateBankDispositionErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/profile\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * Add/merge memory bank background (deprecated)\n *\n * Deprecated: Use PUT /mission instead. This endpoint now updates the mission field.\n *\n * @deprecated\n */\nexport const addBankBackground = <ThrowOnError extends boolean = false>(\n options: Options<AddBankBackgroundData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n AddBankBackgroundResponses,\n AddBankBackgroundErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/background\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * Delete memory bank\n *\n * Delete an entire memory bank including all memories, entities, documents, and the bank profile itself. This is a destructive operation that cannot be undone.\n */\nexport const deleteBank = <ThrowOnError extends boolean = false>(\n options: Options<DeleteBankData, ThrowOnError>,\n) =>\n (options.client ?? client).delete<\n DeleteBankResponses,\n DeleteBankErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}\", ...options });\n\n/**\n * Partial update memory bank\n *\n * Partially update an agent's profile. Only provided fields will be updated.\n */\nexport const updateBank = <ThrowOnError extends boolean = false>(\n options: Options<UpdateBankData, ThrowOnError>,\n) =>\n (options.client ?? client).patch<\n UpdateBankResponses,\n UpdateBankErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * Create or update memory bank\n *\n * Create a new agent or update existing agent with disposition and mission. Auto-fills missing fields with defaults.\n */\nexport const createOrUpdateBank = <ThrowOnError extends boolean = false>(\n options: Options<CreateOrUpdateBankData, ThrowOnError>,\n) =>\n (options.client ?? client).put<\n CreateOrUpdateBankResponses,\n CreateOrUpdateBankErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * Clear all observations\n *\n * Delete all observations for a memory bank. This is useful for resetting the consolidated knowledge.\n */\nexport const clearObservations = <ThrowOnError extends boolean = false>(\n options: Options<ClearObservationsData, ThrowOnError>,\n) =>\n (options.client ?? client).delete<\n ClearObservationsResponses,\n ClearObservationsErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/observations\", ...options });\n\n/**\n * Recover failed consolidation\n *\n * Reset all memories that were permanently marked as failed during consolidation (after exhausting all LLM retries and adaptive batch splitting) so they are picked up again on the next consolidation run. Does not delete any observations.\n */\nexport const recoverConsolidation = <ThrowOnError extends boolean = false>(\n options: Options<RecoverConsolidationData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n RecoverConsolidationResponses,\n RecoverConsolidationErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/consolidation/recover\", ...options });\n\n/**\n * Clear observations for a memory\n *\n * Delete all observations derived from a specific memory and reset it for re-consolidation. The memory itself is not deleted. A consolidation job is triggered automatically so the memory will produce fresh observations on the next consolidation run.\n */\nexport const clearMemoryObservations = <ThrowOnError extends boolean = false>(\n options: Options<ClearMemoryObservationsData, ThrowOnError>,\n) =>\n (options.client ?? client).delete<\n ClearMemoryObservationsResponses,\n ClearMemoryObservationsErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/memories/{memory_id}/observations\",\n ...options,\n });\n\n/**\n * Reset bank configuration\n *\n * Reset bank configuration to defaults by removing all bank-specific overrides. The bank will then use global and tenant-level configuration only.\n */\nexport const resetBankConfig = <ThrowOnError extends boolean = false>(\n options: Options<ResetBankConfigData, ThrowOnError>,\n) =>\n (options.client ?? client).delete<\n ResetBankConfigResponses,\n ResetBankConfigErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/config\", ...options });\n\n/**\n * Get bank configuration\n *\n * Get fully resolved configuration for a bank including all hierarchical overrides (global → tenant → bank). The 'config' field contains all resolved config values. The 'overrides' field shows only bank-specific overrides.\n */\nexport const getBankConfig = <ThrowOnError extends boolean = false>(\n options: Options<GetBankConfigData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n GetBankConfigResponses,\n GetBankConfigErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/config\", ...options });\n\n/**\n * Update bank configuration\n *\n * Update configuration overrides for a bank. Only hierarchical fields can be overridden (LLM settings, retention parameters, etc.). Keys can be provided in Python field format (llm_provider) or environment variable format (HINDSIGHT_API_LLM_PROVIDER).\n */\nexport const updateBankConfig = <ThrowOnError extends boolean = false>(\n options: Options<UpdateBankConfigData, ThrowOnError>,\n) =>\n (options.client ?? client).patch<\n UpdateBankConfigResponses,\n UpdateBankConfigErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/config\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * Trigger consolidation\n *\n * Run memory consolidation to create/update observations from recent memories.\n */\nexport const triggerConsolidation = <ThrowOnError extends boolean = false>(\n options: Options<TriggerConsolidationData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n TriggerConsolidationResponses,\n TriggerConsolidationErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/consolidate\", ...options });\n\n/**\n * List webhooks\n *\n * List all webhooks registered for a bank.\n */\nexport const listWebhooks = <ThrowOnError extends boolean = false>(\n options: Options<ListWebhooksData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n ListWebhooksResponses,\n ListWebhooksErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/webhooks\", ...options });\n\n/**\n * Register webhook\n *\n * Register a webhook endpoint to receive event notifications for this bank.\n */\nexport const createWebhook = <ThrowOnError extends boolean = false>(\n options: Options<CreateWebhookData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n CreateWebhookResponses,\n CreateWebhookErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/webhooks\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * Delete webhook\n *\n * Remove a registered webhook.\n */\nexport const deleteWebhook = <ThrowOnError extends boolean = false>(\n options: Options<DeleteWebhookData, ThrowOnError>,\n) =>\n (options.client ?? client).delete<\n DeleteWebhookResponses,\n DeleteWebhookErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/webhooks/{webhook_id}\", ...options });\n\n/**\n * Update webhook\n *\n * Update one or more fields of a registered webhook. Only provided fields are changed.\n */\nexport const updateWebhook = <ThrowOnError extends boolean = false>(\n options: Options<UpdateWebhookData, ThrowOnError>,\n) =>\n (options.client ?? client).patch<\n UpdateWebhookResponses,\n UpdateWebhookErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/webhooks/{webhook_id}\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * List webhook deliveries\n *\n * Inspect delivery history for a webhook (useful for debugging).\n */\nexport const listWebhookDeliveries = <ThrowOnError extends boolean = false>(\n options: Options<ListWebhookDeliveriesData, ThrowOnError>,\n) =>\n (options.client ?? client).get<\n ListWebhookDeliveriesResponses,\n ListWebhookDeliveriesErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/webhooks/{webhook_id}/deliveries\",\n ...options,\n });\n\n/**\n * Clear memory bank memories\n *\n * Delete memory units for a memory bank. Optionally filter by type (world, experience, opinion) to delete only specific types. This is a destructive operation that cannot be undone. The bank profile (disposition and background) will be preserved.\n */\nexport const clearBankMemories = <ThrowOnError extends boolean = false>(\n options: Options<ClearBankMemoriesData, ThrowOnError>,\n) =>\n (options.client ?? client).delete<\n ClearBankMemoriesResponses,\n ClearBankMemoriesErrors,\n ThrowOnError\n >({ url: \"/v1/default/banks/{bank_id}/memories\", ...options });\n\n/**\n * Retain memories\n *\n * Retain memory items with automatic fact extraction.\n *\n * This is the main endpoint for storing memories. It supports both synchronous and asynchronous processing via the `async` parameter.\n *\n * **Features:**\n * - Efficient batch processing\n * - Automatic fact extraction from natural language\n * - Entity recognition and linking\n * - Document tracking with automatic upsert (when document_id is provided)\n * - Temporal and semantic linking\n * - Optional asynchronous processing\n *\n * **The system automatically:**\n * 1. Extracts semantic facts from the content\n * 2. Generates embeddings\n * 3. Deduplicates similar facts\n * 4. Creates temporal, semantic, and entity links\n * 5. Tracks document metadata\n *\n * **When `async=true`:** Returns immediately after queuing. Use the operations endpoint to monitor progress.\n *\n * **When `async=false` (default):** Waits for processing to complete.\n *\n * **Note:** If a memory item has a `document_id` that already exists, the old document and its memory units will be deleted before creating new ones (upsert behavior).\n */\nexport const retainMemories = <ThrowOnError extends boolean = false>(\n options: Options<RetainMemoriesData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n RetainMemoriesResponses,\n RetainMemoriesErrors,\n ThrowOnError\n >({\n url: \"/v1/default/banks/{bank_id}/memories\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n/**\n * Convert files to memories\n *\n * Upload files (PDF, DOCX, etc.), convert them to markdown, and retain as memories.\n *\n * This endpoint handles file upload, conversion, and memory creation in a single operation.\n *\n * **Features:**\n * - Supports PDF, DOCX, PPTX, XLSX, images (with OCR), audio (with transcription)\n * - Automatic file-to-markdown conversion using pluggable parsers\n * - Files stored in object storage (PostgreSQL by default, S3 for production)\n * - Each file becomes a separate document with optional metadata/tags\n * - Always processes asynchronously — returns operation IDs immediately\n *\n * **The system automatically:**\n * 1. Stores uploaded files in object storage\n * 2. Converts files to markdown\n * 3. Creates document records with file metadata\n * 4. Extracts facts and creates memory units (same as regular retain)\n *\n * Use the operations endpoint to monitor progress.\n *\n * **Request format:** multipart/form-data with:\n * - `files`: One or more files to upload\n * - `request`: JSON string with FileRetainRequest model\n *\n * **Parser selection:**\n * - Set `parser` in the request body to override the server default for all files.\n * - Set `parser` inside a `files_metadata` entry for per-file control.\n * - Pass a list (e.g. `['iris', 'markitdown']`) to define an ordered fallback chain — each parser is tried in sequence until one succeeds.\n * - Falls back to the server default (`HINDSIGHT_API_FILE_PARSER`) if not specified.\n * - Only parsers enabled on the server may be requested; others return HTTP 400.\n */\nexport const fileRetain = <ThrowOnError extends boolean = false>(\n options: Options<FileRetainData, ThrowOnError>,\n) =>\n (options.client ?? client).post<\n FileRetainResponses,\n FileRetainErrors,\n ThrowOnError\n >({\n ...formDataBodySerializer,\n url: \"/v1/default/banks/{bank_id}/files/retain\",\n ...options,\n headers: {\n \"Content-Type\": null,\n ...options.headers,\n },\n });\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport {\n type ClientOptions,\n type Config,\n createClient,\n createConfig,\n} from \"./client\";\nimport type { ClientOptions as ClientOptions2 } from \"./types.gen\";\n\n/**\n * The `createClientConfig()` function will be called on client initialization\n * and the returned object will become the client's initial configuration.\n *\n * You may want to initialize your client this way instead of calling\n * `setConfig()`. This is useful for example if you're using Next.js\n * to ensure your client always has the correct values.\n */\nexport type CreateClientConfig<T extends ClientOptions = ClientOptions2> = (\n override?: Config<ClientOptions & T>,\n) => Config<Required<ClientOptions> & T>;\n\nexport const client = createClient(createConfig<ClientOptions2>());\n","/**\n * Hindsight Client - Clean, TypeScript SDK for the Hindsight API.\n *\n * Example:\n * ```typescript\n * import { HindsightClient } from '@vectorize-io/hindsight-client';\n *\n * // Without authentication\n * const client = new HindsightClient({ baseUrl: 'http://localhost:8888' });\n *\n * // With API key authentication\n * const client = new HindsightClient({\n * baseUrl: 'http://localhost:8888',\n * apiKey: 'your-api-key'\n * });\n *\n * // Retain a memory\n * await client.retain('alice', 'Alice loves AI');\n *\n * // Recall memories\n * const results = await client.recall('alice', 'What does Alice like?');\n *\n * // Generate contextual answer\n * const answer = await client.reflect('alice', 'What are my interests?');\n * ```\n */\n\nimport { createClient, createConfig } from '../generated/client';\nimport type { Client } from '../generated/client';\nimport * as sdk from '../generated/sdk.gen';\nimport type {\n RetainRequest,\n RetainResponse,\n RecallRequest,\n RecallResponse,\n RecallResult,\n ReflectRequest,\n ReflectResponse,\n FileRetainResponse,\n ListMemoryUnitsResponse,\n BankProfileResponse,\n BankConfigResponse,\n CreateBankRequest,\n Budget,\n} from '../generated/types.gen';\n\nexport interface HindsightClientOptions {\n baseUrl: string;\n /**\n * Optional API key for authentication (sent as Bearer token in Authorization header)\n */\n apiKey?: string;\n}\n\n/**\n * Error thrown by the Hindsight client when an API request fails.\n * Includes the HTTP status code and error details from the API.\n */\nexport class HindsightError extends Error {\n public statusCode?: number;\n public details?: unknown;\n\n constructor(message: string, statusCode?: number, details?: unknown) {\n super(message);\n this.name = 'HindsightError';\n this.statusCode = statusCode;\n this.details = details;\n }\n}\n\nexport interface EntityInput {\n text: string;\n type?: string;\n}\n\nexport interface MemoryItemInput {\n content: string;\n timestamp?: string | Date;\n context?: string;\n metadata?: Record<string, string>;\n document_id?: string;\n entities?: EntityInput[];\n tags?: string[];\n observation_scopes?: \"per_tag\" | \"combined\" | \"all_combinations\" | string[][];\n strategy?: string;\n}\n\nexport class HindsightClient {\n private client: Client;\n\n constructor(options: HindsightClientOptions) {\n this.client = createClient(\n createConfig({\n baseUrl: options.baseUrl,\n headers: options.apiKey\n ? { Authorization: `Bearer ${options.apiKey}` }\n : undefined,\n })\n );\n }\n\n /**\n * Validates the API response and throws an error if the request failed.\n */\n private validateResponse<T>(response: { data?: T; error?: unknown; response?: Response }, operation: string): T {\n if (!response.data) {\n // The generated client returns { error, response, request }\n // Status code is in response.status, not in the error object\n const error = response.error as any;\n const httpResponse = (response as any).response as Response | undefined;\n\n // Extract status code from the HTTP response object\n const statusCode = httpResponse?.status;\n const details = error?.detail || error?.message || error;\n\n throw new HindsightError(\n `${operation} failed: ${JSON.stringify(details)}`,\n statusCode,\n details\n );\n }\n return response.data;\n }\n\n /**\n * Retain a single memory for a bank.\n */\n async retain(\n bankId: string,\n content: string,\n options?: {\n timestamp?: Date | string;\n context?: string;\n metadata?: Record<string, string>;\n documentId?: string;\n async?: boolean;\n entities?: EntityInput[];\n /** Optional list of tags for this memory */\n tags?: string[];\n }\n ): Promise<RetainResponse> {\n const item: {\n content: string;\n timestamp?: string;\n context?: string;\n metadata?: Record<string, string>;\n document_id?: string;\n entities?: EntityInput[];\n tags?: string[];\n } = { content };\n if (options?.timestamp) {\n item.timestamp =\n options.timestamp instanceof Date\n ? options.timestamp.toISOString()\n : options.timestamp;\n }\n if (options?.context) {\n item.context = options.context;\n }\n if (options?.metadata) {\n item.metadata = options.metadata;\n }\n if (options?.documentId) {\n item.document_id = options.documentId;\n }\n if (options?.entities) {\n item.entities = options.entities;\n }\n if (options?.tags) {\n item.tags = options.tags;\n }\n\n const response = await sdk.retainMemories({\n client: this.client,\n path: { bank_id: bankId },\n body: { items: [item], async: options?.async },\n });\n\n return this.validateResponse(response, 'retain');\n }\n\n /**\n * Retain multiple memories in batch.\n */\n async retainBatch(bankId: string, items: MemoryItemInput[], options?: { documentId?: string; documentTags?: string[]; async?: boolean }): Promise<RetainResponse> {\n const processedItems = items.map((item) => ({\n content: item.content,\n context: item.context,\n metadata: item.metadata,\n document_id: item.document_id,\n entities: item.entities,\n tags: item.tags,\n observation_scopes: item.observation_scopes,\n strategy: item.strategy,\n timestamp:\n item.timestamp instanceof Date\n ? item.timestamp.toISOString()\n : item.timestamp,\n }));\n\n // If documentId is provided at the batch level, add it to all items that don't have one\n const itemsWithDocId = processedItems.map(item => ({\n ...item,\n document_id: item.document_id || options?.documentId\n }));\n\n const response = await sdk.retainMemories({\n client: this.client,\n path: { bank_id: bankId },\n body: {\n items: itemsWithDocId,\n document_tags: options?.documentTags,\n async: options?.async,\n },\n });\n\n return this.validateResponse(response, 'retainBatch');\n }\n\n /**\n * Upload files and retain their contents as memories.\n *\n * Files are automatically converted to text (PDF, DOCX, images via OCR, audio via\n * transcription, and more) and ingested as memories. Processing is always asynchronous —\n * use the returned operation IDs to track progress via the operations endpoint.\n *\n * @param bankId - The memory bank ID\n * @param files - Array of File or Blob objects to upload\n * @param options - Optional settings: context, documentTags, filesMetadata\n */\n async retainFiles(\n bankId: string,\n files: Array<File | Blob>,\n options?: {\n context?: string;\n filesMetadata?: Array<{ context?: string; document_id?: string; tags?: string[]; metadata?: Record<string, string> }>;\n }\n ): Promise<FileRetainResponse> {\n const meta = options?.filesMetadata ?? files.map(() => options?.context ? { context: options.context } : {});\n\n const requestBody = JSON.stringify({\n files_metadata: meta,\n });\n\n const response = await sdk.fileRetain({\n client: this.client,\n path: { bank_id: bankId },\n body: { files, request: requestBody },\n });\n\n return this.validateResponse(response, 'retainFiles');\n }\n\n /**\n * Recall memories with a natural language query.\n */\n async recall(\n bankId: string,\n query: string,\n options?: {\n types?: string[];\n maxTokens?: number;\n budget?: Budget;\n trace?: boolean;\n queryTimestamp?: string;\n includeEntities?: boolean;\n maxEntityTokens?: number;\n includeChunks?: boolean;\n maxChunkTokens?: number;\n /** Include source facts for observation-type results */\n includeSourceFacts?: boolean;\n /** Maximum tokens for source facts (default: 4096) */\n maxSourceFactsTokens?: number;\n /** Optional list of tags to filter memories by */\n tags?: string[];\n /** How to match tags: 'any' (OR, includes untagged), 'all' (AND, includes untagged), 'any_strict' (OR, excludes untagged), 'all_strict' (AND, excludes untagged). Default: 'any' */\n tagsMatch?: 'any' | 'all' | 'any_strict' | 'all_strict';\n }\n ): Promise<RecallResponse> {\n const response = await sdk.recallMemories({\n client: this.client,\n path: { bank_id: bankId },\n body: {\n query,\n types: options?.types,\n max_tokens: options?.maxTokens,\n budget: options?.budget || 'mid',\n trace: options?.trace,\n query_timestamp: options?.queryTimestamp,\n include: {\n entities: options?.includeEntities === false ? null : options?.includeEntities ? { max_tokens: options?.maxEntityTokens ?? 500 } : undefined,\n chunks: options?.includeChunks ? { max_tokens: options?.maxChunkTokens ?? 8192 } : undefined,\n source_facts: options?.includeSourceFacts ? { max_tokens: options?.maxSourceFactsTokens ?? 4096 } : undefined,\n },\n tags: options?.tags,\n tags_match: options?.tagsMatch,\n },\n });\n\n return this.validateResponse(response, 'recall');\n }\n\n /**\n * Reflect and generate a contextual answer using the bank's identity and memories.\n */\n async reflect(\n bankId: string,\n query: string,\n options?: {\n context?: string;\n budget?: Budget;\n /** Optional list of tags to filter memories by */\n tags?: string[];\n /** How to match tags: 'any' (OR, includes untagged), 'all' (AND, includes untagged), 'any_strict' (OR, excludes untagged), 'all_strict' (AND, excludes untagged). Default: 'any' */\n tagsMatch?: 'any' | 'all' | 'any_strict' | 'all_strict';\n }\n ): Promise<ReflectResponse> {\n const response = await sdk.reflect({\n client: this.client,\n path: { bank_id: bankId },\n body: {\n query,\n context: options?.context,\n budget: options?.budget || 'low',\n tags: options?.tags,\n tags_match: options?.tagsMatch,\n },\n });\n\n return this.validateResponse(response, 'reflect');\n }\n\n /**\n * List memories with pagination.\n */\n async listMemories(\n bankId: string,\n options?: { limit?: number; offset?: number; type?: string; q?: string }\n ): Promise<ListMemoryUnitsResponse> {\n const response = await sdk.listMemories({\n client: this.client,\n path: { bank_id: bankId },\n query: {\n limit: options?.limit,\n offset: options?.offset,\n type: options?.type,\n q: options?.q,\n },\n });\n\n return this.validateResponse(response, 'listMemories');\n }\n\n /**\n * Create or update a bank with disposition, missions, and operational configuration.\n */\n async createBank(\n bankId: string,\n options: {\n /** @deprecated Display label only. */\n name?: string;\n /** @deprecated Use reflectMission instead. */\n mission?: string;\n /** Mission/context for Reflect operations. */\n reflectMission?: string;\n /** @deprecated Alias for mission. */\n background?: string;\n /** @deprecated Use dispositionSkepticism, dispositionLiteralism, dispositionEmpathy instead. */\n disposition?: { skepticism: number; literalism: number; empathy: number };\n /** @deprecated Use updateBankConfig({ dispositionSkepticism }) instead. */\n dispositionSkepticism?: number;\n /** @deprecated Use updateBankConfig({ dispositionLiteralism }) instead. */\n dispositionLiteralism?: number;\n /** @deprecated Use updateBankConfig({ dispositionEmpathy }) instead. */\n dispositionEmpathy?: number;\n /** Steers what gets extracted during retain(). Injected alongside built-in rules. */\n retainMission?: string;\n /** Fact extraction mode: 'concise' (default), 'verbose', or 'custom'. */\n retainExtractionMode?: string;\n /** Custom extraction prompt (only active when retainExtractionMode is 'custom'). */\n retainCustomInstructions?: string;\n /** Maximum token size for each content chunk during retain. */\n retainChunkSize?: number;\n /** Toggle automatic observation consolidation after retain(). */\n enableObservations?: boolean;\n /** Controls what gets synthesised into observations. Replaces built-in rules. */\n observationsMission?: string;\n } = {}\n ): Promise<BankProfileResponse> {\n const response = await sdk.createOrUpdateBank({\n client: this.client,\n path: { bank_id: bankId },\n body: {\n name: options.name,\n mission: options.mission,\n reflect_mission: options.reflectMission,\n background: options.background,\n disposition: options.disposition,\n disposition_skepticism: options.dispositionSkepticism,\n disposition_literalism: options.dispositionLiteralism,\n disposition_empathy: options.dispositionEmpathy,\n retain_mission: options.retainMission,\n retain_extraction_mode: options.retainExtractionMode,\n retain_custom_instructions: options.retainCustomInstructions,\n retain_chunk_size: options.retainChunkSize,\n enable_observations: options.enableObservations,\n observations_mission: options.observationsMission,\n },\n });\n\n return this.validateResponse(response, 'createBank');\n }\n\n /**\n * Set or update the reflect mission for a memory bank.\n * @deprecated Use createBank({ reflectMission: '...' }) instead.\n */\n async setMission(bankId: string, mission: string): Promise<BankProfileResponse> {\n return this.createBank(bankId, { reflectMission: mission });\n }\n\n /**\n * Get a bank's profile.\n */\n async getBankProfile(bankId: string): Promise<BankProfileResponse> {\n const response = await sdk.getBankProfile({\n client: this.client,\n path: { bank_id: bankId },\n });\n\n return this.validateResponse(response, 'getBankProfile');\n }\n\n\n /**\n * Get the resolved configuration for a bank, including any bank-level overrides.\n *\n * Can be disabled on the server by setting `HINDSIGHT_API_ENABLE_BANK_CONFIG_API=false`.\n */\n async getBankConfig(bankId: string): Promise<BankConfigResponse> {\n const response = await sdk.getBankConfig({\n client: this.client,\n path: { bank_id: bankId },\n });\n\n return this.validateResponse(response, 'getBankConfig');\n }\n\n /**\n * Update configuration overrides for a bank.\n *\n * Can be disabled on the server by setting `HINDSIGHT_API_ENABLE_BANK_CONFIG_API=false`.\n *\n * @param bankId - The memory bank ID\n * @param options - Fields to override\n */\n async updateBankConfig(\n bankId: string,\n options: {\n reflectMission?: string;\n retainMission?: string;\n retainExtractionMode?: string;\n retainCustomInstructions?: string;\n retainChunkSize?: number;\n enableObservations?: boolean;\n observationsMission?: string;\n /** How skeptical vs trusting (1=trusting, 5=skeptical). */\n dispositionSkepticism?: number;\n /** How literally to interpret information (1=flexible, 5=literal). */\n dispositionLiteralism?: number;\n /** How much to consider emotional context (1=detached, 5=empathetic). */\n dispositionEmpathy?: number;\n },\n ): Promise<BankConfigResponse> {\n const updates: Record<string, unknown> = {};\n if (options.reflectMission !== undefined) updates.reflect_mission = options.reflectMission;\n if (options.retainMission !== undefined) updates.retain_mission = options.retainMission;\n if (options.retainExtractionMode !== undefined) updates.retain_extraction_mode = options.retainExtractionMode;\n if (options.retainCustomInstructions !== undefined)\n updates.retain_custom_instructions = options.retainCustomInstructions;\n if (options.retainChunkSize !== undefined) updates.retain_chunk_size = options.retainChunkSize;\n if (options.enableObservations !== undefined) updates.enable_observations = options.enableObservations;\n if (options.observationsMission !== undefined) updates.observations_mission = options.observationsMission;\n if (options.dispositionSkepticism !== undefined) updates.disposition_skepticism = options.dispositionSkepticism;\n if (options.dispositionLiteralism !== undefined) updates.disposition_literalism = options.dispositionLiteralism;\n if (options.dispositionEmpathy !== undefined) updates.disposition_empathy = options.dispositionEmpathy;\n\n const response = await sdk.updateBankConfig({\n client: this.client,\n path: { bank_id: bankId },\n body: { updates },\n });\n\n return this.validateResponse(response, 'updateBankConfig');\n }\n\n /**\n * Reset all bank-level configuration overrides, reverting to server defaults.\n *\n * Can be disabled on the server by setting `HINDSIGHT_API_ENABLE_BANK_CONFIG_API=false`.\n */\n async resetBankConfig(bankId: string): Promise<BankConfigResponse> {\n const response = await sdk.resetBankConfig({\n client: this.client,\n path: { bank_id: bankId },\n });\n\n return this.validateResponse(response, 'resetBankConfig');\n }\n\n /**\n * Delete a bank.\n */\n async deleteBank(bankId: string): Promise<void> {\n const response = await sdk.deleteBank({\n client: this.client,\n path: { bank_id: bankId },\n });\n if (response.error) {\n throw new Error(`deleteBank failed: ${JSON.stringify(response.error)}`);\n }\n }\n\n // Directive methods\n\n /**\n * Create a directive (hard rule for reflect).\n */\n async createDirective(\n bankId: string,\n name: string,\n content: string,\n options?: {\n priority?: number;\n isActive?: boolean;\n tags?: string[];\n }\n ): Promise<any> {\n const response = await sdk.createDirective({\n client: this.client,\n path: { bank_id: bankId },\n body: {\n name,\n content,\n priority: options?.priority ?? 0,\n is_active: options?.isActive ?? true,\n tags: options?.tags,\n },\n });\n\n return this.validateResponse(response, 'createDirective');\n }\n\n /**\n * List all directives in a bank.\n */\n async listDirectives(bankId: string, options?: { tags?: string[] }): Promise<any> {\n const response = await sdk.listDirectives({\n client: this.client,\n path: { bank_id: bankId },\n query: { tags: options?.tags },\n });\n\n return this.validateResponse(response, 'listDirectives');\n }\n\n /**\n * Get a specific directive.\n */\n async getDirective(bankId: string, directiveId: string): Promise<any> {\n const response = await sdk.getDirective({\n client: this.client,\n path: { bank_id: bankId, directive_id: directiveId },\n });\n\n return this.validateResponse(response, 'getDirective');\n }\n\n /**\n * Update a directive.\n */\n async updateDirective(\n bankId: string,\n directiveId: string,\n options: {\n name?: string;\n content?: string;\n priority?: number;\n isActive?: boolean;\n tags?: string[];\n }\n ): Promise<any> {\n const response = await sdk.updateDirective({\n client: this.client,\n path: { bank_id: bankId, directive_id: directiveId },\n body: {\n name: options.name,\n content: options.content,\n priority: options.priority,\n is_active: options.isActive,\n tags: options.tags,\n },\n });\n\n return this.validateResponse(response, 'updateDirective');\n }\n\n /**\n * Delete a directive.\n */\n async deleteDirective(bankId: string, directiveId: string): Promise<void> {\n const response = await sdk.deleteDirective({\n client: this.client,\n path: { bank_id: bankId, directive_id: directiveId },\n });\n if (response.error) {\n throw new Error(`deleteDirective failed: ${JSON.stringify(response.error)}`);\n }\n }\n\n // Mental Model methods\n\n /**\n * Create a mental model (runs reflect in background).\n */\n async createMentalModel(\n bankId: string,\n name: string,\n sourceQuery: string,\n options?: {\n tags?: string[];\n maxTokens?: number;\n trigger?: { refreshAfterConsolidation?: boolean };\n }\n ): Promise<any> {\n const response = await sdk.createMentalModel({\n client: this.client,\n path: { bank_id: bankId },\n body: {\n name,\n source_query: sourceQuery,\n tags: options?.tags,\n max_tokens: options?.maxTokens,\n trigger: options?.trigger ? { refresh_after_consolidation: options.trigger.refreshAfterConsolidation } : undefined,\n },\n });\n\n return this.validateResponse(response, 'createMentalModel');\n }\n\n /**\n * List all mental models in a bank.\n */\n async listMentalModels(bankId: string, options?: { tags?: string[] }): Promise<any> {\n const response = await sdk.listMentalModels({\n client: this.client,\n path: { bank_id: bankId },\n query: { tags: options?.tags },\n });\n\n return this.validateResponse(response, 'listMentalModels');\n }\n\n /**\n * Get a specific mental model.\n */\n async getMentalModel(bankId: string, mentalModelId: string): Promise<any> {\n const response = await sdk.getMentalModel({\n client: this.client,\n path: { bank_id: bankId, mental_model_id: mentalModelId },\n });\n\n return this.validateResponse(response, 'getMentalModel');\n }\n\n /**\n * Refresh a mental model to update with current knowledge.\n */\n async refreshMentalModel(bankId: string, mentalModelId: string): Promise<any> {\n const response = await sdk.refreshMentalModel({\n client: this.client,\n path: { bank_id: bankId, mental_model_id: mentalModelId },\n });\n\n return this.validateResponse(response, 'refreshMentalModel');\n }\n\n /**\n * Update a mental model's metadata.\n */\n async updateMentalModel(\n bankId: string,\n mentalModelId: string,\n options: {\n name?: string;\n sourceQuery?: string;\n tags?: string[];\n maxTokens?: number;\n trigger?: { refreshAfterConsolidation?: boolean };\n }\n ): Promise<any> {\n const response = await sdk.updateMentalModel({\n client: this.client,\n path: { bank_id: bankId, mental_model_id: mentalModelId },\n body: {\n name: options.name,\n source_query: options.sourceQuery,\n tags: options.tags,\n max_tokens: options.maxTokens,\n trigger: options.trigger ? { refresh_after_consolidation: options.trigger.refreshAfterConsolidation } : undefined,\n },\n });\n\n return this.validateResponse(response, 'updateMentalModel');\n }\n\n /**\n * Delete a mental model.\n */\n async deleteMentalModel(bankId: string, mentalModelId: string): Promise<void> {\n const response = await sdk.deleteMentalModel({\n client: this.client,\n path: { bank_id: bankId, mental_model_id: mentalModelId },\n });\n if (response.error) {\n throw new Error(`deleteMentalModel failed: ${JSON.stringify(response.error)}`);\n }\n }\n}\n\n// Re-export types for convenience\nexport type {\n RetainRequest,\n RetainResponse,\n RecallRequest,\n RecallResponse,\n RecallResult,\n ReflectRequest,\n ReflectResponse,\n FileRetainResponse,\n ListMemoryUnitsResponse,\n BankProfileResponse,\n BankConfigResponse,\n CreateBankRequest,\n Budget,\n};\n\n// Also export low-level SDK functions for advanced usage\nexport * as sdk from '../generated/sdk.gen';\nexport { createClient, createConfig } from '../generated/client';\nexport type { Client } from '../generated/client';\n"],"mappings":"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","names":["joinedValues","config","request","error","finalError","url"]}
|
|
@@ -78,9 +78,11 @@ export const createClient = (config: Config = {}): Client => {
|
|
|
78
78
|
const request: Client["request"] = async (options) => {
|
|
79
79
|
// @ts-expect-error
|
|
80
80
|
const { opts, url } = await beforeRequest(options);
|
|
81
|
+
// Exclude hey-api internal fields that conflict with Deno's RequestInit.client
|
|
82
|
+
const { client: _client, ...optsForRequest } = opts as typeof opts & { client?: unknown };
|
|
81
83
|
const requestInit: ReqInit = {
|
|
82
84
|
redirect: "follow",
|
|
83
|
-
...
|
|
85
|
+
...optsForRequest,
|
|
84
86
|
body: getValidRequestBody(opts),
|
|
85
87
|
};
|
|
86
88
|
|
package/generated/sdk.gen.ts
CHANGED
|
@@ -131,6 +131,9 @@ import type {
|
|
|
131
131
|
RecallMemoriesData,
|
|
132
132
|
RecallMemoriesErrors,
|
|
133
133
|
RecallMemoriesResponses,
|
|
134
|
+
RecoverConsolidationData,
|
|
135
|
+
RecoverConsolidationErrors,
|
|
136
|
+
RecoverConsolidationResponses,
|
|
134
137
|
ReflectData,
|
|
135
138
|
ReflectErrors,
|
|
136
139
|
ReflectResponses,
|
|
@@ -935,6 +938,20 @@ export const clearObservations = <ThrowOnError extends boolean = false>(
|
|
|
935
938
|
ThrowOnError
|
|
936
939
|
>({ url: "/v1/default/banks/{bank_id}/observations", ...options });
|
|
937
940
|
|
|
941
|
+
/**
|
|
942
|
+
* Recover failed consolidation
|
|
943
|
+
*
|
|
944
|
+
* Reset all memories that were permanently marked as failed during consolidation (after exhausting all LLM retries and adaptive batch splitting) so they are picked up again on the next consolidation run. Does not delete any observations.
|
|
945
|
+
*/
|
|
946
|
+
export const recoverConsolidation = <ThrowOnError extends boolean = false>(
|
|
947
|
+
options: Options<RecoverConsolidationData, ThrowOnError>,
|
|
948
|
+
) =>
|
|
949
|
+
(options.client ?? client).post<
|
|
950
|
+
RecoverConsolidationResponses,
|
|
951
|
+
RecoverConsolidationErrors,
|
|
952
|
+
ThrowOnError
|
|
953
|
+
>({ url: "/v1/default/banks/{bank_id}/consolidation/recover", ...options });
|
|
954
|
+
|
|
938
955
|
/**
|
|
939
956
|
* Clear observations for a memory
|
|
940
957
|
*
|
package/generated/types.gen.ts
CHANGED
|
@@ -1244,6 +1244,12 @@ export type MemoryItem = {
|
|
|
1244
1244
|
| "all_combinations"
|
|
1245
1245
|
| Array<Array<string>>
|
|
1246
1246
|
| null;
|
|
1247
|
+
/**
|
|
1248
|
+
* Strategy
|
|
1249
|
+
*
|
|
1250
|
+
* Named retain strategy for this item. Overrides the bank's default strategy for this item only. Strategies are defined in the bank config under 'retain_strategies'.
|
|
1251
|
+
*/
|
|
1252
|
+
strategy?: string | null;
|
|
1247
1253
|
};
|
|
1248
1254
|
|
|
1249
1255
|
/**
|
|
@@ -1602,6 +1608,18 @@ export type RecallResult = {
|
|
|
1602
1608
|
source_fact_ids?: Array<string> | null;
|
|
1603
1609
|
};
|
|
1604
1610
|
|
|
1611
|
+
/**
|
|
1612
|
+
* RecoverConsolidationResponse
|
|
1613
|
+
*
|
|
1614
|
+
* Response model for recovering failed consolidation.
|
|
1615
|
+
*/
|
|
1616
|
+
export type RecoverConsolidationResponse = {
|
|
1617
|
+
/**
|
|
1618
|
+
* Retried Count
|
|
1619
|
+
*/
|
|
1620
|
+
retried_count: number;
|
|
1621
|
+
};
|
|
1622
|
+
|
|
1605
1623
|
/**
|
|
1606
1624
|
* ReflectBasedOn
|
|
1607
1625
|
*
|
|
@@ -1958,9 +1976,15 @@ export type RetainResponse = {
|
|
|
1958
1976
|
/**
|
|
1959
1977
|
* Operation Id
|
|
1960
1978
|
*
|
|
1961
|
-
* Operation ID for tracking async operations. Use GET /v1/default/banks/{bank_id}/operations to list operations. Only present when async=true.
|
|
1979
|
+
* Operation ID for tracking async operations. Use GET /v1/default/banks/{bank_id}/operations to list operations. Only present when async=true. When items use different per-item strategies, use operation_ids instead.
|
|
1962
1980
|
*/
|
|
1963
1981
|
operation_id?: string | null;
|
|
1982
|
+
/**
|
|
1983
|
+
* Operation Ids
|
|
1984
|
+
*
|
|
1985
|
+
* Operation IDs when items were submitted as multiple strategy groups (async=true with mixed per-item strategies). operation_id is set to the first entry for backward compatibility.
|
|
1986
|
+
*/
|
|
1987
|
+
operation_ids?: Array<string> | null;
|
|
1964
1988
|
/**
|
|
1965
1989
|
* Token usage metrics for LLM calls during fact extraction (only present for synchronous operations)
|
|
1966
1990
|
*/
|
|
@@ -4233,6 +4257,44 @@ export type ClearObservationsResponses = {
|
|
|
4233
4257
|
export type ClearObservationsResponse =
|
|
4234
4258
|
ClearObservationsResponses[keyof ClearObservationsResponses];
|
|
4235
4259
|
|
|
4260
|
+
export type RecoverConsolidationData = {
|
|
4261
|
+
body?: never;
|
|
4262
|
+
headers?: {
|
|
4263
|
+
/**
|
|
4264
|
+
* Authorization
|
|
4265
|
+
*/
|
|
4266
|
+
authorization?: string | null;
|
|
4267
|
+
};
|
|
4268
|
+
path: {
|
|
4269
|
+
/**
|
|
4270
|
+
* Bank Id
|
|
4271
|
+
*/
|
|
4272
|
+
bank_id: string;
|
|
4273
|
+
};
|
|
4274
|
+
query?: never;
|
|
4275
|
+
url: "/v1/default/banks/{bank_id}/consolidation/recover";
|
|
4276
|
+
};
|
|
4277
|
+
|
|
4278
|
+
export type RecoverConsolidationErrors = {
|
|
4279
|
+
/**
|
|
4280
|
+
* Validation Error
|
|
4281
|
+
*/
|
|
4282
|
+
422: HttpValidationError;
|
|
4283
|
+
};
|
|
4284
|
+
|
|
4285
|
+
export type RecoverConsolidationError =
|
|
4286
|
+
RecoverConsolidationErrors[keyof RecoverConsolidationErrors];
|
|
4287
|
+
|
|
4288
|
+
export type RecoverConsolidationResponses = {
|
|
4289
|
+
/**
|
|
4290
|
+
* Successful Response
|
|
4291
|
+
*/
|
|
4292
|
+
200: RecoverConsolidationResponse;
|
|
4293
|
+
};
|
|
4294
|
+
|
|
4295
|
+
export type RecoverConsolidationResponse2 =
|
|
4296
|
+
RecoverConsolidationResponses[keyof RecoverConsolidationResponses];
|
|
4297
|
+
|
|
4236
4298
|
export type ClearMemoryObservationsData = {
|
|
4237
4299
|
body?: never;
|
|
4238
4300
|
headers?: {
|
package/package.json
CHANGED
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vectorize-io/hindsight-client",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.19",
|
|
4
4
|
"description": "TypeScript client for Hindsight - Semantic memory system with personality-driven thinking",
|
|
5
|
-
"main": "./dist/
|
|
6
|
-
"
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.mjs",
|
|
12
|
+
"require": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
7
15
|
"scripts": {
|
|
8
|
-
"build": "
|
|
16
|
+
"build": "tsup",
|
|
9
17
|
"clean": "rm -rf dist",
|
|
10
18
|
"generate": "npx @hey-api/openapi-ts",
|
|
11
19
|
"prepublishOnly": "npm run build",
|
|
12
|
-
"test": "jest"
|
|
20
|
+
"test": "jest",
|
|
21
|
+
"test:deno": "deno test --no-check --allow-env --allow-net --unstable-sloppy-imports --preload=tests/deno_setup.ts tests/main_operations.test.ts"
|
|
13
22
|
},
|
|
14
23
|
"keywords": [
|
|
15
24
|
"hindsight",
|
|
@@ -31,6 +40,7 @@
|
|
|
31
40
|
"@types/node": "^20.0.0",
|
|
32
41
|
"jest": "^29.0.0",
|
|
33
42
|
"ts-jest": "^29.0.0",
|
|
43
|
+
"tsup": "^8.5.1",
|
|
34
44
|
"typescript": "^5.0.0"
|
|
35
45
|
},
|
|
36
46
|
"files": [
|
package/src/index.ts
CHANGED
|
@@ -82,6 +82,7 @@ export interface MemoryItemInput {
|
|
|
82
82
|
entities?: EntityInput[];
|
|
83
83
|
tags?: string[];
|
|
84
84
|
observation_scopes?: "per_tag" | "combined" | "all_combinations" | string[][];
|
|
85
|
+
strategy?: string;
|
|
85
86
|
}
|
|
86
87
|
|
|
87
88
|
export class HindsightClient {
|
|
@@ -190,6 +191,7 @@ export class HindsightClient {
|
|
|
190
191
|
entities: item.entities,
|
|
191
192
|
tags: item.tags,
|
|
192
193
|
observation_scopes: item.observation_scopes,
|
|
194
|
+
strategy: item.strategy,
|
|
193
195
|
timestamp:
|
|
194
196
|
item.timestamp instanceof Date
|
|
195
197
|
? item.timestamp.toISOString()
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.gen.d.ts","sourceRoot":"","sources":["../../../generated/client/client.gen.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,MAAM,EACN,MAAM,EAGP,MAAM,aAAa,CAAC;AAgBrB,eAAO,MAAM,YAAY,GAAI,SAAQ,MAAW,KAAG,MAkRlD,CAAC"}
|