@langgraph-js/pure-graph 2.1.6 → 2.2.8

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.
Files changed (34) hide show
  1. package/README.md +3 -2
  2. package/dist/adapter/hono/index.js +2 -4
  3. package/dist/adapter/hono/index.js.map +1 -1
  4. package/dist/adapter/nextjs/index.js +2 -2
  5. package/dist/adapter/zod.d.ts +2 -2
  6. package/dist/checkpoint-DnfHhpJw.js +1418 -0
  7. package/dist/checkpoint-DnfHhpJw.js.map +1 -0
  8. package/dist/{createEndpoint-C-7CCNeN.js → createEndpoint-DHnODS67.js} +2 -2
  9. package/dist/{createEndpoint-C-7CCNeN.js.map → createEndpoint-DHnODS67.js.map} +1 -1
  10. package/dist/index.js +2 -2
  11. package/dist/pg-adapter-BFtir1GE.js +67 -0
  12. package/dist/pg-adapter-BFtir1GE.js.map +1 -0
  13. package/dist/{queue-CVAmN8_S.js → queue-CwCW8m0q.js} +8 -4
  14. package/dist/queue-CwCW8m0q.js.map +1 -0
  15. package/dist/{router-DgmIokTx.js → router-AADuUgGy.js} +3 -3
  16. package/dist/{router-DgmIokTx.js.map → router-AADuUgGy.js.map} +1 -1
  17. package/dist/sqlite-adapter-BNYk10Gl.js +76 -0
  18. package/dist/sqlite-adapter-BNYk10Gl.js.map +1 -0
  19. package/dist/storage/index.d.ts +2 -3
  20. package/dist/storage/kysely/adapter.d.ts +44 -0
  21. package/dist/storage/kysely/index.d.ts +9 -0
  22. package/dist/storage/kysely/pg-adapter.d.ts +23 -0
  23. package/dist/storage/kysely/sqlite-adapter.d.ts +22 -0
  24. package/dist/storage/{sqlite → kysely}/threads.d.ts +9 -6
  25. package/dist/storage/kysely/types.d.ts +27 -0
  26. package/dist/{stream-BwdFJfJb.js → stream-SJdqjfOM.js} +232 -602
  27. package/dist/stream-SJdqjfOM.js.map +1 -0
  28. package/package.json +2 -2
  29. package/dist/checkpoint-DYSXoBLt.js +0 -390
  30. package/dist/checkpoint-DYSXoBLt.js.map +0 -1
  31. package/dist/queue-CVAmN8_S.js.map +0 -1
  32. package/dist/storage/pg/threads.d.ts +0 -44
  33. package/dist/storage/sqlite/DB.d.ts +0 -3
  34. package/dist/stream-BwdFJfJb.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-DnfHhpJw.js","sources":["../node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/lib/util.js","../node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/lib/sqlite-error.js","../node_modules/.pnpm/file-uri-to-path@1.0.0/node_modules/file-uri-to-path/index.js","../node_modules/.pnpm/bindings@1.5.0/node_modules/bindings/bindings.js","../node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/lib/methods/wrappers.js","../node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/lib/methods/transaction.js","../node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/lib/methods/pragma.js","../node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/lib/methods/backup.js","../node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/lib/methods/serialize.js","../node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/lib/methods/function.js","../node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/lib/methods/aggregate.js","../node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/lib/methods/table.js","../node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/lib/methods/inspect.js","../node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/lib/database.js","../node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/lib/index.js","../src/storage/sqlite/checkpoint.ts"],"sourcesContent":["'use strict';\n\nexports.getBooleanOption = (options, key) => {\n\tlet value = false;\n\tif (key in options && typeof (value = options[key]) !== 'boolean') {\n\t\tthrow new TypeError(`Expected the \"${key}\" option to be a boolean`);\n\t}\n\treturn value;\n};\n\nexports.cppdb = Symbol();\nexports.inspect = Symbol.for('nodejs.util.inspect.custom');\n","'use strict';\nconst descriptor = { value: 'SqliteError', writable: true, enumerable: false, configurable: true };\n\nfunction SqliteError(message, code) {\n\tif (new.target !== SqliteError) {\n\t\treturn new SqliteError(message, code);\n\t}\n\tif (typeof code !== 'string') {\n\t\tthrow new TypeError('Expected second argument to be a string');\n\t}\n\tError.call(this, message);\n\tdescriptor.value = '' + message;\n\tObject.defineProperty(this, 'message', descriptor);\n\tError.captureStackTrace(this, SqliteError);\n\tthis.code = code;\n}\nObject.setPrototypeOf(SqliteError, Error);\nObject.setPrototypeOf(SqliteError.prototype, Error.prototype);\nObject.defineProperty(SqliteError.prototype, 'name', descriptor);\nmodule.exports = SqliteError;\n","\n/**\n * Module dependencies.\n */\n\nvar sep = require('path').sep || '/';\n\n/**\n * Module exports.\n */\n\nmodule.exports = fileUriToPath;\n\n/**\n * File URI to Path function.\n *\n * @param {String} uri\n * @return {String} path\n * @api public\n */\n\nfunction fileUriToPath (uri) {\n if ('string' != typeof uri ||\n uri.length <= 7 ||\n 'file://' != uri.substring(0, 7)) {\n throw new TypeError('must pass in a file:// URI to convert to a file path');\n }\n\n var rest = decodeURI(uri.substring(7));\n var firstSlash = rest.indexOf('/');\n var host = rest.substring(0, firstSlash);\n var path = rest.substring(firstSlash + 1);\n\n // 2. Scheme Definition\n // As a special case, <host> can be the string \"localhost\" or the empty\n // string; this is interpreted as \"the machine from which the URL is\n // being interpreted\".\n if ('localhost' == host) host = '';\n\n if (host) {\n host = sep + sep + host;\n }\n\n // 3.2 Drives, drive letters, mount points, file system root\n // Drive letters are mapped into the top of a file URI in various ways,\n // depending on the implementation; some applications substitute\n // vertical bar (\"|\") for the colon after the drive letter, yielding\n // \"file:///c|/tmp/test.txt\". In some cases, the colon is left\n // unchanged, as in \"file:///c:/tmp/test.txt\". In other cases, the\n // colon is simply omitted, as in \"file:///c/tmp/test.txt\".\n path = path.replace(/^(.+)\\|/, '$1:');\n\n // for Windows, we need to invert the path separators from what a URI uses\n if (sep == '\\\\') {\n path = path.replace(/\\//g, '\\\\');\n }\n\n if (/^.+\\:/.test(path)) {\n // has Windows drive at beginning of path\n } else {\n // unix path…\n path = sep + path;\n }\n\n return host + path;\n}\n","/**\n * Module dependencies.\n */\n\nvar fs = require('fs'),\n path = require('path'),\n fileURLToPath = require('file-uri-to-path'),\n join = path.join,\n dirname = path.dirname,\n exists =\n (fs.accessSync &&\n function(path) {\n try {\n fs.accessSync(path);\n } catch (e) {\n return false;\n }\n return true;\n }) ||\n fs.existsSync ||\n path.existsSync,\n defaults = {\n arrow: process.env.NODE_BINDINGS_ARROW || ' → ',\n compiled: process.env.NODE_BINDINGS_COMPILED_DIR || 'compiled',\n platform: process.platform,\n arch: process.arch,\n nodePreGyp:\n 'node-v' +\n process.versions.modules +\n '-' +\n process.platform +\n '-' +\n process.arch,\n version: process.versions.node,\n bindings: 'bindings.node',\n try: [\n // node-gyp's linked version in the \"build\" dir\n ['module_root', 'build', 'bindings'],\n // node-waf and gyp_addon (a.k.a node-gyp)\n ['module_root', 'build', 'Debug', 'bindings'],\n ['module_root', 'build', 'Release', 'bindings'],\n // Debug files, for development (legacy behavior, remove for node v0.9)\n ['module_root', 'out', 'Debug', 'bindings'],\n ['module_root', 'Debug', 'bindings'],\n // Release files, but manually compiled (legacy behavior, remove for node v0.9)\n ['module_root', 'out', 'Release', 'bindings'],\n ['module_root', 'Release', 'bindings'],\n // Legacy from node-waf, node <= 0.4.x\n ['module_root', 'build', 'default', 'bindings'],\n // Production \"Release\" buildtype binary (meh...)\n ['module_root', 'compiled', 'version', 'platform', 'arch', 'bindings'],\n // node-qbs builds\n ['module_root', 'addon-build', 'release', 'install-root', 'bindings'],\n ['module_root', 'addon-build', 'debug', 'install-root', 'bindings'],\n ['module_root', 'addon-build', 'default', 'install-root', 'bindings'],\n // node-pre-gyp path ./lib/binding/{node_abi}-{platform}-{arch}\n ['module_root', 'lib', 'binding', 'nodePreGyp', 'bindings']\n ]\n };\n\n/**\n * The main `bindings()` function loads the compiled bindings for a given module.\n * It uses V8's Error API to determine the parent filename that this function is\n * being invoked from, which is then used to find the root directory.\n */\n\nfunction bindings(opts) {\n // Argument surgery\n if (typeof opts == 'string') {\n opts = { bindings: opts };\n } else if (!opts) {\n opts = {};\n }\n\n // maps `defaults` onto `opts` object\n Object.keys(defaults).map(function(i) {\n if (!(i in opts)) opts[i] = defaults[i];\n });\n\n // Get the module root\n if (!opts.module_root) {\n opts.module_root = exports.getRoot(exports.getFileName());\n }\n\n // Ensure the given bindings name ends with .node\n if (path.extname(opts.bindings) != '.node') {\n opts.bindings += '.node';\n }\n\n // https://github.com/webpack/webpack/issues/4175#issuecomment-342931035\n var requireFunc =\n typeof __webpack_require__ === 'function'\n ? __non_webpack_require__\n : require;\n\n var tries = [],\n i = 0,\n l = opts.try.length,\n n,\n b,\n err;\n\n for (; i < l; i++) {\n n = join.apply(\n null,\n opts.try[i].map(function(p) {\n return opts[p] || p;\n })\n );\n tries.push(n);\n try {\n b = opts.path ? requireFunc.resolve(n) : requireFunc(n);\n if (!opts.path) {\n b.path = n;\n }\n return b;\n } catch (e) {\n if (e.code !== 'MODULE_NOT_FOUND' &&\n e.code !== 'QUALIFIED_PATH_RESOLUTION_FAILED' &&\n !/not find/i.test(e.message)) {\n throw e;\n }\n }\n }\n\n err = new Error(\n 'Could not locate the bindings file. Tried:\\n' +\n tries\n .map(function(a) {\n return opts.arrow + a;\n })\n .join('\\n')\n );\n err.tries = tries;\n throw err;\n}\nmodule.exports = exports = bindings;\n\n/**\n * Gets the filename of the JavaScript file that invokes this function.\n * Used to help find the root directory of a module.\n * Optionally accepts an filename argument to skip when searching for the invoking filename\n */\n\nexports.getFileName = function getFileName(calling_file) {\n var origPST = Error.prepareStackTrace,\n origSTL = Error.stackTraceLimit,\n dummy = {},\n fileName;\n\n Error.stackTraceLimit = 10;\n\n Error.prepareStackTrace = function(e, st) {\n for (var i = 0, l = st.length; i < l; i++) {\n fileName = st[i].getFileName();\n if (fileName !== __filename) {\n if (calling_file) {\n if (fileName !== calling_file) {\n return;\n }\n } else {\n return;\n }\n }\n }\n };\n\n // run the 'prepareStackTrace' function above\n Error.captureStackTrace(dummy);\n dummy.stack;\n\n // cleanup\n Error.prepareStackTrace = origPST;\n Error.stackTraceLimit = origSTL;\n\n // handle filename that starts with \"file://\"\n var fileSchema = 'file://';\n if (fileName.indexOf(fileSchema) === 0) {\n fileName = fileURLToPath(fileName);\n }\n\n return fileName;\n};\n\n/**\n * Gets the root directory of a module, given an arbitrary filename\n * somewhere in the module tree. The \"root directory\" is the directory\n * containing the `package.json` file.\n *\n * In: /home/nate/node-native-module/lib/index.js\n * Out: /home/nate/node-native-module\n */\n\nexports.getRoot = function getRoot(file) {\n var dir = dirname(file),\n prev;\n while (true) {\n if (dir === '.') {\n // Avoids an infinite loop in rare cases, like the REPL\n dir = process.cwd();\n }\n if (\n exists(join(dir, 'package.json')) ||\n exists(join(dir, 'node_modules'))\n ) {\n // Found the 'package.json' file or 'node_modules' dir; we're done\n return dir;\n }\n if (prev === dir) {\n // Got to the top\n throw new Error(\n 'Could not find module root given file: \"' +\n file +\n '\". Do you have a `package.json` file? '\n );\n }\n // Try the parent dir next\n prev = dir;\n dir = join(dir, '..');\n }\n};\n","'use strict';\nconst { cppdb } = require('../util');\n\nexports.prepare = function prepare(sql) {\n\treturn this[cppdb].prepare(sql, this, false);\n};\n\nexports.exec = function exec(sql) {\n\tthis[cppdb].exec(sql);\n\treturn this;\n};\n\nexports.close = function close() {\n\tthis[cppdb].close();\n\treturn this;\n};\n\nexports.loadExtension = function loadExtension(...args) {\n\tthis[cppdb].loadExtension(...args);\n\treturn this;\n};\n\nexports.defaultSafeIntegers = function defaultSafeIntegers(...args) {\n\tthis[cppdb].defaultSafeIntegers(...args);\n\treturn this;\n};\n\nexports.unsafeMode = function unsafeMode(...args) {\n\tthis[cppdb].unsafeMode(...args);\n\treturn this;\n};\n\nexports.getters = {\n\tname: {\n\t\tget: function name() { return this[cppdb].name; },\n\t\tenumerable: true,\n\t},\n\topen: {\n\t\tget: function open() { return this[cppdb].open; },\n\t\tenumerable: true,\n\t},\n\tinTransaction: {\n\t\tget: function inTransaction() { return this[cppdb].inTransaction; },\n\t\tenumerable: true,\n\t},\n\treadonly: {\n\t\tget: function readonly() { return this[cppdb].readonly; },\n\t\tenumerable: true,\n\t},\n\tmemory: {\n\t\tget: function memory() { return this[cppdb].memory; },\n\t\tenumerable: true,\n\t},\n};\n","'use strict';\nconst { cppdb } = require('../util');\nconst controllers = new WeakMap();\n\nmodule.exports = function transaction(fn) {\n\tif (typeof fn !== 'function') throw new TypeError('Expected first argument to be a function');\n\n\tconst db = this[cppdb];\n\tconst controller = getController(db, this);\n\tconst { apply } = Function.prototype;\n\n\t// Each version of the transaction function has these same properties\n\tconst properties = {\n\t\tdefault: { value: wrapTransaction(apply, fn, db, controller.default) },\n\t\tdeferred: { value: wrapTransaction(apply, fn, db, controller.deferred) },\n\t\timmediate: { value: wrapTransaction(apply, fn, db, controller.immediate) },\n\t\texclusive: { value: wrapTransaction(apply, fn, db, controller.exclusive) },\n\t\tdatabase: { value: this, enumerable: true },\n\t};\n\n\tObject.defineProperties(properties.default.value, properties);\n\tObject.defineProperties(properties.deferred.value, properties);\n\tObject.defineProperties(properties.immediate.value, properties);\n\tObject.defineProperties(properties.exclusive.value, properties);\n\n\t// Return the default version of the transaction function\n\treturn properties.default.value;\n};\n\n// Return the database's cached transaction controller, or create a new one\nconst getController = (db, self) => {\n\tlet controller = controllers.get(db);\n\tif (!controller) {\n\t\tconst shared = {\n\t\t\tcommit: db.prepare('COMMIT', self, false),\n\t\t\trollback: db.prepare('ROLLBACK', self, false),\n\t\t\tsavepoint: db.prepare('SAVEPOINT `\\t_bs3.\\t`', self, false),\n\t\t\trelease: db.prepare('RELEASE `\\t_bs3.\\t`', self, false),\n\t\t\trollbackTo: db.prepare('ROLLBACK TO `\\t_bs3.\\t`', self, false),\n\t\t};\n\t\tcontrollers.set(db, controller = {\n\t\t\tdefault: Object.assign({ begin: db.prepare('BEGIN', self, false) }, shared),\n\t\t\tdeferred: Object.assign({ begin: db.prepare('BEGIN DEFERRED', self, false) }, shared),\n\t\t\timmediate: Object.assign({ begin: db.prepare('BEGIN IMMEDIATE', self, false) }, shared),\n\t\t\texclusive: Object.assign({ begin: db.prepare('BEGIN EXCLUSIVE', self, false) }, shared),\n\t\t});\n\t}\n\treturn controller;\n};\n\n// Return a new transaction function by wrapping the given function\nconst wrapTransaction = (apply, fn, db, { begin, commit, rollback, savepoint, release, rollbackTo }) => function sqliteTransaction() {\n\tlet before, after, undo;\n\tif (db.inTransaction) {\n\t\tbefore = savepoint;\n\t\tafter = release;\n\t\tundo = rollbackTo;\n\t} else {\n\t\tbefore = begin;\n\t\tafter = commit;\n\t\tundo = rollback;\n\t}\n\tbefore.run();\n\ttry {\n\t\tconst result = apply.call(fn, this, arguments);\n\t\tif (result && typeof result.then === 'function') {\n\t\t\tthrow new TypeError('Transaction function cannot return a promise');\n\t\t}\n\t\tafter.run();\n\t\treturn result;\n\t} catch (ex) {\n\t\tif (db.inTransaction) {\n\t\t\tundo.run();\n\t\t\tif (undo !== rollback) after.run();\n\t\t}\n\t\tthrow ex;\n\t}\n};\n","'use strict';\nconst { getBooleanOption, cppdb } = require('../util');\n\nmodule.exports = function pragma(source, options) {\n\tif (options == null) options = {};\n\tif (typeof source !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof options !== 'object') throw new TypeError('Expected second argument to be an options object');\n\tconst simple = getBooleanOption(options, 'simple');\n\n\tconst stmt = this[cppdb].prepare(`PRAGMA ${source}`, this, true);\n\treturn simple ? stmt.pluck().get() : stmt.all();\n};\n","'use strict';\nconst fs = require('fs');\nconst path = require('path');\nconst { promisify } = require('util');\nconst { cppdb } = require('../util');\nconst fsAccess = promisify(fs.access);\n\nmodule.exports = async function backup(filename, options) {\n\tif (options == null) options = {};\n\n\t// Validate arguments\n\tif (typeof filename !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof options !== 'object') throw new TypeError('Expected second argument to be an options object');\n\n\t// Interpret options\n\tfilename = filename.trim();\n\tconst attachedName = 'attached' in options ? options.attached : 'main';\n\tconst handler = 'progress' in options ? options.progress : null;\n\n\t// Validate interpreted options\n\tif (!filename) throw new TypeError('Backup filename cannot be an empty string');\n\tif (filename === ':memory:') throw new TypeError('Invalid backup filename \":memory:\"');\n\tif (typeof attachedName !== 'string') throw new TypeError('Expected the \"attached\" option to be a string');\n\tif (!attachedName) throw new TypeError('The \"attached\" option cannot be an empty string');\n\tif (handler != null && typeof handler !== 'function') throw new TypeError('Expected the \"progress\" option to be a function');\n\n\t// Make sure the specified directory exists\n\tawait fsAccess(path.dirname(filename)).catch(() => {\n\t\tthrow new TypeError('Cannot save backup because the directory does not exist');\n\t});\n\n\tconst isNewFile = await fsAccess(filename).then(() => false, () => true);\n\treturn runBackup(this[cppdb].backup(this, attachedName, filename, isNewFile), handler || null);\n};\n\nconst runBackup = (backup, handler) => {\n\tlet rate = 0;\n\tlet useDefault = true;\n\n\treturn new Promise((resolve, reject) => {\n\t\tsetImmediate(function step() {\n\t\t\ttry {\n\t\t\t\tconst progress = backup.transfer(rate);\n\t\t\t\tif (!progress.remainingPages) {\n\t\t\t\t\tbackup.close();\n\t\t\t\t\tresolve(progress);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (useDefault) {\n\t\t\t\t\tuseDefault = false;\n\t\t\t\t\trate = 100;\n\t\t\t\t}\n\t\t\t\tif (handler) {\n\t\t\t\t\tconst ret = handler(progress);\n\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\tif (typeof ret === 'number' && ret === ret) rate = Math.max(0, Math.min(0x7fffffff, Math.round(ret)));\n\t\t\t\t\t\telse throw new TypeError('Expected progress callback to return a number or undefined');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsetImmediate(step);\n\t\t\t} catch (err) {\n\t\t\t\tbackup.close();\n\t\t\t\treject(err);\n\t\t\t}\n\t\t});\n\t});\n};\n","'use strict';\nconst { cppdb } = require('../util');\n\nmodule.exports = function serialize(options) {\n\tif (options == null) options = {};\n\n\t// Validate arguments\n\tif (typeof options !== 'object') throw new TypeError('Expected first argument to be an options object');\n\n\t// Interpret and validate options\n\tconst attachedName = 'attached' in options ? options.attached : 'main';\n\tif (typeof attachedName !== 'string') throw new TypeError('Expected the \"attached\" option to be a string');\n\tif (!attachedName) throw new TypeError('The \"attached\" option cannot be an empty string');\n\n\treturn this[cppdb].serialize(attachedName);\n};\n","'use strict';\nconst { getBooleanOption, cppdb } = require('../util');\n\nmodule.exports = function defineFunction(name, options, fn) {\n\t// Apply defaults\n\tif (options == null) options = {};\n\tif (typeof options === 'function') { fn = options; options = {}; }\n\n\t// Validate arguments\n\tif (typeof name !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof fn !== 'function') throw new TypeError('Expected last argument to be a function');\n\tif (typeof options !== 'object') throw new TypeError('Expected second argument to be an options object');\n\tif (!name) throw new TypeError('User-defined function name cannot be an empty string');\n\n\t// Interpret options\n\tconst safeIntegers = 'safeIntegers' in options ? +getBooleanOption(options, 'safeIntegers') : 2;\n\tconst deterministic = getBooleanOption(options, 'deterministic');\n\tconst directOnly = getBooleanOption(options, 'directOnly');\n\tconst varargs = getBooleanOption(options, 'varargs');\n\tlet argCount = -1;\n\n\t// Determine argument count\n\tif (!varargs) {\n\t\targCount = fn.length;\n\t\tif (!Number.isInteger(argCount) || argCount < 0) throw new TypeError('Expected function.length to be a positive integer');\n\t\tif (argCount > 100) throw new RangeError('User-defined functions cannot have more than 100 arguments');\n\t}\n\n\tthis[cppdb].function(fn, name, argCount, safeIntegers, deterministic, directOnly);\n\treturn this;\n};\n","'use strict';\nconst { getBooleanOption, cppdb } = require('../util');\n\nmodule.exports = function defineAggregate(name, options) {\n\t// Validate arguments\n\tif (typeof name !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof options !== 'object' || options === null) throw new TypeError('Expected second argument to be an options object');\n\tif (!name) throw new TypeError('User-defined function name cannot be an empty string');\n\n\t// Interpret options\n\tconst start = 'start' in options ? options.start : null;\n\tconst step = getFunctionOption(options, 'step', true);\n\tconst inverse = getFunctionOption(options, 'inverse', false);\n\tconst result = getFunctionOption(options, 'result', false);\n\tconst safeIntegers = 'safeIntegers' in options ? +getBooleanOption(options, 'safeIntegers') : 2;\n\tconst deterministic = getBooleanOption(options, 'deterministic');\n\tconst directOnly = getBooleanOption(options, 'directOnly');\n\tconst varargs = getBooleanOption(options, 'varargs');\n\tlet argCount = -1;\n\n\t// Determine argument count\n\tif (!varargs) {\n\t\targCount = Math.max(getLength(step), inverse ? getLength(inverse) : 0);\n\t\tif (argCount > 0) argCount -= 1;\n\t\tif (argCount > 100) throw new RangeError('User-defined functions cannot have more than 100 arguments');\n\t}\n\n\tthis[cppdb].aggregate(start, step, inverse, result, name, argCount, safeIntegers, deterministic, directOnly);\n\treturn this;\n};\n\nconst getFunctionOption = (options, key, required) => {\n\tconst value = key in options ? options[key] : null;\n\tif (typeof value === 'function') return value;\n\tif (value != null) throw new TypeError(`Expected the \"${key}\" option to be a function`);\n\tif (required) throw new TypeError(`Missing required option \"${key}\"`);\n\treturn null;\n};\n\nconst getLength = ({ length }) => {\n\tif (Number.isInteger(length) && length >= 0) return length;\n\tthrow new TypeError('Expected function.length to be a positive integer');\n};\n","'use strict';\nconst { cppdb } = require('../util');\n\nmodule.exports = function defineTable(name, factory) {\n\t// Validate arguments\n\tif (typeof name !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (!name) throw new TypeError('Virtual table module name cannot be an empty string');\n\n\t// Determine whether the module is eponymous-only or not\n\tlet eponymous = false;\n\tif (typeof factory === 'object' && factory !== null) {\n\t\teponymous = true;\n\t\tfactory = defer(parseTableDefinition(factory, 'used', name));\n\t} else {\n\t\tif (typeof factory !== 'function') throw new TypeError('Expected second argument to be a function or a table definition object');\n\t\tfactory = wrapFactory(factory);\n\t}\n\n\tthis[cppdb].table(factory, name, eponymous);\n\treturn this;\n};\n\nfunction wrapFactory(factory) {\n\treturn function virtualTableFactory(moduleName, databaseName, tableName, ...args) {\n\t\tconst thisObject = {\n\t\t\tmodule: moduleName,\n\t\t\tdatabase: databaseName,\n\t\t\ttable: tableName,\n\t\t};\n\n\t\t// Generate a new table definition by invoking the factory\n\t\tconst def = apply.call(factory, thisObject, args);\n\t\tif (typeof def !== 'object' || def === null) {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" did not return a table definition object`);\n\t\t}\n\n\t\treturn parseTableDefinition(def, 'returned', moduleName);\n\t};\n}\n\nfunction parseTableDefinition(def, verb, moduleName) {\n\t// Validate required properties\n\tif (!hasOwnProperty.call(def, 'rows')) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition without a \"rows\" property`);\n\t}\n\tif (!hasOwnProperty.call(def, 'columns')) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition without a \"columns\" property`);\n\t}\n\n\t// Validate \"rows\" property\n\tconst rows = def.rows;\n\tif (typeof rows !== 'function' || Object.getPrototypeOf(rows) !== GeneratorFunctionPrototype) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"rows\" property (should be a generator function)`);\n\t}\n\n\t// Validate \"columns\" property\n\tlet columns = def.columns;\n\tif (!Array.isArray(columns) || !(columns = [...columns]).every(x => typeof x === 'string')) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"columns\" property (should be an array of strings)`);\n\t}\n\tif (columns.length !== new Set(columns).size) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with duplicate column names`);\n\t}\n\tif (!columns.length) {\n\t\tthrow new RangeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with zero columns`);\n\t}\n\n\t// Validate \"parameters\" property\n\tlet parameters;\n\tif (hasOwnProperty.call(def, 'parameters')) {\n\t\tparameters = def.parameters;\n\t\tif (!Array.isArray(parameters) || !(parameters = [...parameters]).every(x => typeof x === 'string')) {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"parameters\" property (should be an array of strings)`);\n\t\t}\n\t} else {\n\t\tparameters = inferParameters(rows);\n\t}\n\tif (parameters.length !== new Set(parameters).size) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with duplicate parameter names`);\n\t}\n\tif (parameters.length > 32) {\n\t\tthrow new RangeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with more than the maximum number of 32 parameters`);\n\t}\n\tfor (const parameter of parameters) {\n\t\tif (columns.includes(parameter)) {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with column \"${parameter}\" which was ambiguously defined as both a column and parameter`);\n\t\t}\n\t}\n\n\t// Validate \"safeIntegers\" option\n\tlet safeIntegers = 2;\n\tif (hasOwnProperty.call(def, 'safeIntegers')) {\n\t\tconst bool = def.safeIntegers;\n\t\tif (typeof bool !== 'boolean') {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"safeIntegers\" property (should be a boolean)`);\n\t\t}\n\t\tsafeIntegers = +bool;\n\t}\n\n\t// Validate \"directOnly\" option\n\tlet directOnly = false;\n\tif (hasOwnProperty.call(def, 'directOnly')) {\n\t\tdirectOnly = def.directOnly;\n\t\tif (typeof directOnly !== 'boolean') {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" ${verb} a table definition with an invalid \"directOnly\" property (should be a boolean)`);\n\t\t}\n\t}\n\n\t// Generate SQL for the virtual table definition\n\tconst columnDefinitions = [\n\t\t...parameters.map(identifier).map(str => `${str} HIDDEN`),\n\t\t...columns.map(identifier),\n\t];\n\treturn [\n\t\t`CREATE TABLE x(${columnDefinitions.join(', ')});`,\n\t\twrapGenerator(rows, new Map(columns.map((x, i) => [x, parameters.length + i])), moduleName),\n\t\tparameters,\n\t\tsafeIntegers,\n\t\tdirectOnly,\n\t];\n}\n\nfunction wrapGenerator(generator, columnMap, moduleName) {\n\treturn function* virtualTable(...args) {\n\t\t/*\n\t\t\tWe must defensively clone any buffers in the arguments, because\n\t\t\totherwise the generator could mutate one of them, which would cause\n\t\t\tus to return incorrect values for hidden columns, potentially\n\t\t\tcorrupting the database.\n\t\t */\n\t\tconst output = args.map(x => Buffer.isBuffer(x) ? Buffer.from(x) : x);\n\t\tfor (let i = 0; i < columnMap.size; ++i) {\n\t\t\toutput.push(null); // Fill with nulls to prevent gaps in array (v8 optimization)\n\t\t}\n\t\tfor (const row of generator(...args)) {\n\t\t\tif (Array.isArray(row)) {\n\t\t\t\textractRowArray(row, output, columnMap.size, moduleName);\n\t\t\t\tyield output;\n\t\t\t} else if (typeof row === 'object' && row !== null) {\n\t\t\t\textractRowObject(row, output, columnMap, moduleName);\n\t\t\t\tyield output;\n\t\t\t} else {\n\t\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" yielded something that isn't a valid row object`);\n\t\t\t}\n\t\t}\n\t};\n}\n\nfunction extractRowArray(row, output, columnCount, moduleName) {\n\tif (row.length !== columnCount) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" yielded a row with an incorrect number of columns`);\n\t}\n\tconst offset = output.length - columnCount;\n\tfor (let i = 0; i < columnCount; ++i) {\n\t\toutput[i + offset] = row[i];\n\t}\n}\n\nfunction extractRowObject(row, output, columnMap, moduleName) {\n\tlet count = 0;\n\tfor (const key of Object.keys(row)) {\n\t\tconst index = columnMap.get(key);\n\t\tif (index === undefined) {\n\t\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" yielded a row with an undeclared column \"${key}\"`);\n\t\t}\n\t\toutput[index] = row[key];\n\t\tcount += 1;\n\t}\n\tif (count !== columnMap.size) {\n\t\tthrow new TypeError(`Virtual table module \"${moduleName}\" yielded a row with missing columns`);\n\t}\n}\n\nfunction inferParameters({ length }) {\n\tif (!Number.isInteger(length) || length < 0) {\n\t\tthrow new TypeError('Expected function.length to be a positive integer');\n\t}\n\tconst params = [];\n\tfor (let i = 0; i < length; ++i) {\n\t\tparams.push(`$${i + 1}`);\n\t}\n\treturn params;\n}\n\nconst { hasOwnProperty } = Object.prototype;\nconst { apply } = Function.prototype;\nconst GeneratorFunctionPrototype = Object.getPrototypeOf(function*(){});\nconst identifier = str => `\"${str.replace(/\"/g, '\"\"')}\"`;\nconst defer = x => () => x;\n","'use strict';\nconst DatabaseInspection = function Database() {};\n\nmodule.exports = function inspect(depth, opts) {\n\treturn Object.assign(new DatabaseInspection(), this);\n};\n\n","'use strict';\nconst fs = require('fs');\nconst path = require('path');\nconst util = require('./util');\nconst SqliteError = require('./sqlite-error');\n\nlet DEFAULT_ADDON;\n\nfunction Database(filenameGiven, options) {\n\tif (new.target == null) {\n\t\treturn new Database(filenameGiven, options);\n\t}\n\n\t// Apply defaults\n\tlet buffer;\n\tif (Buffer.isBuffer(filenameGiven)) {\n\t\tbuffer = filenameGiven;\n\t\tfilenameGiven = ':memory:';\n\t}\n\tif (filenameGiven == null) filenameGiven = '';\n\tif (options == null) options = {};\n\n\t// Validate arguments\n\tif (typeof filenameGiven !== 'string') throw new TypeError('Expected first argument to be a string');\n\tif (typeof options !== 'object') throw new TypeError('Expected second argument to be an options object');\n\tif ('readOnly' in options) throw new TypeError('Misspelled option \"readOnly\" should be \"readonly\"');\n\tif ('memory' in options) throw new TypeError('Option \"memory\" was removed in v7.0.0 (use \":memory:\" filename instead)');\n\n\t// Interpret options\n\tconst filename = filenameGiven.trim();\n\tconst anonymous = filename === '' || filename === ':memory:';\n\tconst readonly = util.getBooleanOption(options, 'readonly');\n\tconst fileMustExist = util.getBooleanOption(options, 'fileMustExist');\n\tconst timeout = 'timeout' in options ? options.timeout : 5000;\n\tconst verbose = 'verbose' in options ? options.verbose : null;\n\tconst nativeBinding = 'nativeBinding' in options ? options.nativeBinding : null;\n\n\t// Validate interpreted options\n\tif (readonly && anonymous && !buffer) throw new TypeError('In-memory/temporary databases cannot be readonly');\n\tif (!Number.isInteger(timeout) || timeout < 0) throw new TypeError('Expected the \"timeout\" option to be a positive integer');\n\tif (timeout > 0x7fffffff) throw new RangeError('Option \"timeout\" cannot be greater than 2147483647');\n\tif (verbose != null && typeof verbose !== 'function') throw new TypeError('Expected the \"verbose\" option to be a function');\n\tif (nativeBinding != null && typeof nativeBinding !== 'string' && typeof nativeBinding !== 'object') throw new TypeError('Expected the \"nativeBinding\" option to be a string or addon object');\n\n\t// Load the native addon\n\tlet addon;\n\tif (nativeBinding == null) {\n\t\taddon = DEFAULT_ADDON || (DEFAULT_ADDON = require('bindings')('better_sqlite3.node'));\n\t} else if (typeof nativeBinding === 'string') {\n\t\t// See <https://webpack.js.org/api/module-variables/#__non_webpack_require__-webpack-specific>\n\t\tconst requireFunc = typeof __non_webpack_require__ === 'function' ? __non_webpack_require__ : require;\n\t\taddon = requireFunc(path.resolve(nativeBinding).replace(/(\\.node)?$/, '.node'));\n\t} else {\n\t\t// See <https://github.com/WiseLibs/better-sqlite3/issues/972>\n\t\taddon = nativeBinding;\n\t}\n\n\tif (!addon.isInitialized) {\n\t\taddon.setErrorConstructor(SqliteError);\n\t\taddon.isInitialized = true;\n\t}\n\n\t// Make sure the specified directory exists\n\tif (!anonymous && !filename.startsWith('file:') && !fs.existsSync(path.dirname(filename))) {\n\t\tthrow new TypeError('Cannot open database because the directory does not exist');\n\t}\n\n\tObject.defineProperties(this, {\n\t\t[util.cppdb]: { value: new addon.Database(filename, filenameGiven, anonymous, readonly, fileMustExist, timeout, verbose || null, buffer || null) },\n\t\t...wrappers.getters,\n\t});\n}\n\nconst wrappers = require('./methods/wrappers');\nDatabase.prototype.prepare = wrappers.prepare;\nDatabase.prototype.transaction = require('./methods/transaction');\nDatabase.prototype.pragma = require('./methods/pragma');\nDatabase.prototype.backup = require('./methods/backup');\nDatabase.prototype.serialize = require('./methods/serialize');\nDatabase.prototype.function = require('./methods/function');\nDatabase.prototype.aggregate = require('./methods/aggregate');\nDatabase.prototype.table = require('./methods/table');\nDatabase.prototype.loadExtension = wrappers.loadExtension;\nDatabase.prototype.exec = wrappers.exec;\nDatabase.prototype.close = wrappers.close;\nDatabase.prototype.defaultSafeIntegers = wrappers.defaultSafeIntegers;\nDatabase.prototype.unsafeMode = wrappers.unsafeMode;\nDatabase.prototype[util.inspect] = require('./methods/inspect');\n\nmodule.exports = Database;\n","'use strict';\nmodule.exports = require('./database');\nmodule.exports.SqliteError = require('./sqlite-error');\n","import { DatabaseType } from './type.js';\n/** @ts-ignore */\nimport { Database } from 'better-sqlite3';\nimport type { RunnableConfig } from '@langchain/core/runnables';\nimport {\n BaseCheckpointSaver,\n type Checkpoint,\n type CheckpointListOptions,\n type CheckpointTuple,\n type SerializerProtocol,\n type PendingWrite,\n type CheckpointMetadata,\n TASKS,\n copyCheckpoint,\n maxChannelVersion,\n} from '@langchain/langgraph-checkpoint';\n\ninterface CheckpointRow {\n checkpoint: string;\n metadata: string;\n parent_checkpoint_id?: string;\n thread_id: string;\n checkpoint_id: string;\n checkpoint_ns?: string;\n type?: string;\n pending_writes: string;\n}\n\ninterface PendingWriteColumn {\n task_id: string;\n channel: string;\n type: string;\n value: string;\n}\n\ninterface PendingSendColumn {\n type: string;\n value: string;\n}\n\n// In the `SqliteSaver.list` method, we need to sanitize the `options.filter` argument to ensure it only contains keys\n// that are part of the `CheckpointMetadata` type. The lines below ensure that we get compile-time errors if the list\n// of keys that we use is out of sync with the `CheckpointMetadata` type.\nconst checkpointMetadataKeys = ['source', 'step', 'parents'] as const;\n\ntype CheckKeys<T, K extends readonly (keyof T)[]> = [K[number]] extends [keyof T]\n ? [keyof T] extends [K[number]]\n ? K\n : never\n : never;\n\nfunction validateKeys<T, K extends readonly (keyof T)[]>(keys: CheckKeys<T, K>): K {\n return keys;\n}\n\n// If this line fails to compile, the list of keys that we use in the `SqliteSaver.list` method is out of sync with the\n// `CheckpointMetadata` type. In that case, just update `checkpointMetadataKeys` to contain all the keys in\n// `CheckpointMetadata`\nconst validCheckpointMetadataKeys = validateKeys<CheckpointMetadata, typeof checkpointMetadataKeys>(\n checkpointMetadataKeys,\n);\n\nfunction prepareSql(db: DatabaseType, checkpointId: boolean) {\n const sql = `\n SELECT\n thread_id,\n checkpoint_ns,\n checkpoint_id,\n parent_checkpoint_id,\n type,\n checkpoint,\n metadata,\n (\n SELECT\n json_group_array(\n json_object(\n 'task_id', pw.task_id,\n 'channel', pw.channel,\n 'type', pw.type,\n 'value', CAST(pw.value AS TEXT)\n )\n )\n FROM writes as pw\n WHERE pw.thread_id = checkpoints.thread_id\n AND pw.checkpoint_ns = checkpoints.checkpoint_ns\n AND pw.checkpoint_id = checkpoints.checkpoint_id\n ) as pending_writes,\n (\n SELECT\n json_group_array(\n json_object(\n 'type', ps.type,\n 'value', CAST(ps.value AS TEXT)\n )\n )\n FROM writes as ps\n WHERE ps.thread_id = checkpoints.thread_id\n AND ps.checkpoint_ns = checkpoints.checkpoint_ns\n AND ps.checkpoint_id = checkpoints.parent_checkpoint_id\n AND ps.channel = '${TASKS}'\n ORDER BY ps.idx\n ) as pending_sends\n FROM checkpoints\n WHERE thread_id = ? AND checkpoint_ns = ? ${\n checkpointId ? 'AND checkpoint_id = ?' : 'ORDER BY checkpoint_id DESC LIMIT 1'\n }`;\n\n return db.prepare(sql);\n}\n\nexport class SqliteSaver extends BaseCheckpointSaver {\n db: DatabaseType;\n\n protected isSetup: boolean;\n\n protected withoutCheckpoint: any;\n\n protected withCheckpoint: any;\n\n constructor(db: DatabaseType, serde?: SerializerProtocol) {\n super(serde);\n this.db = db;\n this.isSetup = false;\n }\n\n static fromConnString(connStringOrLocalPath: string): SqliteSaver {\n return new SqliteSaver(new Database(connStringOrLocalPath));\n }\n\n protected setup(): void {\n if (this.isSetup) {\n return;\n }\n\n // this.db.pragma('journal_mode=WAL');\n this.db.exec('PRAGMA journal_mode = WAL;');\n this.db.exec(`\nCREATE TABLE IF NOT EXISTS checkpoints (\n thread_id TEXT NOT NULL,\n checkpoint_ns TEXT NOT NULL DEFAULT '',\n checkpoint_id TEXT NOT NULL,\n parent_checkpoint_id TEXT,\n type TEXT,\n checkpoint BLOB,\n metadata BLOB,\n PRIMARY KEY (thread_id, checkpoint_ns, checkpoint_id)\n);`);\n this.db.exec(`\nCREATE TABLE IF NOT EXISTS writes (\n thread_id TEXT NOT NULL,\n checkpoint_ns TEXT NOT NULL DEFAULT '',\n checkpoint_id TEXT NOT NULL,\n task_id TEXT NOT NULL,\n idx INTEGER NOT NULL,\n channel TEXT NOT NULL,\n type TEXT,\n value BLOB,\n PRIMARY KEY (thread_id, checkpoint_ns, checkpoint_id, task_id, idx)\n);`);\n\n this.withoutCheckpoint = prepareSql(this.db, false);\n this.withCheckpoint = prepareSql(this.db, true);\n\n this.isSetup = true;\n }\n\n async getTuple(config: RunnableConfig): Promise<CheckpointTuple | undefined> {\n this.setup();\n const { thread_id, checkpoint_ns = '', checkpoint_id } = config.configurable ?? {};\n\n const args = [thread_id, checkpoint_ns];\n if (checkpoint_id) args.push(checkpoint_id);\n\n const stm = checkpoint_id ? this.withCheckpoint : this.withoutCheckpoint;\n const row = stm.get(...args) as CheckpointRow;\n if (row === undefined || row === null) return undefined;\n\n let finalConfig = config;\n\n if (!checkpoint_id) {\n finalConfig = {\n configurable: {\n thread_id: row.thread_id,\n checkpoint_ns,\n checkpoint_id: row.checkpoint_id,\n },\n };\n }\n\n if (\n finalConfig.configurable?.thread_id === undefined ||\n finalConfig.configurable?.checkpoint_id === undefined\n ) {\n throw new Error('Missing thread_id or checkpoint_id');\n }\n\n const pendingWrites = await Promise.all(\n (JSON.parse(row.pending_writes) as PendingWriteColumn[]).map(async (write) => {\n return [\n write.task_id,\n write.channel,\n await this.serde.loadsTyped(write.type ?? 'json', write.value ?? ''),\n ] as [string, string, unknown];\n }),\n );\n\n const checkpoint = (await this.serde.loadsTyped(row.type ?? 'json', row.checkpoint)) as Checkpoint;\n\n if (checkpoint.v < 4 && row.parent_checkpoint_id != null) {\n await this.migratePendingSends(checkpoint, row.thread_id, row.parent_checkpoint_id);\n }\n\n return {\n checkpoint,\n config: finalConfig,\n metadata: (await this.serde.loadsTyped(row.type ?? 'json', row.metadata)) as CheckpointMetadata,\n parentConfig: row.parent_checkpoint_id\n ? {\n configurable: {\n thread_id: row.thread_id,\n checkpoint_ns,\n checkpoint_id: row.parent_checkpoint_id,\n },\n }\n : undefined,\n pendingWrites,\n };\n }\n\n async *list(config: RunnableConfig, options?: CheckpointListOptions): AsyncGenerator<CheckpointTuple> {\n const { limit, before, filter } = options ?? {};\n this.setup();\n const thread_id = config.configurable?.thread_id;\n const checkpoint_ns = config.configurable?.checkpoint_ns;\n let sql = `\n SELECT\n thread_id,\n checkpoint_ns,\n checkpoint_id,\n parent_checkpoint_id,\n type,\n checkpoint,\n metadata,\n (\n SELECT\n json_group_array(\n json_object(\n 'task_id', pw.task_id,\n 'channel', pw.channel,\n 'type', pw.type,\n 'value', CAST(pw.value AS TEXT)\n )\n )\n FROM writes as pw\n WHERE pw.thread_id = checkpoints.thread_id\n AND pw.checkpoint_ns = checkpoints.checkpoint_ns\n AND pw.checkpoint_id = checkpoints.checkpoint_id\n ) as pending_writes,\n (\n SELECT\n json_group_array(\n json_object(\n 'type', ps.type,\n 'value', CAST(ps.value AS TEXT)\n )\n )\n FROM writes as ps\n WHERE ps.thread_id = checkpoints.thread_id\n AND ps.checkpoint_ns = checkpoints.checkpoint_ns\n AND ps.checkpoint_id = checkpoints.parent_checkpoint_id\n AND ps.channel = '${TASKS}'\n ORDER BY ps.idx\n ) as pending_sends\n FROM checkpoints\\n`;\n\n const whereClause: string[] = [];\n\n if (thread_id) {\n whereClause.push('thread_id = ?');\n }\n\n if (checkpoint_ns !== undefined && checkpoint_ns !== null) {\n whereClause.push('checkpoint_ns = ?');\n }\n\n if (before?.configurable?.checkpoint_id !== undefined) {\n whereClause.push('checkpoint_id < ?');\n }\n\n const sanitizedFilter = Object.fromEntries(\n Object.entries(filter ?? {}).filter(\n ([key, value]) =>\n value !== undefined && validCheckpointMetadataKeys.includes(key as keyof CheckpointMetadata),\n ),\n );\n\n whereClause.push(\n ...Object.entries(sanitizedFilter).map(([key]) => `jsonb(CAST(metadata AS TEXT))->'$.${key}' = ?`),\n );\n if (whereClause.length > 0) {\n sql += `WHERE\\n ${whereClause.join(' AND\\n ')}\\n`;\n }\n\n sql += '\\nORDER BY checkpoint_id DESC';\n\n if (limit) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sql += ` LIMIT ${parseInt(limit as any, 10)}`; // parseInt here (with cast to make TS happy) to sanitize input, as limit may be user-provided\n }\n\n const args = [\n thread_id,\n checkpoint_ns,\n before?.configurable?.checkpoint_id,\n ...Object.values(sanitizedFilter).map((value) => JSON.stringify(value)),\n ].filter((value) => value !== undefined && value !== null);\n\n const rows: CheckpointRow[] = this.db.prepare(sql).all(...args) as CheckpointRow[];\n\n if (rows) {\n for (const row of rows) {\n const pendingWrites = await Promise.all(\n (JSON.parse(row.pending_writes) as PendingWriteColumn[]).map(async (write) => {\n return [\n write.task_id,\n write.channel,\n await this.serde.loadsTyped(write.type ?? 'json', write.value ?? ''),\n ] as [string, string, unknown];\n }),\n );\n\n const checkpoint = (await this.serde.loadsTyped(row.type ?? 'json', row.checkpoint)) as Checkpoint;\n\n if (checkpoint.v < 4 && row.parent_checkpoint_id != null) {\n await this.migratePendingSends(checkpoint, row.thread_id, row.parent_checkpoint_id);\n }\n\n yield {\n config: {\n configurable: {\n thread_id: row.thread_id,\n checkpoint_ns: row.checkpoint_ns,\n checkpoint_id: row.checkpoint_id,\n },\n },\n checkpoint,\n metadata: (await this.serde.loadsTyped(row.type ?? 'json', row.metadata)) as CheckpointMetadata,\n parentConfig: row.parent_checkpoint_id\n ? {\n configurable: {\n thread_id: row.thread_id,\n checkpoint_ns: row.checkpoint_ns,\n checkpoint_id: row.parent_checkpoint_id,\n },\n }\n : undefined,\n pendingWrites,\n };\n }\n }\n }\n\n async put(config: RunnableConfig, checkpoint: Checkpoint, metadata: CheckpointMetadata): Promise<RunnableConfig> {\n this.setup();\n\n if (!config.configurable) {\n throw new Error('Empty configuration supplied.');\n }\n\n const thread_id = config.configurable?.thread_id;\n const checkpoint_ns = config.configurable?.checkpoint_ns ?? '';\n const parent_checkpoint_id = config.configurable?.checkpoint_id;\n\n if (!thread_id) {\n throw new Error(`Missing \"thread_id\" field in passed \"config.configurable\".`);\n }\n\n const preparedCheckpoint: Partial<Checkpoint> = copyCheckpoint(checkpoint);\n\n const [[type1, serializedCheckpoint], [type2, serializedMetadata]] = await Promise.all([\n this.serde.dumpsTyped(preparedCheckpoint),\n this.serde.dumpsTyped(metadata),\n ]);\n\n if (type1 !== type2) {\n throw new Error('Failed to serialized checkpoint and metadata to the same type.');\n }\n const row = [\n thread_id,\n checkpoint_ns,\n checkpoint.id,\n parent_checkpoint_id,\n type1,\n serializedCheckpoint,\n serializedMetadata,\n ];\n\n this.db\n .prepare(\n `INSERT OR REPLACE INTO checkpoints (thread_id, checkpoint_ns, checkpoint_id, parent_checkpoint_id, type, checkpoint, metadata) VALUES (?, ?, ?, ?, ?, ?, ?)`,\n )\n .run(...row);\n\n return {\n configurable: {\n thread_id,\n checkpoint_ns,\n checkpoint_id: checkpoint.id,\n },\n };\n }\n\n async putWrites(config: RunnableConfig, writes: PendingWrite[], taskId: string): Promise<void> {\n this.setup();\n\n if (!config.configurable) {\n throw new Error('Empty configuration supplied.');\n }\n\n if (!config.configurable?.thread_id) {\n throw new Error('Missing thread_id field in config.configurable.');\n }\n\n if (!config.configurable?.checkpoint_id) {\n throw new Error('Missing checkpoint_id field in config.configurable.');\n }\n\n const stmt = this.db.prepare(`\n INSERT OR REPLACE INTO writes \n (thread_id, checkpoint_ns, checkpoint_id, task_id, idx, channel, type, value) \n VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n `);\n\n const transaction = this.db.transaction((rows) => {\n for (const row of rows) {\n stmt.run(...row);\n }\n });\n\n const rows = await Promise.all(\n writes.map(async (write, idx) => {\n const [type, serializedWrite] = await this.serde.dumpsTyped(write[1]);\n return [\n config.configurable?.thread_id,\n config.configurable?.checkpoint_ns,\n config.configurable?.checkpoint_id,\n taskId,\n idx,\n write[0],\n type,\n serializedWrite,\n ];\n }),\n );\n\n transaction(rows);\n }\n\n async deleteThread(threadId: string) {\n const transaction = this.db.transaction(() => {\n this.db.prepare(`DELETE FROM checkpoints WHERE thread_id = ?`).run(threadId);\n this.db.prepare(`DELETE FROM writes WHERE thread_id = ?`).run(threadId);\n });\n\n transaction();\n }\n\n protected async migratePendingSends(checkpoint: Checkpoint, threadId: string, parentCheckpointId: string) {\n const { pending_sends } = this.db\n .prepare(\n `\n SELECT\n checkpoint_id,\n json_group_array(\n json_object(\n 'type', ps.type,\n 'value', CAST(ps.value AS TEXT)\n )\n ) as pending_sends\n FROM writes as ps\n WHERE ps.thread_id = ?\n AND ps.checkpoint_id = ?\n AND ps.channel = '${TASKS}'\n ORDER BY ps.idx\n `,\n )\n .get(threadId, parentCheckpointId) as { pending_sends: string };\n\n const mutableCheckpoint = checkpoint;\n\n // add pending sends to checkpoint\n mutableCheckpoint.channel_values ??= {};\n mutableCheckpoint.channel_values[TASKS] = await Promise.all(\n JSON.parse(pending_sends).map(({ type, value }: PendingSendColumn) => this.serde.loadsTyped(type, value)),\n );\n\n // add to versions\n mutableCheckpoint.channel_versions[TASKS] =\n Object.keys(checkpoint.channel_versions).length > 0\n ? maxChannelVersion(...Object.values(checkpoint.channel_versions))\n : this.getNextVersion(undefined);\n }\n}\n"],"names":["require$$0","require$$2","require","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","libModule","require$$1","Database","rows"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]}
@@ -1,4 +1,4 @@
1
- import { a as streamState, L as LangGraphGlobal, g as getGraph, G as GRAPHS } from './stream-BwdFJfJb.js';
1
+ import { a as streamState, L as LangGraphGlobal, g as getGraph, G as GRAPHS } from './stream-SJdqjfOM.js';
2
2
 
3
3
  const AssistantEndpoint = {
4
4
  async search(query) {
@@ -87,4 +87,4 @@ const createEndpoint = () => {
87
87
  };
88
88
 
89
89
  export { AssistantEndpoint as A, createEndpoint as c };
90
- //# sourceMappingURL=createEndpoint-C-7CCNeN.js.map
90
+ //# sourceMappingURL=createEndpoint-DHnODS67.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createEndpoint-C-7CCNeN.js","sources":["../src/createEndpoint.ts"],"sourcesContent":["import { StreamEvent } from '@langchain/core/tracers/log_stream';\nimport { streamState } from './graph/stream.js';\nimport { Assistant, Run, StreamMode, Metadata, AssistantGraph } from '@langchain/langgraph-sdk';\nimport { getGraph, GRAPHS } from './utils/getGraph.js';\nimport { LangGraphGlobal } from './global.js';\nimport { AssistantSortBy, CancelAction, ILangGraphClient, RunStatus, SortOrder, StreamInputData } from './types.js';\nexport { registerGraph } from './utils/getGraph.js';\n\nexport const AssistantEndpoint: ILangGraphClient['assistants'] = {\n async search(query?: {\n graphId?: string;\n metadata?: Metadata;\n limit?: number;\n offset?: number;\n sortBy?: AssistantSortBy;\n sortOrder?: SortOrder;\n }): Promise<Assistant[]> {\n if (query?.graphId) {\n return [\n {\n assistant_id: query.graphId,\n graph_id: query.graphId,\n config: {},\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n metadata: {},\n version: 1,\n name: query.graphId,\n description: '',\n } as Assistant,\n ];\n }\n return Object.entries(GRAPHS).map(\n ([graphId, _]) =>\n ({\n assistant_id: graphId,\n graph_id: graphId,\n config: {},\n metadata: {},\n version: 1,\n name: graphId,\n description: '',\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n } as Assistant),\n );\n },\n async getGraph(assistantId: string, options?: { xray?: boolean | number }): Promise<AssistantGraph> {\n const config = {};\n const graph = await getGraph(assistantId, config);\n const drawable = await graph.getGraphAsync({\n ...config,\n xray: options?.xray ?? undefined,\n });\n return drawable.toJSON() as AssistantGraph;\n },\n};\n\nexport const createEndpoint = () => {\n const getThreads = () => {\n return LangGraphGlobal.globalThreadsManager;\n };\n return {\n assistants: AssistantEndpoint,\n get threads() {\n return LangGraphGlobal.globalThreadsManager;\n },\n runs: {\n list(\n threadId: string,\n options?: {\n limit?: number;\n offset?: number;\n status?: RunStatus;\n },\n ): Promise<Run[]> {\n return getThreads().listRuns(threadId, options);\n },\n async cancel(threadId: string, runId: string, wait?: boolean, action?: CancelAction): Promise<void> {\n return LangGraphGlobal.globalMessageQueue.cancelQueue(runId);\n },\n async *stream(threadId: string, assistantId: string, payload: StreamInputData) {\n payload.config = {\n ...(payload.config ?? {}),\n configurable: {\n ...(payload.config?.configurable ?? {}),\n graph_id: assistantId,\n thread_id: threadId,\n },\n };\n const threads = getThreads();\n for await (const data of streamState(\n threads,\n threads.createRun(threadId, assistantId, payload),\n payload,\n {\n attempt: 0,\n getGraph,\n },\n )) {\n yield data;\n }\n },\n joinStream(\n threadId: string,\n runId: string,\n options?:\n | {\n signal?: AbortSignal;\n cancelOnDisconnect?: boolean;\n lastEventId?: string;\n streamMode?: StreamMode | StreamMode[];\n }\n | AbortSignal,\n ): AsyncGenerator<{ id?: string; event: StreamEvent; data: any }> {\n throw new Error('Function not implemented.');\n },\n },\n };\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createEndpoint-DHnODS67.js","sources":["../src/createEndpoint.ts"],"sourcesContent":["import { StreamEvent } from '@langchain/core/tracers/log_stream';\nimport { streamState } from './graph/stream.js';\nimport { Assistant, Run, StreamMode, Metadata, AssistantGraph } from '@langchain/langgraph-sdk';\nimport { getGraph, GRAPHS } from './utils/getGraph.js';\nimport { LangGraphGlobal } from './global.js';\nimport { AssistantSortBy, CancelAction, ILangGraphClient, RunStatus, SortOrder, StreamInputData } from './types.js';\nexport { registerGraph } from './utils/getGraph.js';\n\nexport const AssistantEndpoint: ILangGraphClient['assistants'] = {\n async search(query?: {\n graphId?: string;\n metadata?: Metadata;\n limit?: number;\n offset?: number;\n sortBy?: AssistantSortBy;\n sortOrder?: SortOrder;\n }): Promise<Assistant[]> {\n if (query?.graphId) {\n return [\n {\n assistant_id: query.graphId,\n graph_id: query.graphId,\n config: {},\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n metadata: {},\n version: 1,\n name: query.graphId,\n description: '',\n } as Assistant,\n ];\n }\n return Object.entries(GRAPHS).map(\n ([graphId, _]) =>\n ({\n assistant_id: graphId,\n graph_id: graphId,\n config: {},\n metadata: {},\n version: 1,\n name: graphId,\n description: '',\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n } as Assistant),\n );\n },\n async getGraph(assistantId: string, options?: { xray?: boolean | number }): Promise<AssistantGraph> {\n const config = {};\n const graph = await getGraph(assistantId, config);\n const drawable = await graph.getGraphAsync({\n ...config,\n xray: options?.xray ?? undefined,\n });\n return drawable.toJSON() as AssistantGraph;\n },\n};\n\nexport const createEndpoint = () => {\n const getThreads = () => {\n return LangGraphGlobal.globalThreadsManager;\n };\n return {\n assistants: AssistantEndpoint,\n get threads() {\n return LangGraphGlobal.globalThreadsManager;\n },\n runs: {\n list(\n threadId: string,\n options?: {\n limit?: number;\n offset?: number;\n status?: RunStatus;\n },\n ): Promise<Run[]> {\n return getThreads().listRuns(threadId, options);\n },\n async cancel(threadId: string, runId: string, wait?: boolean, action?: CancelAction): Promise<void> {\n return LangGraphGlobal.globalMessageQueue.cancelQueue(runId);\n },\n async *stream(threadId: string, assistantId: string, payload: StreamInputData) {\n payload.config = {\n ...(payload.config ?? {}),\n configurable: {\n ...(payload.config?.configurable ?? {}),\n graph_id: assistantId,\n thread_id: threadId,\n },\n };\n const threads = getThreads();\n for await (const data of streamState(\n threads,\n threads.createRun(threadId, assistantId, payload),\n payload,\n {\n attempt: 0,\n getGraph,\n },\n )) {\n yield data;\n }\n },\n joinStream(\n threadId: string,\n runId: string,\n options?:\n | {\n signal?: AbortSignal;\n cancelOnDisconnect?: boolean;\n lastEventId?: string;\n streamMode?: StreamMode | StreamMode[];\n }\n | AbortSignal,\n ): AsyncGenerator<{ id?: string; event: StreamEvent; data: any }> {\n throw new Error('Function not implemented.');\n },\n },\n };\n};\n"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- export { A as AssistantEndpoint, c as createEndpoint } from './createEndpoint-C-7CCNeN.js';
2
- export { L as LangGraphGlobal, r as registerGraph } from './stream-BwdFJfJb.js';
1
+ export { A as AssistantEndpoint, c as createEndpoint } from './createEndpoint-DHnODS67.js';
2
+ export { L as LangGraphGlobal, r as registerGraph } from './stream-SJdqjfOM.js';
3
3
  import { StateGraph } from '@langchain/langgraph';
4
4
 
5
5
  const createEntrypointGraph = ({
@@ -0,0 +1,67 @@
1
+ import { Kysely, PostgresDialect, sql } from 'kysely';
2
+
3
+ class PostgresAdapter {
4
+ constructor(pool) {
5
+ this.pool = pool;
6
+ this.db = new Kysely({
7
+ dialect: new PostgresDialect({
8
+ pool
9
+ })
10
+ });
11
+ }
12
+ db;
13
+ dateToDb(date) {
14
+ return date;
15
+ }
16
+ dbToDate(dbValue) {
17
+ return dbValue instanceof Date ? dbValue : new Date(dbValue);
18
+ }
19
+ jsonToDb(obj) {
20
+ return obj;
21
+ }
22
+ dbToJson(dbValue) {
23
+ return dbValue;
24
+ }
25
+ buildJsonQuery(db, field, key, value) {
26
+ return sql`${sql.ref(field)}->>${sql.lit(key)} = ${sql.lit(JSON.stringify(value))}`;
27
+ }
28
+ now() {
29
+ return /* @__PURE__ */ new Date();
30
+ }
31
+ async createTables(db) {
32
+ await sql`
33
+ CREATE TABLE IF NOT EXISTS threads (
34
+ thread_id TEXT PRIMARY KEY,
35
+ created_at TIMESTAMP NOT NULL,
36
+ updated_at TIMESTAMP NOT NULL,
37
+ metadata JSONB NOT NULL DEFAULT '{}',
38
+ status TEXT NOT NULL DEFAULT 'idle',
39
+ values JSONB,
40
+ interrupts JSONB NOT NULL DEFAULT '{}'
41
+ )
42
+ `.execute(db);
43
+ await sql`
44
+ CREATE TABLE IF NOT EXISTS runs (
45
+ run_id TEXT PRIMARY KEY,
46
+ thread_id TEXT NOT NULL,
47
+ assistant_id TEXT NOT NULL,
48
+ created_at TIMESTAMP NOT NULL,
49
+ updated_at TIMESTAMP NOT NULL,
50
+ status TEXT NOT NULL DEFAULT 'pending',
51
+ metadata JSONB NOT NULL DEFAULT '{}',
52
+ multitask_strategy TEXT NOT NULL DEFAULT 'reject',
53
+ FOREIGN KEY (thread_id) REFERENCES threads(thread_id) ON DELETE CASCADE
54
+ )
55
+ `.execute(db);
56
+ }
57
+ async createIndexes(db) {
58
+ await sql`CREATE INDEX IF NOT EXISTS idx_threads_status ON threads(status)`.execute(db);
59
+ await sql`CREATE INDEX IF NOT EXISTS idx_threads_created_at ON threads(created_at)`.execute(db);
60
+ await sql`CREATE INDEX IF NOT EXISTS idx_threads_updated_at ON threads(updated_at)`.execute(db);
61
+ await sql`CREATE INDEX IF NOT EXISTS idx_runs_thread_id ON runs(thread_id)`.execute(db);
62
+ await sql`CREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status)`.execute(db);
63
+ }
64
+ }
65
+
66
+ export { PostgresAdapter };
67
+ //# sourceMappingURL=pg-adapter-BFtir1GE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg-adapter-BFtir1GE.js","sources":["../src/storage/kysely/pg-adapter.ts"],"sourcesContent":["import { Kysely, sql, SqlBool, Expression, PostgresDialect } from 'kysely';\nimport { DatabaseAdapter } from './adapter';\nimport { Database } from './types';\nimport { Pool } from 'pg';\n\n/**\n * PostgreSQL 适配器\n * - 时间类型:原生 TIMESTAMP\n * - JSON 类型:JSONB\n * - JSON 查询:使用 -> 和 ->> 操作符\n */\nexport class PostgresAdapter implements DatabaseAdapter {\n db: Kysely<Database>;\n constructor(public pool: Pool) {\n this.db = new Kysely<Database>({\n dialect: new PostgresDialect({\n pool: pool,\n }),\n });\n }\n dateToDb(date: Date): Date {\n // PostgreSQL 支持原生 Date 对象\n return date;\n }\n\n dbToDate(dbValue: any): Date {\n // PostgreSQL 返回的时间已经是 Date 对象或可以直接转换\n return dbValue instanceof Date ? dbValue : new Date(dbValue);\n }\n\n jsonToDb(obj: any): any {\n // PostgreSQL 的 kysely 驱动会自动处理 JSON 序列化\n return obj;\n }\n\n dbToJson(dbValue: any): any {\n // PostgreSQL 的 kysely 驱动会自动处理 JSON 反序列化\n return dbValue;\n }\n\n buildJsonQuery(\n db: Kysely<Database>,\n field: 'metadata' | 'interrupts',\n key: string,\n value: any,\n ): Expression<SqlBool> {\n // PostgreSQL 使用 -> 操作符访问 JSONB 字段\n // 注意:-> 返回 JSONB,->> 返回 text\n return sql<boolean>`${sql.ref(field)}->>${sql.lit(key)} = ${sql.lit(JSON.stringify(value))}`;\n }\n\n now(): Date {\n return new Date();\n }\n\n async createTables(db: Kysely<Database>): Promise<void> {\n // 创建 threads 表\n await sql`\n CREATE TABLE IF NOT EXISTS threads (\n thread_id TEXT PRIMARY KEY,\n created_at TIMESTAMP NOT NULL,\n updated_at TIMESTAMP NOT NULL,\n metadata JSONB NOT NULL DEFAULT '{}',\n status TEXT NOT NULL DEFAULT 'idle',\n values JSONB,\n interrupts JSONB NOT NULL DEFAULT '{}'\n )\n `.execute(db);\n\n // 创建 runs 表\n await sql`\n CREATE TABLE IF NOT EXISTS runs (\n run_id TEXT PRIMARY KEY,\n thread_id TEXT NOT NULL,\n assistant_id TEXT NOT NULL,\n created_at TIMESTAMP NOT NULL,\n updated_at TIMESTAMP NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending',\n metadata JSONB NOT NULL DEFAULT '{}',\n multitask_strategy TEXT NOT NULL DEFAULT 'reject',\n FOREIGN KEY (thread_id) REFERENCES threads(thread_id) ON DELETE CASCADE\n )\n `.execute(db);\n }\n\n async createIndexes(db: Kysely<Database>): Promise<void> {\n await sql`CREATE INDEX IF NOT EXISTS idx_threads_status ON threads(status)`.execute(db);\n await sql`CREATE INDEX IF NOT EXISTS idx_threads_created_at ON threads(created_at)`.execute(db);\n await sql`CREATE INDEX IF NOT EXISTS idx_threads_updated_at ON threads(updated_at)`.execute(db);\n await sql`CREATE INDEX IF NOT EXISTS idx_runs_thread_id ON runs(thread_id)`.execute(db);\n await sql`CREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status)`.execute(db);\n }\n}\n"],"names":[],"mappings":";;AAWO,MAAM,eAAA,CAA2C;AAAA,EAEpD,YAAmB,IAAA,EAAY;AAAZ,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACf,IAAA,IAAA,CAAK,EAAA,GAAK,IAAI,MAAA,CAAiB;AAAA,MAC3B,OAAA,EAAS,IAAI,eAAA,CAAgB;AAAA,QACzB;AAAA,OACH;AAAA,KACJ,CAAA;AAAA,EACL;AAAA,EAPA,EAAA;AAAA,EAQA,SAAS,IAAA,EAAkB;AAEvB,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,SAAS,OAAA,EAAoB;AAEzB,IAAA,OAAO,OAAA,YAAmB,IAAA,GAAO,OAAA,GAAU,IAAI,KAAK,OAAO,CAAA;AAAA,EAC/D;AAAA,EAEA,SAAS,GAAA,EAAe;AAEpB,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EAEA,SAAS,OAAA,EAAmB;AAExB,IAAA,OAAO,OAAA;AAAA,EACX;AAAA,EAEA,cAAA,CACI,EAAA,EACA,KAAA,EACA,GAAA,EACA,KAAA,EACmB;AAGnB,IAAA,OAAO,MAAe,GAAA,CAAI,GAAA,CAAI,KAAK,CAAC,MAAM,GAAA,CAAI,GAAA,CAAI,GAAG,CAAC,MAAM,GAAA,CAAI,GAAA,CAAI,KAAK,SAAA,CAAU,KAAK,CAAC,CAAC,CAAA,CAAA;AAAA,EAC9F;AAAA,EAEA,GAAA,GAAY;AACR,IAAA,2BAAW,IAAA,EAAK;AAAA,EACpB;AAAA,EAEA,MAAM,aAAa,EAAA,EAAqC;AAEpD,IAAA,MAAM,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA,CAUJ,QAAQ,EAAE,CAAA;AAGZ,IAAA,MAAM,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA,CAYJ,QAAQ,EAAE,CAAA;AAAA,EAChB;AAAA,EAEA,MAAM,cAAc,EAAA,EAAqC;AACrD,IAAA,MAAM,GAAA,CAAA,gEAAA,CAAA,CAAsE,QAAQ,EAAE,CAAA;AACtF,IAAA,MAAM,GAAA,CAAA,wEAAA,CAAA,CAA8E,QAAQ,EAAE,CAAA;AAC9F,IAAA,MAAM,GAAA,CAAA,wEAAA,CAAA,CAA8E,QAAQ,EAAE,CAAA;AAC9F,IAAA,MAAM,GAAA,CAAA,gEAAA,CAAA,CAAsE,QAAQ,EAAE,CAAA;AACtF,IAAA,MAAM,GAAA,CAAA,0DAAA,CAAA,CAAgE,QAAQ,EAAE,CAAA;AAAA,EACpF;AACJ;;;;"}
@@ -1,4 +1,4 @@
1
- import { B as BaseStreamQueue, C as CancelEventMessage } from './stream-BwdFJfJb.js';
1
+ import { B as BaseStreamQueue, C as CancelEventMessage } from './stream-SJdqjfOM.js';
2
2
  import { createClient } from 'redis';
3
3
 
4
4
  class RedisStreamQueue extends BaseStreamQueue {
@@ -10,8 +10,12 @@ class RedisStreamQueue extends BaseStreamQueue {
10
10
  this.redis = RedisStreamQueue.redis;
11
11
  this.subscriberRedis = RedisStreamQueue.subscriberRedis;
12
12
  this.cancelSignal = new AbortController();
13
- this.redis.connect();
14
- this.subscriberRedis.connect();
13
+ if (!this.redis.isOpen) {
14
+ this.redis.connect();
15
+ }
16
+ if (!this.subscriberRedis.isOpen) {
17
+ this.subscriberRedis.connect();
18
+ }
15
19
  this.isConnected = true;
16
20
  }
17
21
  static redis = createClient({ url: process.env.REDIS_URL });
@@ -117,4 +121,4 @@ class RedisStreamQueue extends BaseStreamQueue {
117
121
  }
118
122
 
119
123
  export { RedisStreamQueue };
120
- //# sourceMappingURL=queue-CVAmN8_S.js.map
124
+ //# sourceMappingURL=queue-CwCW8m0q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-CwCW8m0q.js","sources":["../src/storage/redis/queue.ts"],"sourcesContent":["import { CancelEventMessage, EventMessage } from '../../queue/event_message.js';\nimport { BaseStreamQueue } from '../../queue/stream_queue.js';\nimport { BaseStreamQueueInterface } from '../../queue/stream_queue.js';\nimport { createClient, RedisClientType } from 'redis';\n\n/**\n * Redis 实现的消息队列,用于存储消息\n */\nexport class RedisStreamQueue extends BaseStreamQueue implements BaseStreamQueueInterface {\n static redis: RedisClientType = createClient({ url: process.env.REDIS_URL! });\n static subscriberRedis: RedisClientType = createClient({ url: process.env.REDIS_URL! });\n private redis: RedisClientType;\n private subscriberRedis: RedisClientType;\n private queueKey: string;\n private channelKey: string;\n private isConnected = false;\n public cancelSignal: AbortController;\n\n constructor(readonly id: string = 'default') {\n super(id, true);\n this.queueKey = `queue:${this.id}`;\n this.channelKey = `channel:${this.id}`;\n this.redis = RedisStreamQueue.redis;\n this.subscriberRedis = RedisStreamQueue.subscriberRedis;\n this.cancelSignal = new AbortController();\n\n // 连接 Redis 客户端(检查是否已经连接)\n if (!this.redis.isOpen) {\n this.redis.connect();\n }\n if (!this.subscriberRedis.isOpen) {\n this.subscriberRedis.connect();\n }\n this.isConnected = true;\n }\n\n /**\n * 推送消息到 Redis 队列\n */\n async push(item: EventMessage): Promise<void> {\n const data = await this.encodeData(item);\n const serializedData = Buffer.from(data);\n\n // 推送到队列\n await this.redis.lPush(this.queueKey, serializedData);\n\n // 设置队列 TTL 为 300 秒\n await this.redis.expire(this.queueKey, 300);\n\n // 发布到频道通知有新数据\n await this.redis.publish(this.channelKey, serializedData);\n\n this.emit('dataChange', data);\n }\n\n /**\n * 异步生成器:支持 for await...of 方式消费队列数据\n */\n async *onDataReceive(): AsyncGenerator<EventMessage, void, unknown> {\n let queue: EventMessage[] = [];\n let pendingResolve: (() => void) | null = null;\n let isStreamEnded = false;\n const handleMessage = async (message: string) => {\n const data = (await this.decodeData(message)) as EventMessage;\n queue.push(data);\n // 检查是否为流结束或错误信号\n if (\n data.event === '__stream_end__' ||\n data.event === '__stream_error__' ||\n data.event === '__stream_cancel__'\n ) {\n setTimeout(() => {\n isStreamEnded = true;\n if (pendingResolve) {\n pendingResolve();\n pendingResolve = null;\n }\n }, 300);\n\n if (data.event === '__stream_cancel__') {\n this.cancel();\n }\n }\n\n if (pendingResolve) {\n pendingResolve();\n pendingResolve = null;\n }\n };\n\n // 订阅 Redis 频道\n await this.subscriberRedis.subscribe(this.channelKey, (message) => {\n handleMessage(message);\n });\n\n try {\n while (!isStreamEnded) {\n if (queue.length > 0) {\n for (const item of queue) {\n yield item;\n }\n queue = [];\n } else {\n await new Promise((resolve) => {\n pendingResolve = resolve as () => void;\n });\n }\n }\n } finally {\n await this.subscriberRedis.unsubscribe(this.channelKey);\n }\n }\n\n /**\n * 获取队列中的所有数据\n */\n async getAll(): Promise<EventMessage[]> {\n const data = await this.redis.lRange(this.queueKey, 0, -1);\n\n if (!data || data.length === 0) {\n return [];\n }\n\n if (this.compressMessages) {\n return (await Promise.all(\n data.map(async (item: string) => {\n const parsed = JSON.parse(item) as EventMessage;\n return (await this.decodeData(parsed as any)) as EventMessage;\n }),\n )) as EventMessage[];\n } else {\n return data.map((item: string) => JSON.parse(item) as EventMessage);\n }\n }\n\n /**\n * 清空队列\n */\n clear(): void {\n if (this.isConnected) {\n this.redis.del(this.queueKey);\n }\n }\n\n /**\n * 取消操作\n */\n cancel(): void {\n this.push(new CancelEventMessage());\n this.cancelSignal.abort('user cancel this run');\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { NextResponse } from 'next/server';
2
- import { c as createEndpoint } from './createEndpoint-C-7CCNeN.js';
2
+ import { c as createEndpoint } from './createEndpoint-DHnODS67.js';
3
3
  import { a as AssistantGraphQuerySchema, b as RunListQuerySchema, A as AssistantsSearchSchema, f as ThreadCreatePayloadSchema, g as ThreadSearchPayloadSchema, e as ThreadStateUpdate, R as RunStreamPayloadSchema, d as RunCancelQuerySchema } from './zod-C5lbZYj6.js';
4
- import { s as serialiseAsDict } from './stream-BwdFJfJb.js';
4
+ import { s as serialiseAsDict } from './stream-SJdqjfOM.js';
5
5
  import camelcaseKeys from 'camelcase-keys';
6
6
 
7
7
  const client = createEndpoint();
@@ -174,4 +174,4 @@ async function DELETE(req) {
174
174
  }
175
175
 
176
176
  export { DELETE, GET, POST };
177
- //# sourceMappingURL=router-DgmIokTx.js.map
177
+ //# sourceMappingURL=router-AADuUgGy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"router-DgmIokTx.js","sources":["../src/adapter/nextjs/endpoint.ts","../src/adapter/nextjs/router.ts"],"sourcesContent":["import { createEndpoint } from '../../createEndpoint.js';\nexport const client = createEndpoint();\n","/** @ts-ignore */\nimport { NextRequest, NextResponse } from 'next/server';\nimport { client } from './endpoint';\nimport {\n AssistantsSearchSchema,\n AssistantGraphQuerySchema,\n RunStreamPayloadSchema,\n RunListQuerySchema,\n RunCancelQuerySchema,\n ThreadCreatePayloadSchema,\n ThreadSearchPayloadSchema,\n ThreadStateUpdate,\n} from '../zod';\nimport { serialiseAsDict } from '../../graph/stream';\nimport camelcaseKeys from 'camelcase-keys';\n\n// Next.js App Router 的 SSE 响应实现\nasync function sseResponse(generator: AsyncGenerator<{ event: string; data: unknown }>): Promise<Response> {\n const encoder = new TextEncoder();\n const stream = new ReadableStream({\n async start(controller) {\n try {\n for await (const { event, data } of generator) {\n const line = `event: ${event}\\n` + `data: ${serialiseAsDict(data, 0)}\\n\\n`;\n controller.enqueue(encoder.encode(line));\n }\n } catch (err) {\n // ignore\n } finally {\n controller.close();\n }\n },\n });\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream; charset=utf-8',\n 'Cache-Control': 'no-cache, no-transform',\n Connection: 'keep-alive',\n },\n });\n}\n\n// 统一路由处理器\nexport async function GET(req: NextRequest) {\n const url = new URL(req.url);\n const pathname = url.pathname;\n\n // Assistants routes\n if (pathname.match(/\\/assistants\\/[^/]+\\/graph$/)) {\n const match = pathname.match(/\\/assistants\\/([^/]+)\\/graph$/);\n if (match) {\n const assistant_id = match[1];\n const xrayParam = url.searchParams.get('xray') ?? undefined;\n const queryParams = { xray: xrayParam };\n const { xray } = AssistantGraphQuerySchema.parse(queryParams);\n const data = await client.assistants.getGraph(assistant_id, {\n xray: xray !== undefined ? xray === 'true' : undefined,\n });\n return NextResponse.json(data);\n }\n }\n\n // Threads routes\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})$/);\n if (match) {\n const thread_id = match[1];\n const data = await client.threads.get(thread_id);\n return NextResponse.json(data);\n }\n }\n\n // Runs routes\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}\\/runs$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})\\/runs$/);\n if (match) {\n const thread_id = match[1];\n const limit = url.searchParams.get('limit') ?? undefined;\n const offset = url.searchParams.get('offset') ?? undefined;\n const status = url.searchParams.get('status') ?? undefined;\n const queryParams = { limit, offset, status };\n const {\n limit: parsedLimit,\n offset: parsedOffset,\n status: parsedStatus,\n } = RunListQuerySchema.parse(queryParams);\n const runs = await client.runs.list(thread_id, {\n limit: parsedLimit,\n offset: parsedOffset,\n status: parsedStatus,\n });\n return Response.json(runs);\n }\n }\n\n return new NextResponse('Not Found', { status: 404 });\n}\n\nexport async function POST(req: NextRequest) {\n const url = new URL(req.url);\n const pathname = url.pathname;\n\n // Assistants routes\n if (pathname.endsWith('/assistants/search')) {\n const body = await req.json();\n const payload = AssistantsSearchSchema.parse(body);\n const data = await client.assistants.search({\n graphId: payload.graph_id,\n metadata: payload.metadata,\n limit: payload.limit,\n offset: payload.offset,\n });\n return NextResponse.json(data, {\n headers: { 'X-Pagination-Total': String(data.length) },\n });\n }\n\n // Threads routes\n if (pathname.endsWith('/threads')) {\n const body = await req.json();\n const payload = ThreadCreatePayloadSchema.parse(body);\n const thread = await client.threads.create(camelcaseKeys(payload));\n return NextResponse.json(thread);\n }\n\n if (pathname.endsWith('/threads/search')) {\n const body = await req.json();\n const payload = ThreadSearchPayloadSchema.parse(body);\n const result = await client.threads.search(camelcaseKeys(payload));\n return NextResponse.json(result, {\n headers: { 'X-Pagination-Total': String(result.length) },\n });\n }\n\n // Threads state update\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}\\/state$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})\\/state$/);\n if (match) {\n const thread_id = match[1];\n const body = await req.json();\n const payload = ThreadStateUpdate.parse(body);\n const result = await client.threads.updateState(thread_id, camelcaseKeys(payload));\n return NextResponse.json(result);\n }\n }\n\n // Runs routes - stream\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}\\/runs\\/stream$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})\\/runs\\/stream$/);\n if (match) {\n const thread_id = match[1];\n const body = await req.json();\n const payload = RunStreamPayloadSchema.parse(body);\n\n // Extract custom context from request headers\n const langgraphContextHeader = req.headers.get('x-langgraph-context');\n if (langgraphContextHeader) {\n const langgraphContext = JSON.parse(decodeURIComponent(langgraphContextHeader));\n payload.config = payload.config || {};\n payload.config.configurable = payload.config.configurable || {};\n Object.assign(payload.config.configurable, langgraphContext);\n }\n const generator = client.runs.stream(\n thread_id,\n payload.assistant_id as string,\n camelcaseKeys(payload) as any,\n );\n return sseResponse(generator as any);\n }\n }\n\n // Runs routes - cancel\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}\\/runs\\/[0-9a-fA-F-]{36}\\/cancel$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})\\/runs\\/([0-9a-fA-F-]{36})\\/cancel$/);\n if (match) {\n const thread_id = match[1];\n const run_id = match[2];\n const waitParam = url.searchParams.get('wait') ?? undefined;\n const actionParam = url.searchParams.get('action') ?? undefined;\n const queryParams = {\n wait: waitParam ? waitParam === 'true' : false,\n action: actionParam ?? 'interrupt',\n };\n const { wait, action } = RunCancelQuerySchema.parse(queryParams);\n const promise = client.runs.cancel(thread_id, run_id, wait, action);\n if (wait) await promise;\n return new Response(null, { status: wait ? 204 : 202 });\n }\n }\n\n return new NextResponse('Not Found', { status: 404 });\n}\n\nexport async function DELETE(req: NextRequest) {\n const url = new URL(req.url);\n const pathname = url.pathname;\n\n // Threads routes\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})$/);\n if (match) {\n const thread_id = match[1];\n await client.threads.delete(thread_id);\n return new NextResponse(null, { status: 204 });\n }\n }\n\n return new NextResponse('Not Found', { status: 404 });\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router-AADuUgGy.js","sources":["../src/adapter/nextjs/endpoint.ts","../src/adapter/nextjs/router.ts"],"sourcesContent":["import { createEndpoint } from '../../createEndpoint.js';\nexport const client = createEndpoint();\n","/** @ts-ignore */\nimport { NextRequest, NextResponse } from 'next/server';\nimport { client } from './endpoint';\nimport {\n AssistantsSearchSchema,\n AssistantGraphQuerySchema,\n RunStreamPayloadSchema,\n RunListQuerySchema,\n RunCancelQuerySchema,\n ThreadCreatePayloadSchema,\n ThreadSearchPayloadSchema,\n ThreadStateUpdate,\n} from '../zod';\nimport { serialiseAsDict } from '../../graph/stream';\nimport camelcaseKeys from 'camelcase-keys';\n\n// Next.js App Router 的 SSE 响应实现\nasync function sseResponse(generator: AsyncGenerator<{ event: string; data: unknown }>): Promise<Response> {\n const encoder = new TextEncoder();\n const stream = new ReadableStream({\n async start(controller) {\n try {\n for await (const { event, data } of generator) {\n const line = `event: ${event}\\n` + `data: ${serialiseAsDict(data, 0)}\\n\\n`;\n controller.enqueue(encoder.encode(line));\n }\n } catch (err) {\n // ignore\n } finally {\n controller.close();\n }\n },\n });\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream; charset=utf-8',\n 'Cache-Control': 'no-cache, no-transform',\n Connection: 'keep-alive',\n },\n });\n}\n\n// 统一路由处理器\nexport async function GET(req: NextRequest) {\n const url = new URL(req.url);\n const pathname = url.pathname;\n\n // Assistants routes\n if (pathname.match(/\\/assistants\\/[^/]+\\/graph$/)) {\n const match = pathname.match(/\\/assistants\\/([^/]+)\\/graph$/);\n if (match) {\n const assistant_id = match[1];\n const xrayParam = url.searchParams.get('xray') ?? undefined;\n const queryParams = { xray: xrayParam };\n const { xray } = AssistantGraphQuerySchema.parse(queryParams);\n const data = await client.assistants.getGraph(assistant_id, {\n xray: xray !== undefined ? xray === 'true' : undefined,\n });\n return NextResponse.json(data);\n }\n }\n\n // Threads routes\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})$/);\n if (match) {\n const thread_id = match[1];\n const data = await client.threads.get(thread_id);\n return NextResponse.json(data);\n }\n }\n\n // Runs routes\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}\\/runs$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})\\/runs$/);\n if (match) {\n const thread_id = match[1];\n const limit = url.searchParams.get('limit') ?? undefined;\n const offset = url.searchParams.get('offset') ?? undefined;\n const status = url.searchParams.get('status') ?? undefined;\n const queryParams = { limit, offset, status };\n const {\n limit: parsedLimit,\n offset: parsedOffset,\n status: parsedStatus,\n } = RunListQuerySchema.parse(queryParams);\n const runs = await client.runs.list(thread_id, {\n limit: parsedLimit,\n offset: parsedOffset,\n status: parsedStatus,\n });\n return Response.json(runs);\n }\n }\n\n return new NextResponse('Not Found', { status: 404 });\n}\n\nexport async function POST(req: NextRequest) {\n const url = new URL(req.url);\n const pathname = url.pathname;\n\n // Assistants routes\n if (pathname.endsWith('/assistants/search')) {\n const body = await req.json();\n const payload = AssistantsSearchSchema.parse(body);\n const data = await client.assistants.search({\n graphId: payload.graph_id,\n metadata: payload.metadata,\n limit: payload.limit,\n offset: payload.offset,\n });\n return NextResponse.json(data, {\n headers: { 'X-Pagination-Total': String(data.length) },\n });\n }\n\n // Threads routes\n if (pathname.endsWith('/threads')) {\n const body = await req.json();\n const payload = ThreadCreatePayloadSchema.parse(body);\n const thread = await client.threads.create(camelcaseKeys(payload));\n return NextResponse.json(thread);\n }\n\n if (pathname.endsWith('/threads/search')) {\n const body = await req.json();\n const payload = ThreadSearchPayloadSchema.parse(body);\n const result = await client.threads.search(camelcaseKeys(payload));\n return NextResponse.json(result, {\n headers: { 'X-Pagination-Total': String(result.length) },\n });\n }\n\n // Threads state update\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}\\/state$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})\\/state$/);\n if (match) {\n const thread_id = match[1];\n const body = await req.json();\n const payload = ThreadStateUpdate.parse(body);\n const result = await client.threads.updateState(thread_id, camelcaseKeys(payload));\n return NextResponse.json(result);\n }\n }\n\n // Runs routes - stream\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}\\/runs\\/stream$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})\\/runs\\/stream$/);\n if (match) {\n const thread_id = match[1];\n const body = await req.json();\n const payload = RunStreamPayloadSchema.parse(body);\n\n // Extract custom context from request headers\n const langgraphContextHeader = req.headers.get('x-langgraph-context');\n if (langgraphContextHeader) {\n const langgraphContext = JSON.parse(decodeURIComponent(langgraphContextHeader));\n payload.config = payload.config || {};\n payload.config.configurable = payload.config.configurable || {};\n Object.assign(payload.config.configurable, langgraphContext);\n }\n const generator = client.runs.stream(\n thread_id,\n payload.assistant_id as string,\n camelcaseKeys(payload) as any,\n );\n return sseResponse(generator as any);\n }\n }\n\n // Runs routes - cancel\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}\\/runs\\/[0-9a-fA-F-]{36}\\/cancel$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})\\/runs\\/([0-9a-fA-F-]{36})\\/cancel$/);\n if (match) {\n const thread_id = match[1];\n const run_id = match[2];\n const waitParam = url.searchParams.get('wait') ?? undefined;\n const actionParam = url.searchParams.get('action') ?? undefined;\n const queryParams = {\n wait: waitParam ? waitParam === 'true' : false,\n action: actionParam ?? 'interrupt',\n };\n const { wait, action } = RunCancelQuerySchema.parse(queryParams);\n const promise = client.runs.cancel(thread_id, run_id, wait, action);\n if (wait) await promise;\n return new Response(null, { status: wait ? 204 : 202 });\n }\n }\n\n return new NextResponse('Not Found', { status: 404 });\n}\n\nexport async function DELETE(req: NextRequest) {\n const url = new URL(req.url);\n const pathname = url.pathname;\n\n // Threads routes\n if (pathname.match(/\\/threads\\/[0-9a-fA-F-]{36}$/)) {\n const match = pathname.match(/\\/threads\\/([0-9a-fA-F-]{36})$/);\n if (match) {\n const thread_id = match[1];\n await client.threads.delete(thread_id);\n return new NextResponse(null, { status: 204 });\n }\n }\n\n return new NextResponse('Not Found', { status: 404 });\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import { Kysely, SqliteDialect, sql } from 'kysely';
2
+
3
+ class SQLiteAdapter {
4
+ constructor(database) {
5
+ this.database = database;
6
+ this.db = new Kysely({
7
+ dialect: new SqliteDialect({
8
+ database
9
+ })
10
+ });
11
+ }
12
+ db;
13
+ dateToDb(date) {
14
+ return date.toISOString();
15
+ }
16
+ dbToDate(dbValue) {
17
+ return new Date(dbValue);
18
+ }
19
+ jsonToDb(obj) {
20
+ return JSON.stringify(obj);
21
+ }
22
+ dbToJson(dbValue) {
23
+ if (typeof dbValue === "string") {
24
+ try {
25
+ return JSON.parse(dbValue);
26
+ } catch {
27
+ return dbValue;
28
+ }
29
+ }
30
+ return dbValue;
31
+ }
32
+ buildJsonQuery(db, field, key, value) {
33
+ return sql`json_extract(${sql.ref(field)}, ${sql.lit("$." + key)}) = ${sql.lit(
34
+ JSON.stringify(value)
35
+ )}`;
36
+ }
37
+ now() {
38
+ return (/* @__PURE__ */ new Date()).toISOString();
39
+ }
40
+ async createTables(db) {
41
+ await sql`
42
+ CREATE TABLE IF NOT EXISTS threads (
43
+ thread_id TEXT PRIMARY KEY,
44
+ created_at TEXT NOT NULL,
45
+ updated_at TEXT NOT NULL,
46
+ metadata TEXT NOT NULL DEFAULT '{}',
47
+ status TEXT NOT NULL DEFAULT 'idle',
48
+ values TEXT,
49
+ interrupts TEXT NOT NULL DEFAULT '{}'
50
+ )
51
+ `.execute(db);
52
+ await sql`
53
+ CREATE TABLE IF NOT EXISTS runs (
54
+ run_id TEXT PRIMARY KEY,
55
+ thread_id TEXT NOT NULL,
56
+ assistant_id TEXT NOT NULL,
57
+ created_at TEXT NOT NULL,
58
+ updated_at TEXT NOT NULL,
59
+ status TEXT NOT NULL DEFAULT 'pending',
60
+ metadata TEXT NOT NULL DEFAULT '{}',
61
+ multitask_strategy TEXT NOT NULL DEFAULT 'reject',
62
+ FOREIGN KEY (thread_id) REFERENCES threads(thread_id) ON DELETE CASCADE
63
+ )
64
+ `.execute(db);
65
+ }
66
+ async createIndexes(db) {
67
+ await sql`CREATE INDEX IF NOT EXISTS idx_threads_status ON threads(status)`.execute(db);
68
+ await sql`CREATE INDEX IF NOT EXISTS idx_threads_created_at ON threads(created_at)`.execute(db);
69
+ await sql`CREATE INDEX IF NOT EXISTS idx_threads_updated_at ON threads(updated_at)`.execute(db);
70
+ await sql`CREATE INDEX IF NOT EXISTS idx_runs_thread_id ON runs(thread_id)`.execute(db);
71
+ await sql`CREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status)`.execute(db);
72
+ }
73
+ }
74
+
75
+ export { SQLiteAdapter };
76
+ //# sourceMappingURL=sqlite-adapter-BNYk10Gl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-adapter-BNYk10Gl.js","sources":["../src/storage/kysely/sqlite-adapter.ts"],"sourcesContent":["import { Kysely, sql, SqlBool, Expression, SqliteDialect } from 'kysely';\nimport { DatabaseAdapter } from './adapter';\nimport { Database } from './types';\n\n/**\n * SQLite 适配器\n * - 时间类型:TEXT (ISO 8601 字符串)\n * - JSON 类型:TEXT\n * - JSON 查询:使用 json_extract 函数\n */\nexport class SQLiteAdapter implements DatabaseAdapter {\n db: Kysely<Database>;\n constructor(public database: any) {\n this.db = new Kysely<Database>({\n dialect: new SqliteDialect({\n database: database,\n }),\n });\n }\n dateToDb(date: Date): string {\n // SQLite 存储为 ISO 8601 字符串\n return date.toISOString();\n }\n\n dbToDate(dbValue: any): Date {\n // SQLite 返回字符串,需要转换为 Date\n return new Date(dbValue);\n }\n\n jsonToDb(obj: any): string {\n // SQLite 存储为 JSON 字符串\n return JSON.stringify(obj);\n }\n\n dbToJson(dbValue: any): any {\n // SQLite 返回字符串,需要解析\n if (typeof dbValue === 'string') {\n try {\n return JSON.parse(dbValue);\n } catch {\n return dbValue;\n }\n }\n return dbValue;\n }\n\n buildJsonQuery(\n db: Kysely<Database>,\n field: 'metadata' | 'interrupts',\n key: string,\n value: any,\n ): Expression<SqlBool> {\n // SQLite 使用 json_extract 函数\n return sql<boolean>`json_extract(${sql.ref(field)}, ${sql.lit('$.' + key)}) = ${sql.lit(\n JSON.stringify(value),\n )}`;\n }\n\n now(): string {\n return new Date().toISOString();\n }\n\n async createTables(db: Kysely<Database>): Promise<void> {\n // 创建 threads 表\n await sql`\n CREATE TABLE IF NOT EXISTS threads (\n thread_id TEXT PRIMARY KEY,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n metadata TEXT NOT NULL DEFAULT '{}',\n status TEXT NOT NULL DEFAULT 'idle',\n values TEXT,\n interrupts TEXT NOT NULL DEFAULT '{}'\n )\n `.execute(db);\n\n // 创建 runs 表\n await sql`\n CREATE TABLE IF NOT EXISTS runs (\n run_id TEXT PRIMARY KEY,\n thread_id TEXT NOT NULL,\n assistant_id TEXT NOT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending',\n metadata TEXT NOT NULL DEFAULT '{}',\n multitask_strategy TEXT NOT NULL DEFAULT 'reject',\n FOREIGN KEY (thread_id) REFERENCES threads(thread_id) ON DELETE CASCADE\n )\n `.execute(db);\n }\n\n async createIndexes(db: Kysely<Database>): Promise<void> {\n await sql`CREATE INDEX IF NOT EXISTS idx_threads_status ON threads(status)`.execute(db);\n await sql`CREATE INDEX IF NOT EXISTS idx_threads_created_at ON threads(created_at)`.execute(db);\n await sql`CREATE INDEX IF NOT EXISTS idx_threads_updated_at ON threads(updated_at)`.execute(db);\n await sql`CREATE INDEX IF NOT EXISTS idx_runs_thread_id ON runs(thread_id)`.execute(db);\n await sql`CREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status)`.execute(db);\n }\n}\n"],"names":[],"mappings":";;AAUO,MAAM,aAAA,CAAyC;AAAA,EAElD,YAAmB,QAAA,EAAe;AAAf,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACf,IAAA,IAAA,CAAK,EAAA,GAAK,IAAI,MAAA,CAAiB;AAAA,MAC3B,OAAA,EAAS,IAAI,aAAA,CAAc;AAAA,QACvB;AAAA,OACH;AAAA,KACJ,CAAA;AAAA,EACL;AAAA,EAPA,EAAA;AAAA,EAQA,SAAS,IAAA,EAAoB;AAEzB,IAAA,OAAO,KAAK,WAAA,EAAY;AAAA,EAC5B;AAAA,EAEA,SAAS,OAAA,EAAoB;AAEzB,IAAA,OAAO,IAAI,KAAK,OAAO,CAAA;AAAA,EAC3B;AAAA,EAEA,SAAS,GAAA,EAAkB;AAEvB,IAAA,OAAO,IAAA,CAAK,UAAU,GAAG,CAAA;AAAA,EAC7B;AAAA,EAEA,SAAS,OAAA,EAAmB;AAExB,IAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC7B,MAAA,IAAI;AACA,QAAA,OAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,MAC7B,CAAA,CAAA,MAAQ;AACJ,QAAA,OAAO,OAAA;AAAA,MACX;AAAA,IACJ;AACA,IAAA,OAAO,OAAA;AAAA,EACX;AAAA,EAEA,cAAA,CACI,EAAA,EACA,KAAA,EACA,GAAA,EACA,KAAA,EACmB;AAEnB,IAAA,OAAO,GAAA,CAAA,aAAA,EAA4B,GAAA,CAAI,GAAA,CAAI,KAAK,CAAC,CAAA,EAAA,EAAK,GAAA,CAAI,GAAA,CAAI,IAAA,GAAO,GAAG,CAAC,CAAA,IAAA,EAAO,GAAA,CAAI,GAAA;AAAA,MAChF,IAAA,CAAK,UAAU,KAAK;AAAA,KACvB,CAAA,CAAA;AAAA,EACL;AAAA,EAEA,GAAA,GAAc;AACV,IAAA,OAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,EAClC;AAAA,EAEA,MAAM,aAAa,EAAA,EAAqC;AAEpD,IAAA,MAAM,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA,CAUJ,QAAQ,EAAE,CAAA;AAGZ,IAAA,MAAM,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA,CAYJ,QAAQ,EAAE,CAAA;AAAA,EAChB;AAAA,EAEA,MAAM,cAAc,EAAA,EAAqC;AACrD,IAAA,MAAM,GAAA,CAAA,gEAAA,CAAA,CAAsE,QAAQ,EAAE,CAAA;AACtF,IAAA,MAAM,GAAA,CAAA,wEAAA,CAAA,CAA8E,QAAQ,EAAE,CAAA;AAC9F,IAAA,MAAM,GAAA,CAAA,wEAAA,CAAA,CAA8E,QAAQ,EAAE,CAAA;AAC9F,IAAA,MAAM,GAAA,CAAA,gEAAA,CAAA,CAAsE,QAAQ,EAAE,CAAA;AACtF,IAAA,MAAM,GAAA,CAAA,0DAAA,CAAA,CAAgE,QAAQ,EAAE,CAAA;AAAA,EACpF;AACJ;;;;"}