warm-sdk 0.0.0-stage → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/validation.ts","../src/responses.ts","../src/transport.ts","../src/client.ts"],"sourcesContent":["// Copyright 2024-2026 WritersLogic Contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { JsonValue } from './types.js'\n\nexport const MAX_BYTES = 16 * 1024 * 1024\nexport class JsonSizeError extends RangeError {}\nconst encoder = new TextEncoder()\nexport const byteLength = (value: string): number => encoder.encode(value).byteLength\n\nexport function string(value: unknown, name: string, max = MAX_BYTES, nonempty = false): string {\n if (typeof value !== 'string') throw new TypeError(`${name} must be a string`)\n for (let i = 0; i < value.length; i += 1) {\n const unit = value.charCodeAt(i)\n if (unit >= 0xd800 && unit <= 0xdbff) {\n const next = value.charCodeAt(++i)\n if (!(next >= 0xdc00 && next <= 0xdfff)) throw new TypeError(`${name} must be valid Unicode`)\n } else if (unit >= 0xdc00 && unit <= 0xdfff) throw new TypeError(`${name} must be valid Unicode`)\n }\n if (value.length > max || byteLength(value) > max || (nonempty && !value.trim())) {\n throw new RangeError(`${name} has an invalid byte length`)\n }\n return value\n}\n\nexport function integer(value: unknown, name: string, min = 0, max = Number.MAX_SAFE_INTEGER): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value)) throw new TypeError(`${name} must be a safe integer`)\n if (value < min || value > max) throw new RangeError(`${name} is outside its supported range`)\n return value\n}\n\nexport function number(value: unknown, name: string, min = -Infinity, max = Infinity): number {\n if (typeof value !== 'number' || !Number.isFinite(value)) throw new TypeError(`${name} must be finite`)\n if (value < min || value > max) throw new RangeError(`${name} is outside its supported range`)\n return value\n}\n\nexport function boolean(value: unknown, name: string): boolean {\n if (typeof value !== 'boolean') throw new TypeError(`${name} must be a boolean`)\n return value\n}\n\nexport function record(value: unknown, name: string, keys?: readonly string[]): Record<string, unknown> {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) throw new TypeError(`${name} must be an object`)\n const prototype = Object.getPrototypeOf(value)\n if (prototype !== null && prototype !== Object.prototype) throw new TypeError(`${name} must be a plain object`)\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key)!\n if (typeof key !== 'string' || !('value' in descriptor) || !descriptor.enumerable || (keys && !keys.includes(key))) {\n throw new TypeError(`${name} contains an unsupported property`)\n }\n }\n return value as Record<string, unknown>\n}\n\nexport function array(value: unknown, name: string, max = 1_048_576, min = 0): unknown[] {\n if (!Array.isArray(value)) throw new TypeError(`${name} must be an array`)\n if (value.length < min || value.length > max) throw new RangeError(`${name} has an invalid length`)\n for (let i = 0; i < value.length; i += 1) {\n const descriptor = Object.getOwnPropertyDescriptor(value, String(i))\n if (!descriptor || !('value' in descriptor)) throw new TypeError(`${name} must not contain holes or accessors`)\n }\n if (Reflect.ownKeys(value).length !== value.length + 1) throw new TypeError(`${name} contains extra properties`)\n return value\n}\n\nexport function id(value: unknown): string {\n const result = string(value, 'id', 256)\n if (!result.length) throw new RangeError('id must not be empty')\n if (/[\\u0000-\\u001f\\u007f-\\u009f]/.test(result) || result.startsWith('hms:')) throw new TypeError('id contains a reserved prefix or control character')\n return result\n}\n\nexport function segment(value: unknown): string {\n const result = id(value)\n // WHATWG URL parsing normalizes even percent-encoded dot-only path segments.\n if (result === '.' || result === '..') throw new TypeError('Dot-only document IDs cannot be addressed through a URL path')\n return encodeURIComponent(result).replace(/[!'()*]/g, char => `%${char.charCodeAt(0).toString(16).toUpperCase()}`)\n}\n\nexport function vector(value: unknown): number[] {\n const values = array(value, 'embedding', 1_048_576, 1).map(item => number(item, 'embedding value'))\n if (values.every(item => item === 0)) throw new RangeError('Embedding must not be all zeros')\n return values\n}\n\nexport function choice(value: unknown, name: string, values: readonly string[]): string {\n if (typeof value !== 'string' || !values.includes(value)) throw new TypeError(`${name} has an unsupported value`)\n return value\n}\n\nexport function json(value: unknown, limit = MAX_BYTES): JsonValue {\n const ancestors = new Set<object>()\n let bytes = 0\n const add = (size: number): void => {\n bytes += size\n if (bytes > limit) throw new JsonSizeError('JSON exceeds its byte limit')\n }\n const visit = (item: unknown, depth: number): JsonValue => {\n if (depth > 64) throw new RangeError('JSON nesting exceeds 64 levels')\n if (item === null || typeof item === 'boolean') { add(item === null ? 4 : item ? 4 : 5); return item }\n if (typeof item === 'number') { number(item, 'JSON number'); add(String(item).length); return item }\n if (typeof item === 'string') {\n string(item, 'JSON string', limit)\n add(byteLength(JSON.stringify(item)))\n return item\n }\n if (typeof item !== 'object') throw new TypeError('JSON contains an unsupported value')\n if (ancestors.has(item)) throw new TypeError('JSON must not contain cycles')\n ancestors.add(item)\n let result: JsonValue\n if (Array.isArray(item)) {\n const items = array(item, 'JSON array')\n add(2 + Math.max(0, items.length - 1))\n result = items.map(entry => visit(entry, depth + 1))\n } else {\n const source = record(item, 'JSON object')\n const entries = Object.entries(source)\n add(2 + Math.max(0, entries.length - 1))\n const target: Record<string, JsonValue> = Object.create(null)\n for (const [key, entry] of entries) {\n string(key, 'JSON key', limit)\n add(byteLength(JSON.stringify(key)) + 1)\n target[key] = visit(entry, depth + 1)\n }\n result = target\n }\n ancestors.delete(item)\n return result\n }\n return visit(value, 0)\n}\n\nexport function metadata(value: unknown, reserved = false): JsonValue {\n const object = record(value, 'metadata')\n if (reserved && Object.hasOwn(object, '_mem')) throw new TypeError('metadata._mem is reserved')\n return json(object, 64 * 1024)\n}\n\nexport function signal(value: unknown): AbortSignal | undefined {\n if (value === undefined) return undefined\n if (value === null || typeof value !== 'object' || typeof (value as AbortSignal).aborted !== 'boolean' ||\n typeof (value as AbortSignal).addEventListener !== 'function' || typeof (value as AbortSignal).removeEventListener !== 'function') {\n throw new TypeError('signal must be an AbortSignal')\n }\n return value as AbortSignal\n}\n\nexport function requestSignal(options: unknown): AbortSignal | undefined {\n return signal(record(options, 'request options', ['signal']).signal)\n}\n","// Copyright 2024-2026 WritersLogic Contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport * as v from './validation.js'\n\ntype Check = (value: unknown) => void\nconst text: Check = value => { v.string(value, 'response string') }\nconst numeric: Check = value => { v.number(value, 'response number') }\nconst count: Check = value => { v.integer(value, 'response count') }\nconst millis: Check = value => { v.integer(value, 'response time', Number.MIN_SAFE_INTEGER) }\nconst bool: Check = value => { v.boolean(value, 'response boolean') }\nconst anything: Check = value => { if (value === undefined) throw new TypeError('Missing response value') }\nconst optional = (check: Check): Check => value => { if (value !== undefined) check(value) }\nconst nullable = (check: Check): Check => value => { if (value !== null) check(value) }\nconst maybe = (check: Check): Check => optional(nullable(check))\nconst list = (check: Check): Check => value => { v.array(value, 'response array').forEach(check) }\nconst strings = list(text)\nconst shape = (fields: Record<string, Check>): Check => value => {\n const object = v.record(value, 'response')\n for (const [key, check] of Object.entries(fields)) check(object[key])\n}\nconst status: Check = value => { v.choice(value, 'fact status', ['current', 'superseded', 'expired', 'not-yet-valid']) }\nconst remembered = shape({ id: text, created: bool, supersedes: strings, supersededBy: strings, ingestTime: millis })\nconst chain = shape({ id: text, relation: value => { v.choice(value, 'chain relation', ['predecessor', 'successor']) }, effectiveFrom: millis, ingestTime: millis })\nconst explanation = shape({\n retrieved: bool, rank: maybe(count), lexicalScore: maybe(numeric), semanticScore: maybe(numeric),\n retrievalScore: maybe(numeric), lexicalWeight: numeric, semanticWeight: numeric, fusion: text,\n matchedTerms: strings, recencyFactor: numeric, historicalFactor: numeric, finalScore: maybe(numeric),\n status, asOf: millis, knownAt: maybe(millis), validFrom: maybe(millis), validTo: maybe(millis),\n withinValidity: bool, chain: list(chain),\n})\nconst factFields = {\n id: text, text: maybe(text), status, ingestTime: maybe(millis), eventTime: maybe(millis),\n validFrom: maybe(millis), validTo: maybe(millis), subject: maybe(text), entities: strings,\n supersedes: strings, supersededBy: strings, metadata: anything,\n}\nconst fact = shape({ ...factFields, effectiveFrom: millis })\nconst recalled = shape({ ...factFields, score: numeric, sourceUri: maybe(text), explanation: maybe(explanation) })\nconst vectorIndex = shape({ rows: count, graph: bool, current: bool, staleMutations: count, rebuildRecommended: bool })\n\nexport const schemas = {\n added: shape({ added: count }),\n deleted: shape({ deleted: bool }),\n chunk: shape({ revision: text, document: shape({ id: text, version: text, metadata: anything, chunkCount: count, sourceUri: maybe(text) }), index: count, id: text, startByte: count, endByte: count, text: maybe(text) }),\n query: shape({ matches: list(shape({ id: text, text, metadata: anything, score: numeric })) }),\n stats: shape({ tenant: text, documents: count, vectors: count, documentIndexTrained: bool, vectorIndex, usedBytes: numeric, capacityBytes: numeric }),\n maintained: shape({ documentIndexTrained: bool, vectorIndex }),\n capabilities: shape({ capabilities: shape({ contractVersion: count, profile: text, operations: strings, temporalQueries: bool, exactMetadataFilters: bool, subjectEntityFilters: bool, documentPagination: bool, committedErrorCode: text }) }),\n remembered: shape({ remembered: list(remembered) }),\n recalled: shape({ results: list(recalled) }),\n explained: shape({ explanation }),\n get: shape({ fact: nullable(fact) }),\n history: shape({ history: list(fact) }),\n forgotten: shape({ forgotten: strings, dryRun: bool, purged: bool }),\n consolidated: shape({ created: list(remembered), forgotten: strings, dryRun: bool }),\n}\n\nexport function response<T>(schema: Check): (value: unknown) => T {\n return value => { schema(value); return value as T }\n}\n\nexport function envelope<T>(schema: Check, key: string): (value: unknown) => T {\n return value => { schema(value); return (value as Record<string, unknown>)[key] as T }\n}\n","// Copyright 2024-2026 WritersLogic Contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { WarmClientOptions } from './types.js'\nimport { byteLength, integer, json, JsonSizeError, MAX_BYTES, record, string } from './validation.js'\n\nexport class WarmError extends Error {\n readonly code: string\n readonly status: number | undefined\n readonly statusCode: number | undefined\n readonly requestId: string | undefined\n\n constructor(message: string, code: string, status?: number, requestId?: string) {\n super(message)\n this.name = 'WarmError'\n this.code = code\n this.status = status\n this.statusCode = status\n this.requestId = requestId\n }\n}\n\nexport class Transport {\n readonly url: string\n #fetch: typeof globalThis.fetch\n #headers: Headers\n #timeout: number\n #secrets: string[]\n\n constructor(options: WarmClientOptions) {\n const config = record(options, 'client options', ['url', 'apiKey', 'tenantId', 'timeoutMs', 'fetch'])\n const supplied = config.url === undefined ? 'http://localhost:8080' : string(config.url, 'url', 8192, true)\n let parsed: URL\n try { parsed = new URL(supplied) } catch { throw new TypeError('url must be an absolute HTTP(S) URL') }\n if (!/^https?:\\/\\//i.test(supplied) || !['http:', 'https:'].includes(parsed.protocol) || parsed.username || parsed.password ||\n supplied.slice(supplied.indexOf('//') + 2).split('/')[0]!.includes('@') ||\n supplied.includes('?') || supplied.includes('#') || /[\\u0000-\\u0020\\u007f\\\\]/.test(supplied)) {\n throw new TypeError('url must be HTTP(S) without userinfo, a query, fragment, whitespace or backslash')\n }\n this.url = parsed.href.replace(/\\/+$/, '')\n this.#headers = new Headers({ Accept: 'application/json', 'Content-Type': 'application/json' })\n this.#secrets = []\n if (config.apiKey !== undefined) {\n const key = string(config.apiKey, 'apiKey', 8192, true)\n if (!/^[\\x21-\\x7e]+$/.test(key)) throw new TypeError('apiKey must contain visible ASCII without whitespace')\n this.#headers.set('Authorization', `Bearer ${key}`)\n this.#secrets = [key, encodeURIComponent(key)]\n }\n if (config.tenantId !== undefined) {\n const tenant = string(config.tenantId, 'tenantId', 64, true)\n if (!/^[A-Za-z0-9_-]+$/.test(tenant)) throw new TypeError('tenantId must contain only letters, digits, underscores or hyphens')\n this.#headers.set('X-Tenant-ID', tenant)\n }\n this.#timeout = config.timeoutMs === undefined ? 30000 : integer(config.timeoutMs, 'timeoutMs', 1, 2_147_483_647)\n const implementation = config.fetch === undefined ? globalThis.fetch : config.fetch\n if (typeof implementation !== 'function') throw new TypeError('A Fetch API implementation is required')\n const fetcher = implementation as typeof globalThis.fetch\n this.#fetch = config.fetch === undefined ? fetcher.bind(globalThis) : fetcher\n }\n\n #safe(value: unknown, fallback: string, max: number): string {\n if (typeof value !== 'string' || /[<>]/.test(value)) return fallback\n let result = value\n for (const secret of this.#secrets) result = result.split(secret).join('[redacted]')\n return result.replace(/Bearer\\s+[^\\s,;]+/gi, 'Bearer [redacted]').replace(/[\\u0000-\\u001f\\u007f-\\u009f]/g, ' ').slice(0, max) || fallback\n }\n\n #error(response: Response, body: unknown): WarmError {\n const value = body !== null && typeof body === 'object' && !Array.isArray(body) ? body as Record<string, unknown> : {}\n const legacy = value.error !== null && typeof value.error === 'object' && !Array.isArray(value.error) ? value.error as Record<string, unknown> : {}\n const rawCode = this.#safe(value.code ?? legacy.code, 'http_error', 64)\n const code = /^[A-Za-z0-9_.:-]+$/.test(rawCode) ? rawCode : 'http_error'\n const message = this.#safe(value.detail ?? legacy.message, `WARM request failed (HTTP ${response.status})`, 1024)\n const identifier = this.#safe(response.headers.get('x-request-id') ?? value.request_id, '', 128)\n return new WarmError(message, code, response.status, /^[A-Za-z0-9_.:-]+$/.test(identifier) ? identifier : undefined)\n }\n\n async request<T>(method: string, path: string, payload: unknown, signal: AbortSignal | undefined, decode: (value: unknown) => T): Promise<T> {\n let body: string | undefined\n if (payload !== undefined) {\n try { body = JSON.stringify(json(payload)) } catch (error) {\n if (error instanceof JsonSizeError) throw new WarmError('Request exceeds 16 MiB', 'request_too_large')\n throw error\n }\n if (byteLength(body) > MAX_BYTES) throw new WarmError('Request exceeds 16 MiB', 'request_too_large')\n }\n if (signal?.aborted) throw new WarmError('Request was aborted', 'aborted')\n const controller = new AbortController()\n let timedOut = false\n let rejectAbort!: (error: WarmError) => void\n const aborted = new Promise<never>((_, reject) => { rejectAbort = reject })\n const abort = (): void => {\n controller.abort()\n rejectAbort(new WarmError(timedOut ? 'Request timed out' : 'Request was aborted', timedOut ? 'timeout' : 'aborted'))\n }\n signal?.addEventListener('abort', abort, { once: true })\n const timer = setTimeout(() => { timedOut = true; abort() }, this.#timeout)\n let response: Response | undefined\n let reader: ReadableStreamDefaultReader<Uint8Array> | undefined\n let finished = false\n try {\n if (signal?.aborted) abort()\n const fetched = Promise.resolve().then(() => {\n if (controller.signal.aborted) throw new WarmError('Request was aborted', 'aborted')\n return this.#fetch(`${this.url}${path}`, {\n method, headers: new Headers(this.#headers), body, signal: controller.signal,\n redirect: 'manual', credentials: 'omit', referrerPolicy: 'no-referrer',\n })\n }).then(value => {\n if (controller.signal.aborted) void value.body?.cancel().catch(() => {})\n return value\n })\n response = await Promise.race([fetched, aborted])\n if (response.type === 'opaqueredirect' || response.redirected || (response.status >= 300 && response.status < 400)) {\n throw new WarmError('WARM redirects are not followed', 'redirect_error', response.status || undefined)\n }\n const declared = response.headers.get('content-length')\n if (declared && /^\\d+$/.test(declared) && Number(declared) > MAX_BYTES) throw new WarmError('Response exceeds 16 MiB', 'response_too_large', response.status)\n const chunks: Uint8Array[] = []\n let length = 0\n if (response.body) {\n reader = response.body.getReader()\n for (;;) {\n const chunk = await Promise.race([reader.read(), aborted])\n if (chunk.done) break\n length += chunk.value.byteLength\n if (length > MAX_BYTES) throw new WarmError('Response exceeds 16 MiB', 'response_too_large', response.status)\n chunks.push(chunk.value)\n }\n }\n finished = true\n const bytes = new Uint8Array(length)\n let offset = 0\n for (const chunk of chunks) { bytes.set(chunk, offset); offset += chunk.byteLength }\n let parsed: unknown\n try { parsed = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes)) } catch {\n if (!response.ok) throw this.#error(response, undefined)\n throw new WarmError('WARM returned an invalid JSON response', 'invalid_response', response.status)\n }\n if (!response.ok) throw this.#error(response, parsed)\n try { json(parsed); return decode(parsed) } catch {\n throw new WarmError('WARM returned a response outside the documented contract', 'invalid_response', response.status)\n }\n } catch (error) {\n if (error instanceof WarmError) throw error\n if (controller.signal.aborted) throw new WarmError(timedOut ? 'Request timed out' : 'Request was aborted', timedOut ? 'timeout' : 'aborted')\n throw new WarmError('Unable to complete the WARM request', 'network_error')\n } finally {\n clearTimeout(timer)\n signal?.removeEventListener('abort', abort)\n if (!finished) {\n if (reader) void reader.cancel().catch(() => {})\n else if (response?.body) void response.body.cancel().catch(() => {})\n }\n reader?.releaseLock()\n }\n }\n}\n","// Copyright 2024-2026 WritersLogic Contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport type * as T from './types.js'\nimport * as v from './validation.js'\nimport { envelope, response, schemas } from './responses.js'\nimport { Transport, WarmError } from './transport.js'\n\ntype Input = Record<string, unknown>\ntype Validator = (value: unknown) => unknown\nconst time: Validator = value => v.integer(value, 'time', Number.MIN_SAFE_INTEGER)\nconst text: Validator = value => v.string(value, 'text', 64 * 1024)\nconst optionalString: Validator = value => v.string(value, 'string')\nconst filter: Validator = value => v.json(v.record(value, 'filter'))\nconst bool: Validator = value => v.boolean(value, 'option')\nconst rememberKeys = ['id', 'eventTime', 'validFrom', 'validTo', 'subject', 'supersedes', 'entities', 'metadata', 'embedding', 'sourceUri']\nconst recallKeys = ['k', 'asOf', 'knownAt', 'history', 'subject', 'entities', 'filter', 'embedding', 'lexicalWeight', 'semanticWeight', 'minSemanticScore', 'fusion', 'candidateLimit', 'explain']\n\nfunction copy(source: Input, target: Input, key: string, validate: Validator, wire = key, nullable = true): void {\n if (source[key] !== undefined) target[wire] = source[key] === null && nullable ? null : validate(source[key])\n}\n\nfunction label(value: unknown): string {\n const result = v.string(value, 'label')\n v.string(result.trim(), 'label', 1024, true)\n if (result.includes('\\0')) throw new TypeError('Labels must not contain NUL')\n return result\n}\n\nfunction labels(value: unknown): string[] {\n const items = v.array(value, 'entities').map(label)\n if (new Set(items.map(item => item.trim())).size > 256) throw new RangeError('At most 256 distinct entities are supported')\n return items\n}\n\nfunction links(value: unknown): string[] {\n const items = v.array(value, 'supersedes').map(v.id)\n if (new Set(items).size > 256) throw new RangeError('At most 256 distinct supersedes IDs are supported')\n return items\n}\n\nfunction fact(source: Input, content: unknown): Input {\n const out: Input = { text: v.string(content, 'text', 64 * 1024, true) }\n copy(source, out, 'id', v.id)\n for (const key of ['eventTime', 'validFrom', 'validTo']) copy(source, out, key, time)\n copy(source, out, 'subject', label)\n copy(source, out, 'supersedes', links)\n copy(source, out, 'entities', labels)\n copy(source, out, 'metadata', value => v.metadata(value, true))\n copy(source, out, 'embedding', v.vector)\n copy(source, out, 'sourceUri', optionalString)\n if (typeof out.validFrom === 'number' && typeof out.validTo === 'number' && out.validFrom >= out.validTo) throw new RangeError('validFrom must be before validTo')\n return out\n}\n\nfunction recall(source: Input, query: unknown): Input {\n const out: Input = { query: v.string(query, 'query', 8192) }\n copy(source, out, 'k', value => v.integer(value, 'k', 1, 1000))\n copy(source, out, 'candidateLimit', value => v.integer(value, 'candidateLimit', 1, 4096))\n for (const key of ['asOf', 'knownAt']) copy(source, out, key, time)\n copy(source, out, 'history', value => v.choice(value, 'history', ['current', 'all', 'historical']))\n copy(source, out, 'subject', label)\n copy(source, out, 'entities', labels)\n copy(source, out, 'filter', filter)\n copy(source, out, 'embedding', v.vector)\n for (const key of ['lexicalWeight', 'semanticWeight']) copy(source, out, key, value => v.number(value, key, 0))\n copy(source, out, 'minSemanticScore', value => v.number(value, 'minSemanticScore', -1, 1))\n copy(source, out, 'fusion', value => v.choice(value, 'fusion', ['blend', 'rrf']))\n copy(source, out, 'explain', bool, 'explain', false)\n if (typeof out.k === 'number' && typeof out.candidateLimit === 'number' && out.candidateLimit < out.k) throw new RangeError('candidateLimit must be at least k')\n const weight = ((out.lexicalWeight as number | null | undefined) ?? 1) + ((out.semanticWeight as number | null | undefined) ?? 1)\n if (!Number.isFinite(weight) || weight <= 0) throw new RangeError('Search weights must have a finite positive sum')\n return out\n}\n\nfunction forgetOptions(options: Input, dryRun: boolean): Input {\n return {\n includeChain: options.includeChain === undefined ? false : v.boolean(options.includeChain, 'includeChain'),\n dryRun: options.dryRun === undefined ? dryRun : v.boolean(options.dryRun, 'dryRun'),\n purge: options.purge === undefined ? false : v.boolean(options.purge, 'purge'),\n }\n}\n\nfunction boundedBatch(values: unknown, convert: (value: unknown) => Input, overhead: number): Input[] {\n const items = v.array(values, 'batch', 4096)\n let bytes = overhead + Math.max(0, items.length - 1)\n return items.map(value => {\n const item = convert(value)\n bytes += v.byteLength(JSON.stringify(item))\n if (bytes > v.MAX_BYTES) throw new WarmError('Request exceeds 16 MiB', 'request_too_large')\n return item\n })\n}\n\nexport class WarmClient {\n readonly url: string\n #transport: Transport\n #memory: MemoryClient\n\n constructor(options: T.WarmClientOptions = {}) {\n this.#transport = new Transport(options)\n this.url = this.#transport.url\n this.#memory = new MemoryClient(this.#transport)\n }\n\n get memory(): MemoryClient { return this.#memory }\n\n async addDocuments(documents: readonly T.DocumentInput[], options: T.RequestOptions = {}): Promise<T.Added> {\n const signal = v.requestSignal(options)\n const payload = boundedBatch(documents, item => {\n const source = v.record(item, 'document', ['id', 'text', 'vector', 'metadata', 'importIdentity', 'importAdoptLegacy'])\n const out: Input = { id: v.id(source.id) }\n copy(source, out, 'text', text)\n copy(source, out, 'vector', v.vector)\n copy(source, out, 'metadata', value => v.metadata(value))\n copy(source, out, 'importIdentity', value => {\n const identity = v.string(value, 'importIdentity', 64)\n if (!/^[0-9a-f]{64}$/.test(identity)) throw new TypeError('importIdentity must be a lowercase SHA-256 digest')\n return identity\n }, 'import_identity')\n copy(source, out, 'importAdoptLegacy', bool, 'import_adopt_legacy', false)\n const stamp = out.metadata == null ? undefined : (out.metadata as Input).warm_import_identity\n if (out.import_identity != null || stamp !== undefined || out.import_adopt_legacy === true) {\n if (typeof out.import_identity !== 'string' || stamp !== out.import_identity) throw new TypeError('importIdentity must match metadata.warm_import_identity')\n }\n if (out.vector == null && !(typeof out.text === 'string' && out.text.trim())) throw new TypeError('A document requires a vector or nonempty text for a server-side embedder')\n return out\n }, 2)\n if (payload.length === 0) {\n if (signal?.aborted) throw new WarmError('Request was aborted', 'aborted')\n return { added: 0 }\n }\n return this.#transport.request('POST', '/api/v1/documents/batch', payload, signal, response<T.Added>(schemas.added))\n }\n\n async deleteDocument(id: string, options: T.RequestOptions = {}): Promise<T.Deleted> {\n return this.#transport.request('DELETE', `/api/v1/documents/${v.segment(id)}`, undefined, v.requestSignal(options), response<T.Deleted>(schemas.deleted))\n }\n\n async readDocumentChunk(id: string, index = 0, options: T.RequestOptions = {}): Promise<T.DocumentChunkRecord> {\n const path = `/api/v1/documents/${v.segment(id)}/chunks/${v.integer(index, 'chunk index')}`\n return this.#transport.request('GET', path, undefined, v.requestSignal(options), response<T.DocumentChunkRecord>(schemas.chunk))\n }\n\n async stats(options: T.RequestOptions = {}): Promise<T.Stats> {\n return this.#transport.request('GET', '/api/v1/stats', undefined, v.requestSignal(options), response<T.Stats>(schemas.stats))\n }\n\n async maintainDocumentIndex(options: T.RequestOptions = {}): Promise<T.Maintained> {\n return this.#transport.request('POST', '/api/v1/index/maintain', {}, v.requestSignal(options), response<T.Maintained>(schemas.maintained))\n }\n\n async query(input: T.QueryInput, options: T.RequestOptions = {}): Promise<T.QueryResponse> {\n const source = v.record(input, 'query input', ['query', 'queryVector', 'today', 'topK', 'filter', 'documentIds', 'index', 'ef'])\n const out: Input = { top_k: source.topK === undefined ? 3 : source.topK === null ? null : v.integer(source.topK, 'topK', 1) }\n copy(source, out, 'query', value => v.string(value, 'query', 8192, true))\n copy(source, out, 'queryVector', v.vector, 'query_vector')\n copy(source, out, 'today', optionalString)\n copy(source, out, 'filter', filter)\n copy(source, out, 'documentIds', value => {\n const ids = v.array(value, 'documentIds', 1000, 1).map(v.id)\n if (new Set(ids).size !== ids.length) throw new TypeError('documentIds must be unique')\n return ids\n }, 'document_ids')\n copy(source, out, 'index', value => v.choice(value, 'index', ['auto', 'exact', 'graph']))\n copy(source, out, 'ef', value => v.integer(value, 'ef', 1, 4096))\n if (out.query == null && out.query_vector == null) throw new TypeError('query requires query or queryVector')\n return this.#transport.request('POST', '/api/v1/query', out, v.requestSignal(options), response<T.QueryResponse>(schemas.query))\n }\n}\n\nexport class MemoryClient {\n #transport: Transport\n\n constructor(transport: Transport) { this.#transport = transport }\n\n async capabilities(contractVersion = 1, options: T.RequestOptions = {}): Promise<T.MemoryCapabilities> {\n const payload = { contractVersion: v.integer(contractVersion, 'contractVersion', 1, 0xffffffff) }\n return this.#transport.request('POST', '/api/v1/memory/capabilities', payload, v.requestSignal(options), envelope<T.MemoryCapabilities>(schemas.capabilities, 'capabilities'))\n }\n\n async remember(text: string, options: T.RememberOptions = {}): Promise<T.Remembered> {\n const source = v.record(options, 'remember options', [...rememberKeys, 'signal'])\n const payload = fact(source, text)\n return this.#transport.request('POST', '/api/v1/memory/remember', payload, v.signal(source.signal), value => {\n const items = envelope<T.Remembered[]>(schemas.remembered, 'remembered')(value)\n if (items.length !== 1) throw new TypeError('Expected one remembered fact')\n return items[0]!\n })\n }\n\n async rememberMany(facts: readonly T.RememberInput[], options: T.RequestOptions = {}): Promise<T.Remembered[]> {\n const values = boundedBatch(facts, item => {\n const source = v.record(item, 'fact', ['text', ...rememberKeys])\n return fact(source, source.text)\n }, 12)\n if (!values.length) throw new RangeError('rememberMany requires at least one fact')\n return this.#transport.request('POST', '/api/v1/memory/remember', { facts: values }, v.requestSignal(options), value => {\n const items = envelope<T.Remembered[]>(schemas.remembered, 'remembered')(value)\n if (items.length !== values.length) throw new TypeError('Remembered count does not match submitted facts')\n return items\n })\n }\n\n async recall(query: string, options: T.RecallOptions = {}): Promise<T.Recalled[]> {\n const source = v.record(options, 'recall options', [...recallKeys, 'signal'])\n return this.#transport.request('POST', '/api/v1/memory/recall', recall(source, query), v.signal(source.signal), envelope<T.Recalled[]>(schemas.recalled, 'results'))\n }\n\n async explain(query: string, id: string, options: T.ExplainOptions = {}): Promise<T.Explanation> {\n const source = v.record(options, 'explain options', [...recallKeys, 'signal'])\n const payload = { ...recall(source, query), id: v.id(id) }\n return this.#transport.request('POST', '/api/v1/memory/explain', payload, v.signal(source.signal), envelope<T.Explanation>(schemas.explained, 'explanation'))\n }\n\n async forget(scope: T.ForgetScope, options: T.ForgetOptions = {}): Promise<T.ForgetReport> {\n const source = v.record(scope, 'forget scope')\n const kind = v.choice(source.kind, 'scope kind', ['ids', 'subject', 'entity', 'ingestedBefore', 'eventBefore', 'matching'])\n let chosen: Input\n if (kind === 'ids') {\n v.record(source, 'forget scope', ['kind', 'ids'])\n chosen = { kind, ids: v.array(source.ids, 'ids').map(v.id) }\n } else if (kind === 'subject' || kind === 'entity') {\n v.record(source, 'forget scope', ['kind', kind])\n chosen = { kind, [kind]: label(source[kind]) }\n } else if (kind === 'matching') {\n v.record(source, 'forget scope', ['kind', 'filter'])\n const matching = v.record(source.filter, 'filter')\n if (!Object.keys(matching).length || Object.hasOwn(matching, '_mem')) throw new TypeError('Forget filter must be nonempty and must not contain reserved metadata._mem')\n chosen = { kind, filter: filter(matching) }\n } else {\n v.record(source, 'forget scope', ['kind', 'time'])\n chosen = { kind, time: time(source.time) }\n }\n const settings = v.record(options, 'forget options', ['includeChain', 'dryRun', 'purge', 'signal'])\n return this.#transport.request('POST', '/api/v1/memory/forget', { scope: chosen, ...forgetOptions(settings, false) }, v.signal(settings.signal), response<T.ForgetReport>(schemas.forgotten))\n }\n\n async get(id: string, options: T.RequestOptions = {}): Promise<T.FactRecord | null> {\n return this.#transport.request('POST', '/api/v1/memory/get', { id: v.id(id) }, v.requestSignal(options), envelope<T.FactRecord | null>(schemas.get, 'fact'))\n }\n\n async history(id: string, options: T.RequestOptions = {}): Promise<T.FactRecord[]> {\n return this.#transport.request('POST', '/api/v1/memory/history', { id: v.id(id) }, v.requestSignal(options), envelope<T.FactRecord[]>(schemas.history, 'history'))\n }\n\n async applyForgetting(options: T.ForgetOptions = {}): Promise<T.ForgetReport> {\n const source = v.record(options, 'forgetting options', ['includeChain', 'dryRun', 'purge', 'signal'])\n return this.#transport.request('POST', '/api/v1/memory/applyForgetting', forgetOptions(source, true), v.signal(source.signal), response<T.ForgetReport>(schemas.forgotten))\n }\n\n async consolidate(options: T.ConsolidateOptions = {}): Promise<T.ConsolidationReport> {\n const source = v.record(options, 'consolidation options', ['dryRun', 'allowDestructive', 'signal'])\n const payload = {\n dryRun: source.dryRun === undefined ? true : v.boolean(source.dryRun, 'dryRun'),\n allowDestructive: source.allowDestructive === undefined ? false : v.boolean(source.allowDestructive, 'allowDestructive'),\n }\n return this.#transport.request('POST', '/api/v1/memory/consolidate', payload, v.signal(source.signal), response<T.ConsolidationReport>(schemas.consolidated))\n }\n}\n"],"mappings":"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","names":["status","response","signal","text","bool","nullable","fact","signal","id"]}
package/package.json CHANGED
@@ -1,6 +1,38 @@
1
1
  {
2
2
  "name": "warm-sdk",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.2.1",
4
+ "description": "Portable HTTP client for WARM document search and temporal agent memory",
5
+ "license": "Apache-2.0",
6
+ "author": "WritersLogic, Inc. <david@writerslogic.com>",
7
+ "type": "module",
8
+ "main": "./dist/index.cjs",
9
+ "module": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "import": { "types": "./dist/index.d.ts", "default": "./dist/index.js" },
14
+ "require": { "types": "./dist/index.d.cts", "default": "./dist/index.cjs" }
15
+ }
16
+ },
17
+ "files": ["dist", "README.md"],
18
+ "sideEffects": false,
19
+ "engines": { "node": ">=18" },
20
+ "scripts": {
21
+ "build": "tsup",
22
+ "typecheck": "tsc6 --noEmit",
23
+ "test": "node --test --test-concurrency=1 test/*.test.mjs",
24
+ "test:package": "node --test test/packed-consumer.test.mjs"
25
+ },
26
+ "devDependencies": {
27
+ "tsup": "^9.0.0",
28
+ "typescript": "npm:@typescript/typescript6@^6.0.2"
29
+ },
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "https://github.com/writerslogic/warm.git",
33
+ "directory": "bindings/js/warm-sdk"
34
+ },
35
+ "homepage": "https://writerslogic.com/warm",
36
+ "bugs": { "url": "https://github.com/writerslogic/warm/issues" },
37
+ "keywords": ["memory", "agents", "search", "http", "typescript", "warm"]
38
+ }