agentfootprint
Version:
The explainable agent framework — backtrack a wrong answer to the exact context that caused it (evidence, not guesses). Built on footprintjs.
56 lines (55 loc) • 2.43 kB
TypeScript
/**
* lib/sqliteUnavailable — the one refusal for "this Node has no `node:sqlite`".
*
* Pattern: leaf error type (imports nothing).
* Role: shared by `hosting/sqliteSessions` and `adapters/memory/sqliteVector`.
* It lives here rather than in either of them because two adapters
* hitting the same missing module must raise the same error: a
* consumer catching `SqliteUnavailableError` should not have to know
* which of our stores was being constructed, and two classes of one
* name is a duplicate type the build refuses anyway.
* Emits: N/A.
*
* Node 20 does not have the module at all; Node 22.5 through 22.12 have it
* behind `--experimental-sqlite`; Node 22.13+ and 23.4+ have it as-is (still
* marked experimental by Node, which is why it prints a warning on first use).
*
* The refusal names the version you are on and the three ways out, because
* "cannot find module 'node:sqlite'" out of a library's guts tells you what
* broke and nothing about what to do.
*
* **There is deliberately no fallback.** Each caller supplies its own last
* sentence saying what a silent fallback would have looked like from the
* outside, because that sentence is the argument — not decoration.
*/
/** What the refusal says about the caller that raised it. */
export interface SqliteUnavailableContext {
/** The factory the consumer actually wrote, e.g. `sqliteSessions()`. */
readonly factory: string;
/** The honest in-memory alternative, named so it can be reached for. */
readonly alternative: string;
/** Why falling back to that alternative silently would be worse than refusing. */
readonly whyNotFallback: string;
/** Which door the message belongs to, for the `[prefix]` tag. */
readonly door: string;
}
/**
* Raised when `node:sqlite` is not available in the running Node.
*
* @example
* ```ts
* try {
* const store = sqliteVectorStore({ file: './corpus.db' });
* } catch (err) {
* if (err instanceof SqliteUnavailableError) {
* console.error(`Node ${err.nodeVersion} cannot do this`, err.message);
* }
* }
* ```
*/
export declare class SqliteUnavailableError extends Error {
readonly code: "ERR_SQLITE_UNAVAILABLE";
/** The Node version this process is running. */
readonly nodeVersion: string;
constructor(nodeVersion: string, reason: string, context?: SqliteUnavailableContext);
}