@infolang/sdk 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/README.md +105 -0
- package/dist/index.cjs +767 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +353 -0
- package/dist/index.d.ts +353 -0
- package/dist/index.js +748 -0
- package/dist/index.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/auth.ts","../src/resources/ops.ts","../src/resources/context.ts","../src/resources/health.ts","../src/resources/memory.ts","../src/transport.ts","../src/version.ts","../src/client.ts"],"names":["join","homedir","readFile","writeFile"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Typed error hierarchy for the InfoLang SDK.\n *\n * Catch these instead of inspecting raw responses. Every API error carries the\n * originating `requestId` (from the `x-request-id` header) when available.\n */\n\nexport class InfoLangError extends Error {\n constructor(message: string) {\n super(message);\n this.name = new.target.name;\n }\n}\n\n/** Client misconfiguration (missing credentials, bad base URL). */\nexport class InfoLangConfigError extends InfoLangError {}\n\n/** The runtime could not be reached, or the request timed out. */\nexport class InfoLangConnectionError extends InfoLangError {}\n\nexport interface APIErrorOptions {\n status: number;\n body?: unknown;\n requestId?: string;\n retryAfter?: number;\n}\n\n/** A non-2xx response from the runtime. */\nexport class InfoLangAPIError extends InfoLangError {\n readonly status: number;\n readonly body: unknown;\n readonly requestId?: string;\n\n constructor(message: string, options: APIErrorOptions) {\n const suffix = options.requestId ? ` (request_id=${options.requestId})` : \"\";\n super(`${message}${suffix}`);\n this.status = options.status;\n this.body = options.body;\n this.requestId = options.requestId;\n }\n}\n\n/** 401/403 — credential missing, invalid, or lacking permission. */\nexport class AuthenticationError extends InfoLangAPIError {}\n\n/** 404 — namespace, bank, or memory id does not exist. */\nexport class NotFoundError extends InfoLangAPIError {}\n\n/** 400/422 — the request payload was rejected. */\nexport class ValidationError extends InfoLangAPIError {}\n\n/** 429 — quota exceeded. `retryAfter` is seconds when the server sets it. */\nexport class RateLimitError extends InfoLangAPIError {\n readonly retryAfter?: number;\n\n constructor(message: string, options: APIErrorOptions) {\n super(message, options);\n this.retryAfter = options.retryAfter;\n }\n}\n\n/** 5xx — the runtime failed to process the request. */\nexport class ServerError extends InfoLangAPIError {}\n\nfunction messageFromBody(body: unknown): string | undefined {\n if (body && typeof body === \"object\") {\n const record = body as Record<string, unknown>;\n for (const key of [\"error\", \"message\", \"detail\"]) {\n const value = record[key];\n if (typeof value === \"string\" && value) return value;\n }\n }\n if (typeof body === \"string\" && body) return body;\n return undefined;\n}\n\nexport function errorFromResponse(options: APIErrorOptions): InfoLangAPIError {\n const message =\n messageFromBody(options.body) ?? `InfoLang request failed with status ${options.status}`;\n switch (true) {\n case options.status === 401 || options.status === 403:\n return new AuthenticationError(message, options);\n case options.status === 404:\n return new NotFoundError(message, options);\n case options.status === 400 || options.status === 422:\n return new ValidationError(message, options);\n case options.status === 429:\n return new RateLimitError(message, options);\n case options.status >= 500:\n return new ServerError(message, options);\n default:\n return new InfoLangAPIError(message, options);\n }\n}\n","/**\n * Authentication providers for the InfoLang SDK.\n *\n * A provider returns the headers to attach to each request. `headers()` is\n * called before every request so providers can refresh short-lived tokens.\n */\n\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nimport { InfoLangConfigError } from \"./errors.js\";\n\nexport const DEFAULT_SESSION_PATH = join(homedir(), \".config\", \"infolang\", \"session.json\");\n\nexport interface AuthProvider {\n headers(): Promise<Record<string, string>>;\n}\n\n/** Bearer authentication with an InfoLang API key (`il_live_...`). */\nexport class ApiKeyAuth implements AuthProvider {\n constructor(private readonly apiKey: string) {\n if (!apiKey) throw new InfoLangConfigError(\"apiKey must not be empty\");\n }\n\n async headers(): Promise<Record<string, string>> {\n return { Authorization: `Bearer ${this.apiKey}` };\n }\n}\n\n/** Self-hosted dev key in `key:namespace` form (matches INFOLANG_API_KEYS). */\nexport class DevKeyAuth implements AuthProvider {\n readonly namespace: string;\n private readonly token: string;\n\n constructor(devKey: string) {\n const idx = devKey.indexOf(\":\");\n if (idx < 0) throw new InfoLangConfigError(\"dev key must be in 'key:namespace' form\");\n this.token = devKey.slice(0, idx);\n this.namespace = devKey.slice(idx + 1);\n }\n\n async headers(): Promise<Record<string, string>> {\n return { Authorization: `Bearer ${this.token}` };\n }\n}\n\ninterface Session {\n access_token?: string;\n refresh_token?: string;\n token_url?: string;\n expires_at?: number;\n expires_in?: number;\n [key: string]: unknown;\n}\n\n/**\n * OAuth bearer token read from the cursor-setup session file (default\n * `~/.config/infolang/session.json`, written by `npx @infolang/cursor-setup`).\n * Refreshes transparently when the file carries a `refresh_token` + `token_url`.\n */\nexport class SessionFileAuth implements AuthProvider {\n private cache?: Session;\n\n constructor(private readonly path: string = DEFAULT_SESSION_PATH) {}\n\n private async load(): Promise<Session> {\n let raw: string;\n try {\n raw = await readFile(this.path, \"utf8\");\n } catch {\n throw new InfoLangConfigError(\n `session file not found at ${this.path}; run 'npx @infolang/cursor-setup'`,\n );\n }\n try {\n return JSON.parse(raw) as Session;\n } catch {\n throw new InfoLangConfigError(`session file at ${this.path} is not valid JSON`);\n }\n }\n\n async headers(): Promise<Record<string, string>> {\n let session = this.cache ?? (await this.load());\n if (this.isExpired(session)) session = await this.refresh(session);\n this.cache = session;\n if (!session.access_token) {\n throw new InfoLangConfigError(\"session file is missing 'access_token'\");\n }\n return { Authorization: `Bearer ${session.access_token}` };\n }\n\n private isExpired(session: Session): boolean {\n if (typeof session.expires_at !== \"number\") return false;\n // Refresh 30s early to avoid races at the boundary.\n return Date.now() / 1000 >= session.expires_at - 30;\n }\n\n private async refresh(session: Session): Promise<Session> {\n if (!session.refresh_token || !session.token_url) return session;\n const resp = await fetch(session.token_url, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n grant_type: \"refresh_token\",\n refresh_token: session.refresh_token,\n }),\n });\n if (!resp.ok) return session;\n const data = (await resp.json()) as Session;\n const merged: Session = { ...session, ...data };\n if (typeof data.expires_in === \"number\") {\n merged.expires_at = Date.now() / 1000 + data.expires_in;\n }\n try {\n await writeFile(this.path, JSON.stringify(merged));\n } catch {\n // Best effort; refreshed token is still usable in memory.\n }\n return merged;\n }\n}\n\n/** Worker-to-origin shared secret. For internal integrators only. */\nexport class OriginAuth implements AuthProvider {\n constructor(\n private readonly workspace: string,\n private readonly secret: string,\n ) {}\n\n async headers(): Promise<Record<string, string>> {\n return {\n \"X-InfoLang-Workspace\": this.workspace,\n \"X-InfoLang-Origin-Secret\": this.secret,\n };\n }\n}\n","/**\n * Pure request builders and response parsers, shared so request shaping lives\n * in one place. Each builder returns the method, path and JSON body; each\n * parser normalizes the runtime's compact wire shape into the SDK's types.\n */\n\nimport type { RequestOptions } from \"../transport.js\";\nimport type {\n Bank,\n Chunk,\n ContextPack,\n MeteringMeta,\n RecallResult,\n RememberResult,\n} from \"../types.js\";\n\ntype Json = Record<string, unknown>;\n\nfunction compact(payload: Json): Json {\n return Object.fromEntries(Object.entries(payload).filter(([, v]) => v !== undefined));\n}\n\nexport function buildRecall(\n query: string,\n opts: { namespace?: string; topK?: number; filters?: Json; verbose?: boolean },\n): RequestOptions {\n return {\n method: \"POST\",\n path: \"/v1/recall\",\n body: compact({\n query,\n namespace: opts.namespace,\n top_k: opts.topK,\n filters: opts.filters,\n verbose: opts.verbose,\n }),\n };\n}\n\nfunction hitToChunk(hit: Json): Json {\n return {\n i: hit.id ?? hit.i,\n t: hit.text ?? hit.t ?? \"\",\n g: hit.tags ?? hit.g,\n s: hit.similarity ?? hit.score ?? hit.s,\n };\n}\n\nexport function parseRecall(data: unknown, metering: MeteringMeta): RecallResult {\n const record = (data && typeof data === \"object\" ? data : {}) as Json;\n const rawChunks = Array.isArray(record.chunks)\n ? record.chunks\n : Array.isArray(record.hits)\n ? (record.hits as Json[]).map((hit) => hitToChunk(hit))\n : Array.isArray(data)\n ? (data as unknown[])\n : [];\n const chunks: Chunk[] = rawChunks.map((c) => {\n const item = c as Json;\n return {\n id: String(item.i ?? item.id ?? \"\"),\n score: typeof item.s === \"number\" ? item.s : (item.score as number | undefined),\n text: String(item.t ?? item.text ?? \"\"),\n tags: (item.g ?? item.tags) as string | undefined,\n };\n });\n const top = chunks[0]?.score;\n return {\n chunks,\n namespace: record.namespace as string | undefined,\n metering,\n weak: top !== undefined && top < 0.85,\n };\n}\n\nexport function buildRemember(\n text: string,\n opts: { namespace?: string; source?: string; tags?: string },\n): RequestOptions {\n return {\n method: \"POST\",\n path: \"/v1/remember\",\n body: compact({ text, namespace: opts.namespace, source: opts.source, tags: opts.tags }),\n };\n}\n\nexport function parseRemember(data: unknown): RememberResult {\n const record = (data && typeof data === \"object\" ? data : {}) as Json;\n return {\n memoryId: (record.id ?? record.memory_id) as string | undefined,\n namespace: record.namespace as string | undefined,\n };\n}\n\nexport function buildForget(memoryId: string, namespace?: string): RequestOptions {\n // Runtime forget is DELETE /v1/memories/{id}; namespace is auth-scoped.\n void namespace;\n return {\n method: \"DELETE\",\n path: `/v1/memories/${encodeURIComponent(memoryId)}`,\n };\n}\n\nexport function buildListBanks(): RequestOptions {\n return { method: \"GET\", path: \"/v1/banks\" };\n}\n\nexport function parseBanks(data: unknown): Bank[] {\n const record = data as Json;\n const items = Array.isArray(data)\n ? data\n : Array.isArray(record?.banks)\n ? (record.banks as unknown[])\n : [];\n return items.map((b) => {\n const item = b as Json;\n const count =\n typeof item.count === \"number\"\n ? item.count\n : typeof item.total_memories === \"number\"\n ? item.total_memories\n : undefined;\n return {\n namespace: String(item.namespace ?? \"\"),\n count,\n };\n });\n}\n\nexport function buildListRecent(opts: { namespace?: string; n?: number }): RequestOptions {\n const params = new URLSearchParams();\n if (opts.namespace) params.set(\"namespace\", opts.namespace);\n if (opts.n !== undefined) params.set(\"limit\", String(opts.n));\n const query = params.toString();\n return { method: \"GET\", path: `/v1/memories${query ? `?${query}` : \"\"}` };\n}\n\nexport function buildContextPack(\n query: string,\n opts: { namespace: string; maxTokens?: number; repoRoot?: string },\n): RequestOptions {\n return {\n method: \"POST\",\n path: \"/v1/context-pack\",\n body: compact({\n query,\n namespace: opts.namespace,\n max_tokens: opts.maxTokens,\n repo_root: opts.repoRoot,\n }),\n };\n}\n\nexport function parseContextPack(data: unknown, metering: MeteringMeta): ContextPack {\n const record = (data && typeof data === \"object\" ? data : {}) as Json;\n return {\n pack: String(record.pack ?? record.context ?? record.text ?? data ?? \"\"),\n tokensEstimated: record.tokens_estimated as number | undefined,\n namespace: record.namespace as string | undefined,\n metering,\n };\n}\n\nexport function buildIngestRepo(\n namespace: string,\n opts: { repoRoot: string; ref?: string },\n): RequestOptions {\n return {\n method: \"POST\",\n path: `/v1/repos/${encodeURIComponent(namespace)}/ingest`,\n body: compact({ repo_root: opts.repoRoot, ref: opts.ref }),\n };\n}\n\nexport function buildExecute(operations: Json[]): RequestOptions {\n return { method: \"POST\", path: \"/v1/execute\", body: { operations } };\n}\n\nexport function buildHealth(): RequestOptions {\n return { method: \"GET\", path: \"/v1/health\" };\n}\n\nexport function filterHitsByTags(\n chunks: Chunk[],\n tagFilter: string[] | undefined,\n topK: number | undefined,\n): Chunk[] {\n let ordered = chunks;\n if (tagFilter && tagFilter.length > 0) {\n const wanted = new Set(\n tagFilter.map((t) => t.trim().toLowerCase()).filter(Boolean),\n );\n const matches = (chunk: Chunk): boolean => {\n if (!chunk.tags) return false;\n const have = new Set(\n chunk.tags\n .split(\",\")\n .map((t) => t.trim().toLowerCase())\n .filter(Boolean),\n );\n for (const t of wanted) {\n if (have.has(t)) return true;\n }\n return false;\n };\n ordered = [...chunks.filter(matches), ...chunks.filter((c) => !matches(c))];\n }\n return topK !== undefined ? ordered.slice(0, topK) : ordered;\n}\n\nexport function buildRememberBatch(\n items: Array<{ text: string; source?: string; tags?: string | string[] }>,\n opts: { namespace?: string; source?: string },\n): RequestOptions {\n const batchItems = items.map((item) =>\n compact({\n text: item.text,\n source: item.source ?? opts.source,\n tags: item.tags,\n }),\n );\n return buildExecute([\n {\n op: \"remember_batch\",\n args: compact({\n items: batchItems,\n namespace: opts.namespace,\n source: opts.source,\n }),\n },\n ]);\n}\n\nexport function parseExecuteRememberBatch(data: unknown): RememberResult[] {\n const record = data as Json;\n const results = Array.isArray(record?.results) ? (record.results as Json[]) : [];\n const out: RememberResult[] = [];\n for (const result of results) {\n const payload = result?.payload as Json | undefined;\n const inner = Array.isArray(payload?.results) ? (payload.results as unknown[]) : null;\n if (inner) {\n for (const r of inner) {\n out.push(parseRemember(r));\n }\n } else {\n out.push(parseRemember(payload ?? {}));\n }\n }\n return out;\n}\n\nexport function normalizeRememberItems(\n items: Array<string | { text: string; tags?: string | string[]; source?: string }>,\n defaultSource?: string,\n): Array<{ text: string; source?: string; tags?: string | string[] }> {\n return items.map((item) => {\n if (typeof item === \"string\") {\n return { text: item, source: defaultSource };\n }\n if (item && typeof item === \"object\" && typeof item.text === \"string\") {\n return item;\n }\n throw new TypeError(\"rememberBatch items must be string or { text } object\");\n });\n}\n","/** Context resource: context-pack, repo ingest, and batch execute. */\n\nimport { InfoLangConfigError } from \"../errors.js\";\nimport type { Transport } from \"../transport.js\";\nimport type { ContextPack, ContextPackOptions } from \"../types.js\";\nimport * as ops from \"./ops.js\";\n\nexport class ContextResource {\n constructor(\n private readonly transport: Transport,\n private readonly defaultNamespace?: string,\n ) {}\n\n async contextPack(query: string, options: ContextPackOptions = {}): Promise<ContextPack> {\n const namespace = options.namespace ?? this.defaultNamespace;\n if (!namespace) {\n throw new InfoLangConfigError(\n \"contextPack requires a namespace (set one on the client or pass it)\",\n );\n }\n const { data, metering } = await this.transport.request<unknown>(\n ops.buildContextPack(query, {\n namespace,\n maxTokens: options.maxTokens,\n repoRoot: options.repoRoot,\n }),\n );\n return ops.parseContextPack(data, metering);\n }\n\n async ingestRepo(\n namespace: string,\n options: { repoRoot: string; ref?: string },\n ): Promise<Record<string, unknown>> {\n const { data } = await this.transport.request<unknown>(\n ops.buildIngestRepo(namespace, options),\n );\n return (data && typeof data === \"object\" ? data : { result: data }) as Record<string, unknown>;\n }\n\n async execute(operations: Record<string, unknown>[]): Promise<Record<string, unknown>> {\n const { data } = await this.transport.request<unknown>(ops.buildExecute(operations));\n return (data && typeof data === \"object\" ? data : { results: data }) as Record<\n string,\n unknown\n >;\n }\n}\n","/** Health resource: liveness/readiness checks against the runtime. */\n\nimport type { Transport } from \"../transport.js\";\nimport * as ops from \"./ops.js\";\n\nexport class HealthResource {\n constructor(private readonly transport: Transport) {}\n\n async check(): Promise<Record<string, unknown>> {\n const { data } = await this.transport.request<unknown>(ops.buildHealth());\n return (data && typeof data === \"object\" ? data : { status: data }) as Record<\n string,\n unknown\n >;\n }\n}\n","/** Memory resource: recall, remember, forget, and agent-friendly aliases. */\n\nimport type { Transport } from \"../transport.js\";\nimport type {\n Bank,\n InvestigateOptions,\n ListRecentOptions,\n RecallOptions,\n RecallResult,\n RememberOptions,\n RememberResult,\n} from \"../types.js\";\nimport * as ops from \"./ops.js\";\n\nexport class MemoryResource {\n constructor(\n private readonly transport: Transport,\n private readonly defaultNamespace?: string,\n ) {}\n\n async recall(query: string, options: RecallOptions = {}): Promise<RecallResult> {\n const { data, metering } = await this.transport.request<unknown>(\n ops.buildRecall(query, {\n namespace: options.namespace ?? this.defaultNamespace,\n topK: options.topK,\n filters: options.filters,\n verbose: options.verbose,\n }),\n );\n return ops.parseRecall(data, metering);\n }\n\n /** Agent-style recall with a sensible default `topK` of 5. */\n async investigate(query: string, options: InvestigateOptions = {}): Promise<RecallResult> {\n return this.recall(query, {\n namespace: options.namespaceHint,\n topK: options.topK ?? 5,\n });\n }\n\n async remember(text: string, options: RememberOptions = {}): Promise<RememberResult> {\n const { data } = await this.transport.request<unknown>(\n ops.buildRemember(text, {\n namespace: options.namespace ?? this.defaultNamespace,\n source: options.source,\n tags: options.tags,\n }),\n );\n return ops.parseRemember(data);\n }\n\n /** Alias for `remember` matching the `auto_memorize` tool. */\n async memorize(content: string, options: RememberOptions = {}): Promise<RememberResult> {\n return this.remember(content, options);\n }\n\n async forget(memoryId: string, options: { namespace?: string } = {}): Promise<void> {\n await this.transport.request<unknown>(\n ops.buildForget(memoryId, options.namespace ?? this.defaultNamespace),\n );\n }\n\n async listBanks(): Promise<Bank[]> {\n const { data } = await this.transport.request<unknown>(ops.buildListBanks());\n return ops.parseBanks(data);\n }\n\n async listRecent(options: ListRecentOptions = {}): Promise<unknown[]> {\n const { data } = await this.transport.request<unknown>(\n ops.buildListRecent({ namespace: options.namespace ?? this.defaultNamespace, n: options.n }),\n );\n if (Array.isArray(data)) return data;\n const record = data as Record<string, unknown>;\n return Array.isArray(record?.memories) ? (record.memories as unknown[]) : [];\n }\n\n /** Recall with tag-inclusion ordering over a candidate pool (client-side). */\n async recallHybrid(\n query: string,\n options: {\n namespace?: string;\n topK?: number;\n tagFilter?: string[];\n candidatePool?: number;\n useHybrid?: boolean;\n } = {},\n ): Promise<RecallResult> {\n void options.useHybrid;\n const ns = options.namespace ?? this.defaultNamespace;\n const topK = options.topK ?? 10;\n const pool = Math.max(options.candidatePool ?? 0, topK) || topK;\n const result = await this.recall(query, { namespace: ns, topK: pool });\n result.chunks = ops.filterHitsByTags(result.chunks, options.tagFilter, topK);\n return result;\n }\n\n /** Store many memories via POST /v1/execute remember_batch. */\n async rememberBatch(\n items: Array<string | { text: string; tags?: string | string[]; source?: string }>,\n options: { namespace?: string; source?: string } = {},\n ): Promise<RememberResult[]> {\n if (!items.length) return [];\n const records = ops.normalizeRememberItems(items, options.source);\n const { data } = await this.transport.request<unknown>(\n ops.buildRememberBatch(records, {\n namespace: options.namespace ?? this.defaultNamespace,\n source: options.source,\n }),\n );\n return ops.parseExecuteRememberBatch(data);\n }\n\n /** Best-effort bulk clear (list + forget loop). */\n async resetNamespace(namespace?: string, options: { batch?: number } = {}): Promise<number> {\n const ns = namespace ?? this.defaultNamespace;\n const batch = options.batch ?? 500;\n let deleted = 0;\n while (true) {\n const recent = await this.listRecent({ namespace: ns, n: batch });\n const ids = recent\n .map((r) => {\n if (!r || typeof r !== \"object\") return null;\n const row = r as Record<string, unknown>;\n for (const key of [\"id\", \"memory_id\", \"i\"] as const) {\n const v = row[key];\n if (typeof v === \"string\" && v) return v;\n }\n return null;\n })\n .filter((id): id is string => Boolean(id));\n if (!ids.length) break;\n for (const id of ids) {\n await this.forget(id, { namespace: ns });\n deleted += 1;\n }\n if (ids.length < batch) break;\n }\n return deleted;\n }\n}\n\n// Re-export to keep the public option type importable from this module too.\nexport type { RecallResult, RememberResult };\n","/**\n * fetch-native HTTP transport.\n *\n * Works on Node 18+, Bun, Deno, Cloudflare Workers and browsers without\n * polyfills. Adds the resilience defaults expected of a modern SDK: targeted\n * retries (429 + 5xx) with exponential backoff and full jitter, an explicit\n * timeout budget via AbortController, and typed error mapping.\n */\n\nimport type { AuthProvider } from \"./auth.js\";\nimport { errorFromResponse, InfoLangConnectionError } from \"./errors.js\";\nimport type { MeteringMeta } from \"./types.js\";\n\nexport type FetchLike = typeof fetch;\n\nconst RETRY_STATUSES = new Set([429, 500, 502, 503, 504]);\n\nexport interface TransportOptions {\n baseUrl: string;\n auth: AuthProvider;\n fetch?: FetchLike;\n timeoutMs?: number;\n maxRetries?: number;\n backoffBaseMs?: number;\n backoffCapMs?: number;\n userAgent: string;\n /** When set, sent as X-InfoLang-Workspace-Id on every request. */\n workspaceId?: string;\n}\n\nexport interface RequestOptions {\n method: string;\n path: string;\n body?: unknown;\n headers?: Record<string, string>;\n}\n\nexport interface TransportResult<T> {\n data: T;\n metering: MeteringMeta;\n}\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nfunction parseMetering(headers: Headers): MeteringMeta {\n const num = (name: string): number | undefined => {\n const raw = headers.get(name);\n if (raw == null) return undefined;\n const value = Number(raw);\n return Number.isFinite(value) ? value : undefined;\n };\n return {\n tokensSaved: num(\"x-infolang-tokens-saved\"),\n chunksUsed: num(\"x-infolang-chunks-used\"),\n repoCoverage: num(\"x-infolang-repo-coverage\"),\n requestId: headers.get(\"x-request-id\") ?? undefined,\n };\n}\n\nfunction retryAfter(headers: Headers): number | undefined {\n const raw = headers.get(\"retry-after\");\n if (!raw) return undefined;\n const value = Number(raw);\n return Number.isFinite(value) ? value : undefined;\n}\n\nexport class Transport {\n private readonly baseUrl: string;\n private readonly auth: AuthProvider;\n private readonly fetchImpl: FetchLike;\n private readonly timeoutMs: number;\n private readonly maxRetries: number;\n private readonly backoffBaseMs: number;\n private readonly backoffCapMs: number;\n private readonly userAgent: string;\n private readonly workspaceId?: string;\n\n constructor(options: TransportOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/$/, \"\");\n this.auth = options.auth;\n this.fetchImpl = options.fetch ?? globalThis.fetch;\n this.timeoutMs = options.timeoutMs ?? 30_000;\n this.maxRetries = options.maxRetries ?? 2;\n this.backoffBaseMs = options.backoffBaseMs ?? 500;\n this.backoffCapMs = options.backoffCapMs ?? 8_000;\n this.userAgent = options.userAgent;\n this.workspaceId = options.workspaceId;\n if (!this.fetchImpl) {\n throw new InfoLangConnectionError(\n \"global fetch is unavailable; pass a fetch implementation via the client options\",\n );\n }\n }\n\n private delay(attempt: number, retryAfterSec?: number): number {\n if (retryAfterSec != null) return retryAfterSec * 1000;\n const window = Math.min(this.backoffCapMs, this.backoffBaseMs * 2 ** attempt);\n return Math.random() * window;\n }\n\n async request<T>(options: RequestOptions): Promise<TransportResult<T>> {\n const url = `${this.baseUrl}${options.path}`;\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n const headers: Record<string, string> = {\n \"User-Agent\": this.userAgent,\n Accept: \"application/json\",\n ...(await this.auth.headers()),\n ...options.headers,\n };\n if (this.workspaceId) {\n headers[\"X-InfoLang-Workspace-Id\"] = this.workspaceId;\n }\n if (options.body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n\n let response: Response;\n try {\n response = await this.fetchImpl(url, {\n method: options.method,\n headers,\n body: options.body !== undefined ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n } catch (err) {\n lastError = err;\n clearTimeout(timer);\n if (attempt >= this.maxRetries) {\n throw new InfoLangConnectionError(\n err instanceof Error ? err.message : \"request failed\",\n );\n }\n await sleep(this.delay(attempt));\n continue;\n } finally {\n clearTimeout(timer);\n }\n\n if (RETRY_STATUSES.has(response.status) && attempt < this.maxRetries) {\n await sleep(this.delay(attempt, retryAfter(response.headers)));\n continue;\n }\n return this.finish<T>(response);\n }\n\n throw new InfoLangConnectionError(\n lastError instanceof Error ? lastError.message : \"request failed after retries\",\n );\n }\n\n private async finish<T>(response: Response): Promise<TransportResult<T>> {\n const metering = parseMetering(response.headers);\n const text = await response.text();\n let data: unknown = text;\n if (text) {\n try {\n data = JSON.parse(text);\n } catch {\n data = text;\n }\n }\n\n if (response.ok) return { data: data as T, metering };\n\n throw errorFromResponse({\n status: response.status,\n body: data,\n requestId: metering.requestId,\n retryAfter: retryAfter(response.headers),\n });\n }\n}\n","export const version = \"0.2.0\";\n","/**\n * The InfoLang client: one-line construction over the il-runtime REST API.\n *\n * Exposes grouped resources (`client.memory`, `client.context`,\n * `client.health`) plus the common operations as top-level aliases so the\n * first call is a one-liner.\n */\n\nimport {\n ApiKeyAuth,\n type AuthProvider,\n DevKeyAuth,\n SessionFileAuth,\n} from \"./auth.js\";\nimport { InfoLangConfigError } from \"./errors.js\";\nimport { ContextResource } from \"./resources/context.js\";\nimport { HealthResource } from \"./resources/health.js\";\nimport { MemoryResource } from \"./resources/memory.js\";\nimport { type FetchLike, Transport } from \"./transport.js\";\nimport type {\n Bank,\n ContextPack,\n ContextPackOptions,\n InvestigateOptions,\n ListRecentOptions,\n RecallOptions,\n RecallResult,\n RememberOptions,\n RememberResult,\n} from \"./types.js\";\nimport { version } from \"./version.js\";\n\nexport const CLOUD_BASE_URL = \"https://api.infolang.ai\";\nexport const DIRECT_BASE_URL = \"http://127.0.0.1:8766\";\n\nexport interface InfoLangOptions {\n /** Managed-cloud API key (`il_live_...`). Defaults to the cloud base URL. */\n apiKey?: string;\n /** Self-hosted dev key in `key:namespace` form. Defaults to the direct base URL. */\n devKey?: string;\n /** An explicit auth provider (e.g. `new SessionFileAuth()`). */\n auth?: AuthProvider;\n baseUrl?: string;\n namespace?: string;\n /**\n * Account workspace to target. Sent as `X-InfoLang-Workspace-Id`.\n * Must be in the API key's allowlist (or a membership for JWT auth).\n * Also reads `INFOLANG_WORKSPACE` / `INFOLANG_WORKSPACE_ID`.\n */\n workspace?: string;\n timeoutMs?: number;\n maxRetries?: number;\n /** Custom fetch (for Workers, mocks, or a TLS-configured agent). */\n fetch?: FetchLike;\n}\n\nfunction resolveAuth(options: InfoLangOptions): AuthProvider {\n if (options.auth) return options.auth;\n if (options.apiKey) return new ApiKeyAuth(options.apiKey);\n if (options.devKey) return new DevKeyAuth(options.devKey);\n const envKey = globalThis.process?.env?.INFOLANG_API_KEY;\n if (envKey) return new ApiKeyAuth(envKey);\n const envDev = globalThis.process?.env?.INFOLANG_DEV_KEY;\n if (envDev) return new DevKeyAuth(envDev);\n throw new InfoLangConfigError(\n \"No credentials. Pass apiKey, devKey, or auth, set INFOLANG_API_KEY, \" +\n \"or use InfoLang.fromSessionFile().\",\n );\n}\n\nfunction resolveBaseUrl(options: InfoLangOptions, auth: AuthProvider): string {\n if (options.baseUrl) return options.baseUrl;\n const envUrl = globalThis.process?.env?.INFOLANG_BASE_URL;\n if (envUrl) return envUrl;\n return auth instanceof DevKeyAuth ? DIRECT_BASE_URL : CLOUD_BASE_URL;\n}\n\nfunction resolveNamespace(options: InfoLangOptions, auth: AuthProvider): string | undefined {\n if (options.namespace) return options.namespace;\n if (auth instanceof DevKeyAuth) return auth.namespace;\n return globalThis.process?.env?.INFOLANG_NAMESPACE;\n}\n\nfunction resolveWorkspace(options: InfoLangOptions): string | undefined {\n if (options.workspace) return options.workspace;\n return (\n globalThis.process?.env?.INFOLANG_WORKSPACE ??\n globalThis.process?.env?.INFOLANG_WORKSPACE_ID\n );\n}\n\nexport class InfoLang {\n readonly namespace?: string;\n readonly workspace?: string;\n readonly baseUrl: string;\n readonly memory: MemoryResource;\n readonly context: ContextResource;\n readonly health: HealthResource;\n\n constructor(options: InfoLangOptions = {}) {\n const auth = resolveAuth(options);\n this.baseUrl = resolveBaseUrl(options, auth);\n this.namespace = resolveNamespace(options, auth);\n this.workspace = resolveWorkspace(options);\n const transport = new Transport({\n baseUrl: this.baseUrl,\n auth,\n fetch: options.fetch,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n userAgent: `infolang-typescript/${version}`,\n workspaceId: this.workspace,\n });\n this.memory = new MemoryResource(transport, this.namespace);\n this.context = new ContextResource(transport, this.namespace);\n this.health = new HealthResource(transport);\n }\n\n // --- constructors ---------------------------------------------------\n\n static fromApiKey(apiKey: string, options: Omit<InfoLangOptions, \"apiKey\"> = {}): InfoLang {\n return new InfoLang({ ...options, apiKey });\n }\n\n static fromDevKey(devKey: string, options: Omit<InfoLangOptions, \"devKey\"> = {}): InfoLang {\n return new InfoLang({ ...options, devKey });\n }\n\n static fromSessionFile(path?: string, options: Omit<InfoLangOptions, \"auth\"> = {}): InfoLang {\n return new InfoLang({ ...options, auth: new SessionFileAuth(path) });\n }\n\n // --- top-level aliases ----------------------------------------------\n\n recall(query: string, options?: RecallOptions): Promise<RecallResult> {\n return this.memory.recall(query, options);\n }\n\n investigate(query: string, options?: InvestigateOptions): Promise<RecallResult> {\n return this.memory.investigate(query, options);\n }\n\n remember(text: string, options?: RememberOptions): Promise<RememberResult> {\n return this.memory.remember(text, options);\n }\n\n memorize(content: string, options?: RememberOptions): Promise<RememberResult> {\n return this.memory.memorize(content, options);\n }\n\n forget(memoryId: string, options?: { namespace?: string }): Promise<void> {\n return this.memory.forget(memoryId, options);\n }\n\n listBanks(): Promise<Bank[]> {\n return this.memory.listBanks();\n }\n\n listRecent(options?: ListRecentOptions): Promise<unknown[]> {\n return this.memory.listRecent(options);\n }\n\n recallHybrid(\n query: string,\n options?: {\n namespace?: string;\n topK?: number;\n tagFilter?: string[];\n candidatePool?: number;\n useHybrid?: boolean;\n },\n ): Promise<RecallResult> {\n return this.memory.recallHybrid(query, options);\n }\n\n rememberBatch(\n items: Array<string | { text: string; tags?: string | string[]; source?: string }>,\n options?: { namespace?: string; source?: string },\n ): Promise<RememberResult[]> {\n return this.memory.rememberBatch(items, options);\n }\n\n resetNamespace(namespace?: string, options?: { batch?: number }): Promise<number> {\n return this.memory.resetNamespace(namespace, options);\n }\n\n contextPack(query: string, options?: ContextPackOptions): Promise<ContextPack> {\n return this.context.contextPack(query, options);\n }\n\n ingestRepo(\n namespace: string,\n options: { repoRoot: string; ref?: string },\n ): Promise<Record<string, unknown>> {\n return this.context.ingestRepo(namespace, options);\n }\n\n execute(operations: Record<string, unknown>[]): Promise<Record<string, unknown>> {\n return this.context.execute(operations);\n }\n}\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication providers for the InfoLang SDK.
|
|
3
|
+
*
|
|
4
|
+
* A provider returns the headers to attach to each request. `headers()` is
|
|
5
|
+
* called before every request so providers can refresh short-lived tokens.
|
|
6
|
+
*/
|
|
7
|
+
declare const DEFAULT_SESSION_PATH: string;
|
|
8
|
+
interface AuthProvider {
|
|
9
|
+
headers(): Promise<Record<string, string>>;
|
|
10
|
+
}
|
|
11
|
+
/** Bearer authentication with an InfoLang API key (`il_live_...`). */
|
|
12
|
+
declare class ApiKeyAuth implements AuthProvider {
|
|
13
|
+
private readonly apiKey;
|
|
14
|
+
constructor(apiKey: string);
|
|
15
|
+
headers(): Promise<Record<string, string>>;
|
|
16
|
+
}
|
|
17
|
+
/** Self-hosted dev key in `key:namespace` form (matches INFOLANG_API_KEYS). */
|
|
18
|
+
declare class DevKeyAuth implements AuthProvider {
|
|
19
|
+
readonly namespace: string;
|
|
20
|
+
private readonly token;
|
|
21
|
+
constructor(devKey: string);
|
|
22
|
+
headers(): Promise<Record<string, string>>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* OAuth bearer token read from the cursor-setup session file (default
|
|
26
|
+
* `~/.config/infolang/session.json`, written by `npx @infolang/cursor-setup`).
|
|
27
|
+
* Refreshes transparently when the file carries a `refresh_token` + `token_url`.
|
|
28
|
+
*/
|
|
29
|
+
declare class SessionFileAuth implements AuthProvider {
|
|
30
|
+
private readonly path;
|
|
31
|
+
private cache?;
|
|
32
|
+
constructor(path?: string);
|
|
33
|
+
private load;
|
|
34
|
+
headers(): Promise<Record<string, string>>;
|
|
35
|
+
private isExpired;
|
|
36
|
+
private refresh;
|
|
37
|
+
}
|
|
38
|
+
/** Worker-to-origin shared secret. For internal integrators only. */
|
|
39
|
+
declare class OriginAuth implements AuthProvider {
|
|
40
|
+
private readonly workspace;
|
|
41
|
+
private readonly secret;
|
|
42
|
+
constructor(workspace: string, secret: string);
|
|
43
|
+
headers(): Promise<Record<string, string>>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Request and response types mirroring the il-runtime REST contract
|
|
48
|
+
* (`openapi/il-runtime.yaml`). The runtime emits compact keys (`i`, `s`, `t`,
|
|
49
|
+
* `g`); the SDK normalizes them into readable fields.
|
|
50
|
+
*/
|
|
51
|
+
/** A single recalled memory chunk (normalized from the compact wire shape). */
|
|
52
|
+
interface Chunk {
|
|
53
|
+
/** Memory id (wire: `i`). */
|
|
54
|
+
id: string;
|
|
55
|
+
/** Similarity score (wire: `s`). */
|
|
56
|
+
score?: number;
|
|
57
|
+
/** Chunk text (wire: `t`). */
|
|
58
|
+
text: string;
|
|
59
|
+
/** Tags (wire: `g`). */
|
|
60
|
+
tags?: string;
|
|
61
|
+
}
|
|
62
|
+
/** Usage metadata parsed from managed-cloud response headers. */
|
|
63
|
+
interface MeteringMeta {
|
|
64
|
+
tokensSaved?: number;
|
|
65
|
+
chunksUsed?: number;
|
|
66
|
+
repoCoverage?: number;
|
|
67
|
+
requestId?: string;
|
|
68
|
+
}
|
|
69
|
+
/** Result of a `recall` / `investigate` call. */
|
|
70
|
+
interface RecallResult {
|
|
71
|
+
chunks: Chunk[];
|
|
72
|
+
namespace?: string;
|
|
73
|
+
metering?: MeteringMeta;
|
|
74
|
+
/** True when the top match scores below the 0.85 confidence floor. */
|
|
75
|
+
weak: boolean;
|
|
76
|
+
}
|
|
77
|
+
/** Result of a `remember` / `memorize` call. */
|
|
78
|
+
interface RememberResult {
|
|
79
|
+
memoryId?: string;
|
|
80
|
+
namespace?: string;
|
|
81
|
+
}
|
|
82
|
+
/** Result of a `contextPack` call: a token-budgeted context string. */
|
|
83
|
+
interface ContextPack {
|
|
84
|
+
pack: string;
|
|
85
|
+
tokensEstimated?: number;
|
|
86
|
+
namespace?: string;
|
|
87
|
+
metering?: MeteringMeta;
|
|
88
|
+
}
|
|
89
|
+
/** A memory bank descriptor. */
|
|
90
|
+
interface Bank {
|
|
91
|
+
namespace: string;
|
|
92
|
+
count?: number;
|
|
93
|
+
}
|
|
94
|
+
interface RecallOptions {
|
|
95
|
+
namespace?: string;
|
|
96
|
+
topK?: number;
|
|
97
|
+
filters?: Record<string, unknown>;
|
|
98
|
+
verbose?: boolean;
|
|
99
|
+
}
|
|
100
|
+
interface InvestigateOptions {
|
|
101
|
+
namespaceHint?: string;
|
|
102
|
+
topK?: number;
|
|
103
|
+
}
|
|
104
|
+
interface RememberOptions {
|
|
105
|
+
namespace?: string;
|
|
106
|
+
source?: string;
|
|
107
|
+
tags?: string;
|
|
108
|
+
}
|
|
109
|
+
interface ContextPackOptions {
|
|
110
|
+
namespace?: string;
|
|
111
|
+
maxTokens?: number;
|
|
112
|
+
repoRoot?: string;
|
|
113
|
+
}
|
|
114
|
+
interface ListRecentOptions {
|
|
115
|
+
namespace?: string;
|
|
116
|
+
n?: number;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* fetch-native HTTP transport.
|
|
121
|
+
*
|
|
122
|
+
* Works on Node 18+, Bun, Deno, Cloudflare Workers and browsers without
|
|
123
|
+
* polyfills. Adds the resilience defaults expected of a modern SDK: targeted
|
|
124
|
+
* retries (429 + 5xx) with exponential backoff and full jitter, an explicit
|
|
125
|
+
* timeout budget via AbortController, and typed error mapping.
|
|
126
|
+
*/
|
|
127
|
+
|
|
128
|
+
type FetchLike = typeof fetch;
|
|
129
|
+
interface TransportOptions {
|
|
130
|
+
baseUrl: string;
|
|
131
|
+
auth: AuthProvider;
|
|
132
|
+
fetch?: FetchLike;
|
|
133
|
+
timeoutMs?: number;
|
|
134
|
+
maxRetries?: number;
|
|
135
|
+
backoffBaseMs?: number;
|
|
136
|
+
backoffCapMs?: number;
|
|
137
|
+
userAgent: string;
|
|
138
|
+
/** When set, sent as X-InfoLang-Workspace-Id on every request. */
|
|
139
|
+
workspaceId?: string;
|
|
140
|
+
}
|
|
141
|
+
interface RequestOptions {
|
|
142
|
+
method: string;
|
|
143
|
+
path: string;
|
|
144
|
+
body?: unknown;
|
|
145
|
+
headers?: Record<string, string>;
|
|
146
|
+
}
|
|
147
|
+
interface TransportResult<T> {
|
|
148
|
+
data: T;
|
|
149
|
+
metering: MeteringMeta;
|
|
150
|
+
}
|
|
151
|
+
declare class Transport {
|
|
152
|
+
private readonly baseUrl;
|
|
153
|
+
private readonly auth;
|
|
154
|
+
private readonly fetchImpl;
|
|
155
|
+
private readonly timeoutMs;
|
|
156
|
+
private readonly maxRetries;
|
|
157
|
+
private readonly backoffBaseMs;
|
|
158
|
+
private readonly backoffCapMs;
|
|
159
|
+
private readonly userAgent;
|
|
160
|
+
private readonly workspaceId?;
|
|
161
|
+
constructor(options: TransportOptions);
|
|
162
|
+
private delay;
|
|
163
|
+
request<T>(options: RequestOptions): Promise<TransportResult<T>>;
|
|
164
|
+
private finish;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/** Context resource: context-pack, repo ingest, and batch execute. */
|
|
168
|
+
|
|
169
|
+
declare class ContextResource {
|
|
170
|
+
private readonly transport;
|
|
171
|
+
private readonly defaultNamespace?;
|
|
172
|
+
constructor(transport: Transport, defaultNamespace?: string | undefined);
|
|
173
|
+
contextPack(query: string, options?: ContextPackOptions): Promise<ContextPack>;
|
|
174
|
+
ingestRepo(namespace: string, options: {
|
|
175
|
+
repoRoot: string;
|
|
176
|
+
ref?: string;
|
|
177
|
+
}): Promise<Record<string, unknown>>;
|
|
178
|
+
execute(operations: Record<string, unknown>[]): Promise<Record<string, unknown>>;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/** Health resource: liveness/readiness checks against the runtime. */
|
|
182
|
+
|
|
183
|
+
declare class HealthResource {
|
|
184
|
+
private readonly transport;
|
|
185
|
+
constructor(transport: Transport);
|
|
186
|
+
check(): Promise<Record<string, unknown>>;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/** Memory resource: recall, remember, forget, and agent-friendly aliases. */
|
|
190
|
+
|
|
191
|
+
declare class MemoryResource {
|
|
192
|
+
private readonly transport;
|
|
193
|
+
private readonly defaultNamespace?;
|
|
194
|
+
constructor(transport: Transport, defaultNamespace?: string | undefined);
|
|
195
|
+
recall(query: string, options?: RecallOptions): Promise<RecallResult>;
|
|
196
|
+
/** Agent-style recall with a sensible default `topK` of 5. */
|
|
197
|
+
investigate(query: string, options?: InvestigateOptions): Promise<RecallResult>;
|
|
198
|
+
remember(text: string, options?: RememberOptions): Promise<RememberResult>;
|
|
199
|
+
/** Alias for `remember` matching the `auto_memorize` tool. */
|
|
200
|
+
memorize(content: string, options?: RememberOptions): Promise<RememberResult>;
|
|
201
|
+
forget(memoryId: string, options?: {
|
|
202
|
+
namespace?: string;
|
|
203
|
+
}): Promise<void>;
|
|
204
|
+
listBanks(): Promise<Bank[]>;
|
|
205
|
+
listRecent(options?: ListRecentOptions): Promise<unknown[]>;
|
|
206
|
+
/** Recall with tag-inclusion ordering over a candidate pool (client-side). */
|
|
207
|
+
recallHybrid(query: string, options?: {
|
|
208
|
+
namespace?: string;
|
|
209
|
+
topK?: number;
|
|
210
|
+
tagFilter?: string[];
|
|
211
|
+
candidatePool?: number;
|
|
212
|
+
useHybrid?: boolean;
|
|
213
|
+
}): Promise<RecallResult>;
|
|
214
|
+
/** Store many memories via POST /v1/execute remember_batch. */
|
|
215
|
+
rememberBatch(items: Array<string | {
|
|
216
|
+
text: string;
|
|
217
|
+
tags?: string | string[];
|
|
218
|
+
source?: string;
|
|
219
|
+
}>, options?: {
|
|
220
|
+
namespace?: string;
|
|
221
|
+
source?: string;
|
|
222
|
+
}): Promise<RememberResult[]>;
|
|
223
|
+
/** Best-effort bulk clear (list + forget loop). */
|
|
224
|
+
resetNamespace(namespace?: string, options?: {
|
|
225
|
+
batch?: number;
|
|
226
|
+
}): Promise<number>;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* The InfoLang client: one-line construction over the il-runtime REST API.
|
|
231
|
+
*
|
|
232
|
+
* Exposes grouped resources (`client.memory`, `client.context`,
|
|
233
|
+
* `client.health`) plus the common operations as top-level aliases so the
|
|
234
|
+
* first call is a one-liner.
|
|
235
|
+
*/
|
|
236
|
+
|
|
237
|
+
declare const CLOUD_BASE_URL = "https://api.infolang.ai";
|
|
238
|
+
declare const DIRECT_BASE_URL = "http://127.0.0.1:8766";
|
|
239
|
+
interface InfoLangOptions {
|
|
240
|
+
/** Managed-cloud API key (`il_live_...`). Defaults to the cloud base URL. */
|
|
241
|
+
apiKey?: string;
|
|
242
|
+
/** Self-hosted dev key in `key:namespace` form. Defaults to the direct base URL. */
|
|
243
|
+
devKey?: string;
|
|
244
|
+
/** An explicit auth provider (e.g. `new SessionFileAuth()`). */
|
|
245
|
+
auth?: AuthProvider;
|
|
246
|
+
baseUrl?: string;
|
|
247
|
+
namespace?: string;
|
|
248
|
+
/**
|
|
249
|
+
* Account workspace to target. Sent as `X-InfoLang-Workspace-Id`.
|
|
250
|
+
* Must be in the API key's allowlist (or a membership for JWT auth).
|
|
251
|
+
* Also reads `INFOLANG_WORKSPACE` / `INFOLANG_WORKSPACE_ID`.
|
|
252
|
+
*/
|
|
253
|
+
workspace?: string;
|
|
254
|
+
timeoutMs?: number;
|
|
255
|
+
maxRetries?: number;
|
|
256
|
+
/** Custom fetch (for Workers, mocks, or a TLS-configured agent). */
|
|
257
|
+
fetch?: FetchLike;
|
|
258
|
+
}
|
|
259
|
+
declare class InfoLang {
|
|
260
|
+
readonly namespace?: string;
|
|
261
|
+
readonly workspace?: string;
|
|
262
|
+
readonly baseUrl: string;
|
|
263
|
+
readonly memory: MemoryResource;
|
|
264
|
+
readonly context: ContextResource;
|
|
265
|
+
readonly health: HealthResource;
|
|
266
|
+
constructor(options?: InfoLangOptions);
|
|
267
|
+
static fromApiKey(apiKey: string, options?: Omit<InfoLangOptions, "apiKey">): InfoLang;
|
|
268
|
+
static fromDevKey(devKey: string, options?: Omit<InfoLangOptions, "devKey">): InfoLang;
|
|
269
|
+
static fromSessionFile(path?: string, options?: Omit<InfoLangOptions, "auth">): InfoLang;
|
|
270
|
+
recall(query: string, options?: RecallOptions): Promise<RecallResult>;
|
|
271
|
+
investigate(query: string, options?: InvestigateOptions): Promise<RecallResult>;
|
|
272
|
+
remember(text: string, options?: RememberOptions): Promise<RememberResult>;
|
|
273
|
+
memorize(content: string, options?: RememberOptions): Promise<RememberResult>;
|
|
274
|
+
forget(memoryId: string, options?: {
|
|
275
|
+
namespace?: string;
|
|
276
|
+
}): Promise<void>;
|
|
277
|
+
listBanks(): Promise<Bank[]>;
|
|
278
|
+
listRecent(options?: ListRecentOptions): Promise<unknown[]>;
|
|
279
|
+
recallHybrid(query: string, options?: {
|
|
280
|
+
namespace?: string;
|
|
281
|
+
topK?: number;
|
|
282
|
+
tagFilter?: string[];
|
|
283
|
+
candidatePool?: number;
|
|
284
|
+
useHybrid?: boolean;
|
|
285
|
+
}): Promise<RecallResult>;
|
|
286
|
+
rememberBatch(items: Array<string | {
|
|
287
|
+
text: string;
|
|
288
|
+
tags?: string | string[];
|
|
289
|
+
source?: string;
|
|
290
|
+
}>, options?: {
|
|
291
|
+
namespace?: string;
|
|
292
|
+
source?: string;
|
|
293
|
+
}): Promise<RememberResult[]>;
|
|
294
|
+
resetNamespace(namespace?: string, options?: {
|
|
295
|
+
batch?: number;
|
|
296
|
+
}): Promise<number>;
|
|
297
|
+
contextPack(query: string, options?: ContextPackOptions): Promise<ContextPack>;
|
|
298
|
+
ingestRepo(namespace: string, options: {
|
|
299
|
+
repoRoot: string;
|
|
300
|
+
ref?: string;
|
|
301
|
+
}): Promise<Record<string, unknown>>;
|
|
302
|
+
execute(operations: Record<string, unknown>[]): Promise<Record<string, unknown>>;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Typed error hierarchy for the InfoLang SDK.
|
|
307
|
+
*
|
|
308
|
+
* Catch these instead of inspecting raw responses. Every API error carries the
|
|
309
|
+
* originating `requestId` (from the `x-request-id` header) when available.
|
|
310
|
+
*/
|
|
311
|
+
declare class InfoLangError extends Error {
|
|
312
|
+
constructor(message: string);
|
|
313
|
+
}
|
|
314
|
+
/** Client misconfiguration (missing credentials, bad base URL). */
|
|
315
|
+
declare class InfoLangConfigError extends InfoLangError {
|
|
316
|
+
}
|
|
317
|
+
/** The runtime could not be reached, or the request timed out. */
|
|
318
|
+
declare class InfoLangConnectionError extends InfoLangError {
|
|
319
|
+
}
|
|
320
|
+
interface APIErrorOptions {
|
|
321
|
+
status: number;
|
|
322
|
+
body?: unknown;
|
|
323
|
+
requestId?: string;
|
|
324
|
+
retryAfter?: number;
|
|
325
|
+
}
|
|
326
|
+
/** A non-2xx response from the runtime. */
|
|
327
|
+
declare class InfoLangAPIError extends InfoLangError {
|
|
328
|
+
readonly status: number;
|
|
329
|
+
readonly body: unknown;
|
|
330
|
+
readonly requestId?: string;
|
|
331
|
+
constructor(message: string, options: APIErrorOptions);
|
|
332
|
+
}
|
|
333
|
+
/** 401/403 — credential missing, invalid, or lacking permission. */
|
|
334
|
+
declare class AuthenticationError extends InfoLangAPIError {
|
|
335
|
+
}
|
|
336
|
+
/** 404 — namespace, bank, or memory id does not exist. */
|
|
337
|
+
declare class NotFoundError extends InfoLangAPIError {
|
|
338
|
+
}
|
|
339
|
+
/** 400/422 — the request payload was rejected. */
|
|
340
|
+
declare class ValidationError extends InfoLangAPIError {
|
|
341
|
+
}
|
|
342
|
+
/** 429 — quota exceeded. `retryAfter` is seconds when the server sets it. */
|
|
343
|
+
declare class RateLimitError extends InfoLangAPIError {
|
|
344
|
+
readonly retryAfter?: number;
|
|
345
|
+
constructor(message: string, options: APIErrorOptions);
|
|
346
|
+
}
|
|
347
|
+
/** 5xx — the runtime failed to process the request. */
|
|
348
|
+
declare class ServerError extends InfoLangAPIError {
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
declare const version = "0.2.0";
|
|
352
|
+
|
|
353
|
+
export { ApiKeyAuth, type AuthProvider, AuthenticationError, type Bank, CLOUD_BASE_URL, type Chunk, type ContextPack, type ContextPackOptions, DEFAULT_SESSION_PATH, DIRECT_BASE_URL, DevKeyAuth, InfoLang, InfoLangAPIError, InfoLangConfigError, InfoLangConnectionError, InfoLangError, type InfoLangOptions, type InvestigateOptions, type ListRecentOptions, type MeteringMeta, NotFoundError, OriginAuth, RateLimitError, type RecallOptions, type RecallResult, type RememberOptions, type RememberResult, ServerError, SessionFileAuth, ValidationError, version };
|