1// @effect-diagnostics nodeBuiltinImport:off -- The SDK must load from disk beside its Webpack chunks.
2import * as NodeModule from "node:module";
3
4// createRequire preserves adjacent Webpack chunks and native modules in bundled/SEA builds.
5const requireCursorSdk = NodeModule.createRequire(import.meta.url);
6let sdk: typeof import("@cursor/sdk") | undefined;
7let sqlite: typeof import("@cursor/sdk/sqlite") | undefined;
8
9export function loadCursorSdk(): typeof import("@cursor/sdk") {
10 if (sdk !== undefined) return sdk;
11 const start = performance.now();
12 sdk = requireCursorSdk("@cursor/sdk") as typeof import("@cursor/sdk");
13 if (process.env.T3CODE_STARTUP_PROFILE_DIR) {
14 performance.measure("provider.cursor.importSdk", { start });
15 }
16 return sdk;
17}
18
19export function loadCursorSqlite(): typeof import("@cursor/sdk/sqlite") {
20 if (sqlite !== undefined) return sqlite;
21 const start = performance.now();
22 sqlite = requireCursorSdk("@cursor/sdk/sqlite") as typeof import("@cursor/sdk/sqlite");
23 if (process.env.T3CODE_STARTUP_PROFILE_DIR) {
24 performance.measure("provider.cursor.importSqliteStore", { start });
25 }
26 return sqlite;
27}
28
29// Error classification must not initialize the SDK when the load itself failed.
30export function isCursorSdkError<
31 K extends "AuthenticationError" | "ConfigurationError" | "CursorSdkError",
32>(cause: unknown, kind: K): cause is InstanceType<(typeof import("@cursor/sdk"))[K]> {
33 return sdk !== undefined && cause instanceof sdk[kind];
34}