agent-inspect 6.3.0 → 6.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +2 -2
  3. package/package.json +2 -2
  4. package/packages/cli/dist/{chunk-YS2I722C.mjs → chunk-M6PC5KUT.mjs} +78 -31
  5. package/packages/cli/dist/chunk-M6PC5KUT.mjs.map +1 -0
  6. package/packages/cli/dist/index.cjs +153 -42
  7. package/packages/cli/dist/index.cjs.map +1 -1
  8. package/packages/cli/dist/index.mjs +88 -36
  9. package/packages/cli/dist/index.mjs.map +1 -1
  10. package/packages/cli/dist/{src-FVNE44UA.mjs → src-27LC2BB3.mjs} +8 -5
  11. package/packages/cli/dist/src-27LC2BB3.mjs.map +1 -0
  12. package/packages/core/dist/advanced.cjs +91 -35
  13. package/packages/core/dist/advanced.cjs.map +1 -1
  14. package/packages/core/dist/advanced.d.cts +36 -12
  15. package/packages/core/dist/advanced.d.ts +36 -12
  16. package/packages/core/dist/advanced.mjs +77 -24
  17. package/packages/core/dist/advanced.mjs.map +1 -1
  18. package/packages/core/dist/checks.cjs +113 -0
  19. package/packages/core/dist/checks.cjs.map +1 -1
  20. package/packages/core/dist/checks.d.cts +40 -599
  21. package/packages/core/dist/checks.d.ts +40 -599
  22. package/packages/core/dist/checks.mjs +1 -1
  23. package/packages/core/dist/{chunk-QLYOCCEF.mjs → chunk-EWHN6NA4.mjs} +114 -3
  24. package/packages/core/dist/chunk-EWHN6NA4.mjs.map +1 -0
  25. package/packages/core/dist/{context-DyKbkmd4.d.cts → context-BHAgRjOe.d.cts} +4 -4
  26. package/packages/core/dist/{context-BJ5UQLDi.d.ts → context-Blyjb5my.d.ts} +4 -4
  27. package/packages/core/dist/diff.d.cts +3 -3
  28. package/packages/core/dist/diff.d.ts +3 -3
  29. package/packages/core/dist/exporters.cjs +75 -0
  30. package/packages/core/dist/exporters.cjs.map +1 -1
  31. package/packages/core/dist/exporters.d.cts +29 -4
  32. package/packages/core/dist/exporters.d.ts +29 -4
  33. package/packages/core/dist/exporters.mjs +71 -1
  34. package/packages/core/dist/exporters.mjs.map +1 -1
  35. package/packages/core/dist/index-BblJEdYZ.d.ts +618 -0
  36. package/packages/core/dist/index-DyKk7iR9.d.cts +618 -0
  37. package/packages/core/dist/index.d.cts +7 -7
  38. package/packages/core/dist/index.d.ts +7 -7
  39. package/packages/core/dist/{inspect-event-IqwOHbGo.d.cts → inspect-event-DVg84S4v.d.cts} +1 -1
  40. package/packages/core/dist/{inspect-event-IqwOHbGo.d.ts → inspect-event-DVg84S4v.d.ts} +1 -1
  41. package/packages/core/dist/{log-config-CW8w5YQ9.d.cts → log-config-BG1WmWf2.d.cts} +1 -1
  42. package/packages/core/dist/{log-config-SRA4xTp8.d.ts → log-config-Ck0aT_Ou.d.ts} +1 -1
  43. package/packages/core/dist/logs.d.cts +3 -3
  44. package/packages/core/dist/logs.d.ts +3 -3
  45. package/packages/core/dist/{persisted-inspect-event-DruwqARZ.d.ts → persisted-inspect-event-ChE7pGb7.d.ts} +1 -1
  46. package/packages/core/dist/{persisted-inspect-event-Gd-W8vB7.d.cts → persisted-inspect-event-d-mSP8kd.d.cts} +1 -1
  47. package/packages/core/dist/persisted.d.cts +5 -5
  48. package/packages/core/dist/persisted.d.ts +5 -5
  49. package/packages/core/dist/readers.d.cts +2 -2
  50. package/packages/core/dist/readers.d.ts +2 -2
  51. package/packages/core/dist/{types-J3Xtuf9x.d.cts → types-B562HgN_.d.cts} +1 -1
  52. package/packages/core/dist/{types-J3Xtuf9x.d.ts → types-B562HgN_.d.ts} +1 -1
  53. package/packages/core/dist/{types-B1X87dUW.d.cts → types-BLX3tiOW.d.cts} +1 -1
  54. package/packages/core/dist/{types-BVkjSd0q.d.ts → types-MuwXSJ4b.d.ts} +1 -1
  55. package/packages/core/dist/writers.d.cts +2 -2
  56. package/packages/core/dist/writers.d.ts +2 -2
  57. package/packages/cli/dist/chunk-YS2I722C.mjs.map +0 -1
  58. package/packages/cli/dist/src-FVNE44UA.mjs.map +0 -1
  59. package/packages/core/dist/chunk-QLYOCCEF.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/util.js","../../../node_modules/.pnpm/better-sqlite3@11.10.0/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@11.10.0/node_modules/better-sqlite3/lib/methods/wrappers.js","../../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/transaction.js","../../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/pragma.js","../../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/backup.js","../../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/serialize.js","../../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/function.js","../../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/aggregate.js","../../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/table.js","../../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/inspect.js","../../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/database.js","../../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/index.js","../../index-sqlite/src/types.ts","../../index-sqlite/src/builder.ts","../../index-sqlite/src/schema.ts","../../index-sqlite/src/query.ts"],"names":["exports","path","i","str","Database","meta","import_better_sqlite3"],"mappings":"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","file":"src-FVNE44UA.mjs","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 && !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","/**\n * Public types for the optional local SQLite trace index (v4.1, experimental).\n *\n * @remarks\n * Local-only. The index is derived from JSONL traces and is always safe to\n * delete. Trace files are never mutated. No network access.\n */\n\n/** Current index schema version. Bumped when table layout changes. */\nexport const INDEX_SCHEMA_VERSION = \"1\" as const;\n\n/** Default index database filename. */\nexport const INDEX_DB_FILENAME = \"trace-index.sqlite\";\n\n/** A derived run row in the index. */\nexport interface IndexedRun {\n runId: string;\n file: string;\n mtimeMs: number;\n name: string | null;\n status: string | null;\n startedAt: number | null;\n endedAt: number | null;\n durationMs: number | null;\n sessionId: string | null;\n groupId: string | null;\n correlationId: string | null;\n}\n\n/** A derived step row in the index. */\nexport interface IndexedStep {\n runId: string;\n stepId: string;\n kind: string | null;\n name: string | null;\n status: string | null;\n durationMs: number | null;\n toolName: string | null;\n model: string | null;\n parentId: string | null;\n}\n\n/** Options for building/rebuilding the index. */\nexport interface BuildIndexOptions {\n /** Trace directory to index. Resolved via core `resolveTraceDir` when omitted. */\n traceDir?: string;\n /** Index database path. Defaults to `<traceDir>/<INDEX_DB_FILENAME>`. */\n dbPath?: string;\n /** Cap on the number of trace files indexed (default 10000). */\n maxRuns?: number;\n}\n\n/** Result of a build/rebuild. */\nexport interface BuildIndexResult {\n dbPath: string;\n traceDir: string;\n runs: number;\n steps: number;\n errors: number;\n builtAt: string;\n warnings: string[];\n}\n\n/** Status of an existing index. */\nexport interface IndexStatus {\n dbPath: string;\n exists: boolean;\n healthy: boolean;\n builtAt: string | null;\n sourceDir: string | null;\n schemaVersion: string | null;\n runs: number;\n steps: number;\n}\n\n/** Filter for querying indexed runs. */\nexport interface RunQuery {\n status?: string;\n sessionId?: string;\n /** Case-insensitive substring match on run name. */\n name?: string;\n /** Match runs that contain a step of this kind. */\n kind?: string;\n /** Match runs that contain a step with this tool name (substring). */\n tool?: string;\n limit?: number;\n}\n","import { mkdir, readFile, rm } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport Database from \"better-sqlite3\";\nimport {\n TraceDirectory,\n parseTraceJsonl,\n resolveTraceDir,\n validateEvent,\n} from \"agent-inspect/advanced\";\nimport type { TraceEvent } from \"agent-inspect/advanced\";\n\nimport {\n DERIVE_SESSIONS_SQL,\n INDEX_SCHEMA_SQL,\n META_KEYS,\n metaDefaults,\n} from \"./schema.js\";\nimport {\n INDEX_DB_FILENAME,\n type BuildIndexOptions,\n type BuildIndexResult,\n type IndexedRun,\n type IndexedStep,\n} from \"./types.js\";\n\nconst DEFAULT_MAX_RUNS = 10_000;\n\n/** Resolves the index database path for a trace directory. */\nexport function resolveIndexDbPath(traceDir: string, dbPath?: string): string {\n if (dbPath && dbPath.trim() !== \"\") return path.resolve(dbPath);\n return path.join(path.resolve(traceDir), INDEX_DB_FILENAME);\n}\n\nfunction str(value: unknown): string | null {\n return typeof value === \"string\" && value !== \"\" ? value : null;\n}\n\nfunction num(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\ninterface DerivedRun {\n run: IndexedRun;\n steps: IndexedStep[];\n errors: Array<{ stepId: string | null; message: string | null; code: string | null }>;\n}\n\nfunction deriveRun(file: string, mtimeMs: number, events: TraceEvent[]): DerivedRun | null {\n const started = events.find((e) => e.event === \"run_started\");\n if (!started || started.event !== \"run_started\") return null;\n\n const completed = events.find((e) => e.event === \"run_completed\");\n const metadata = (started.metadata ?? {}) as Record<string, unknown>;\n\n const run: IndexedRun = {\n runId: started.runId,\n file,\n mtimeMs,\n name: str(started.name),\n status: completed && completed.event === \"run_completed\" ? completed.status : null,\n startedAt: num(started.startTime),\n endedAt: completed && completed.event === \"run_completed\" ? num(completed.endTime) : null,\n durationMs:\n completed && completed.event === \"run_completed\" ? num(completed.durationMs) : null,\n sessionId: str(metadata.sessionId),\n groupId: str(metadata.groupId),\n correlationId: str(metadata.correlationId),\n };\n\n const stepStarts = new Map<string, Extract<TraceEvent, { event: \"step_started\" }>>();\n const steps: IndexedStep[] = [];\n const errors: DerivedRun[\"errors\"] = [];\n\n if (completed && completed.event === \"run_completed\" && completed.error) {\n errors.push({\n stepId: null,\n message: str(completed.error.message),\n code: str((completed.error as { code?: unknown }).code),\n });\n }\n\n for (const event of events) {\n if (event.event === \"step_started\") {\n stepStarts.set(event.stepId, event);\n }\n }\n\n for (const event of events) {\n if (event.event !== \"step_completed\") continue;\n const start = stepStarts.get(event.stepId);\n const meta = (start?.metadata ?? {}) as Record<string, unknown>;\n steps.push({\n runId: run.runId,\n stepId: event.stepId,\n kind: start ? str(start.type) : null,\n name: start ? str(start.name) : null,\n status: event.status,\n durationMs: num(event.durationMs),\n toolName: str(meta.toolName),\n model: str(meta.model),\n parentId: start ? str(start.parentId) : null,\n });\n if (event.error) {\n errors.push({\n stepId: event.stepId,\n message: str(event.error.message),\n code: str((event.error as { code?: unknown }).code),\n });\n }\n }\n\n return { run, steps, errors };\n}\n\n/**\n * Builds (or fully rebuilds) the local SQLite index from a trace directory.\n * Idempotent: rebuilding from identical inputs yields identical contents.\n * Never mutates trace files.\n */\nexport async function buildIndex(\n options: BuildIndexOptions = {},\n): Promise<BuildIndexResult> {\n const traceDir = resolveTraceDir({ dir: options.traceDir });\n const dbPath = resolveIndexDbPath(traceDir, options.dbPath);\n const maxRuns = options.maxRuns ?? DEFAULT_MAX_RUNS;\n const warnings: string[] = [];\n\n const td = new TraceDirectory({ dir: traceDir });\n const files = await td.list();\n if (files.length > maxRuns) {\n warnings.push(\n `index.truncated: ${files.length} trace files present; indexing first ${maxRuns}`,\n );\n }\n const slice = files.slice(0, maxRuns);\n\n const derived: DerivedRun[] = [];\n for (const file of slice) {\n try {\n const raw = await readFile(td.getPath(file), \"utf-8\");\n const parsed = parseTraceJsonl(raw, { validate: validateEvent });\n const stats = await td.getFileStats(file);\n const one = deriveRun(file, stats.mtimeMs, parsed.events);\n if (one) derived.push(one);\n else warnings.push(`index.skipped: ${file} has no run_started event`);\n } catch {\n warnings.push(`index.unreadable: ${file}`);\n }\n }\n\n await mkdir(path.dirname(dbPath), { recursive: true });\n // Remove any prior (possibly corrupt) file so the rebuild is deterministic.\n await rm(dbPath, { force: true });\n\n const db = new Database(dbPath);\n let runCount = 0;\n let stepCount = 0;\n let errorCount = 0;\n try {\n db.pragma(\"journal_mode = WAL\");\n db.exec(INDEX_SCHEMA_SQL);\n\n const insertRun = db.prepare(\n `INSERT INTO runs (run_id, file, mtime_ms, name, status, started_at, ended_at, duration_ms, session_id, group_id, correlation_id)\n VALUES (@runId, @file, @mtimeMs, @name, @status, @startedAt, @endedAt, @durationMs, @sessionId, @groupId, @correlationId)`,\n );\n const insertStep = db.prepare(\n `INSERT INTO steps (run_id, step_id, kind, name, status, duration_ms, tool_name, model, parent_id)\n VALUES (@runId, @stepId, @kind, @name, @status, @durationMs, @toolName, @model, @parentId)`,\n );\n const insertError = db.prepare(\n `INSERT INTO errors (run_id, step_id, message, code) VALUES (@runId, @stepId, @message, @code)`,\n );\n const insertMeta = db.prepare(`INSERT INTO meta (key, value) VALUES (?, ?)`);\n\n const write = db.transaction((items: DerivedRun[]) => {\n const seen = new Set<string>();\n for (const item of items) {\n if (seen.has(item.run.runId)) continue;\n seen.add(item.run.runId);\n insertRun.run(item.run);\n runCount += 1;\n for (const step of item.steps) {\n insertStep.run(step);\n stepCount += 1;\n }\n for (const err of item.errors) {\n insertError.run({ runId: item.run.runId, ...err });\n errorCount += 1;\n }\n }\n db.exec(DERIVE_SESSIONS_SQL);\n for (const [key, value] of Object.entries(metaDefaults(traceDir, slice.length))) {\n insertMeta.run(key, value);\n }\n });\n write(derived);\n } finally {\n db.close();\n }\n\n const builtAtRow = readMetaValue(dbPath, META_KEYS.builtAt);\n\n return {\n dbPath,\n traceDir,\n runs: runCount,\n steps: stepCount,\n errors: errorCount,\n builtAt: builtAtRow ?? new Date().toISOString(),\n warnings,\n };\n}\n\n/** Alias for {@link buildIndex}; a rebuild is a full, idempotent build. */\nexport const rebuildIndex = buildIndex;\n\nfunction readMetaValue(dbPath: string, key: string): string | null {\n try {\n const db = new Database(dbPath, { readonly: true, fileMustExist: true });\n try {\n const row = db.prepare(`SELECT value FROM meta WHERE key = ?`).get(key) as\n | { value: string }\n | undefined;\n return row?.value ?? null;\n } finally {\n db.close();\n }\n } catch {\n return null;\n }\n}\n\n/** Deletes the index database file. Always safe; traces are unaffected. */\nexport async function cleanIndex(dbPath: string): Promise<void> {\n await rm(dbPath, { force: true });\n await rm(`${dbPath}-wal`, { force: true });\n await rm(`${dbPath}-shm`, { force: true });\n}\n","import { INDEX_SCHEMA_VERSION } from \"./types.js\";\n\n/**\n * Idempotent DDL for the local trace index. A full rebuild drops and recreates\n * all tables, so building twice from the same inputs yields identical contents.\n */\nexport const INDEX_SCHEMA_SQL = `\nDROP TABLE IF EXISTS meta;\nDROP TABLE IF EXISTS errors;\nDROP TABLE IF EXISTS steps;\nDROP TABLE IF EXISTS sessions;\nDROP TABLE IF EXISTS runs;\n\nCREATE TABLE meta (\n key TEXT PRIMARY KEY,\n value TEXT\n);\n\nCREATE TABLE runs (\n run_id TEXT PRIMARY KEY,\n file TEXT NOT NULL,\n mtime_ms REAL NOT NULL,\n name TEXT,\n status TEXT,\n started_at REAL,\n ended_at REAL,\n duration_ms REAL,\n session_id TEXT,\n group_id TEXT,\n correlation_id TEXT\n);\n\nCREATE TABLE steps (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n run_id TEXT NOT NULL,\n step_id TEXT NOT NULL,\n kind TEXT,\n name TEXT,\n status TEXT,\n duration_ms REAL,\n tool_name TEXT,\n model TEXT,\n parent_id TEXT\n);\n\nCREATE TABLE errors (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n run_id TEXT NOT NULL,\n step_id TEXT,\n message TEXT,\n code TEXT\n);\n\nCREATE TABLE sessions (\n session_id TEXT PRIMARY KEY,\n run_count INTEGER NOT NULL,\n first_started_at REAL,\n last_ended_at REAL\n);\n\nCREATE INDEX idx_runs_status ON runs(status);\nCREATE INDEX idx_runs_session ON runs(session_id);\nCREATE INDEX idx_runs_started ON runs(started_at);\nCREATE INDEX idx_steps_run ON steps(run_id);\nCREATE INDEX idx_steps_kind ON steps(kind);\nCREATE INDEX idx_steps_tool ON steps(tool_name);\n`;\n\n/** SQL to derive the sessions table from indexed runs. */\nexport const DERIVE_SESSIONS_SQL = `\nINSERT INTO sessions (session_id, run_count, first_started_at, last_ended_at)\nSELECT session_id, COUNT(*), MIN(started_at), MAX(ended_at)\nFROM runs\nWHERE session_id IS NOT NULL\nGROUP BY session_id;\n`;\n\nexport const META_KEYS = {\n schemaVersion: \"schemaVersion\",\n builtAt: \"builtAt\",\n sourceDir: \"sourceDir\",\n fileCount: \"fileCount\",\n driver: \"driver\",\n} as const;\n\nexport function metaDefaults(sourceDir: string, fileCount: number) {\n return {\n [META_KEYS.schemaVersion]: INDEX_SCHEMA_VERSION,\n [META_KEYS.builtAt]: new Date().toISOString(),\n [META_KEYS.sourceDir]: sourceDir,\n [META_KEYS.fileCount]: String(fileCount),\n [META_KEYS.driver]: \"better-sqlite3\",\n } as Record<string, string>;\n}\n","import { existsSync } from \"node:fs\";\n\nimport Database from \"better-sqlite3\";\n\nimport { META_KEYS } from \"./schema.js\";\nimport type { IndexStatus, IndexedRun, RunQuery } from \"./types.js\";\n\ninterface OpenResult {\n db: Database.Database;\n healthy: boolean;\n}\n\n/**\n * Opens the index read-only and verifies integrity. Returns `null` when the\n * file is missing or fails `integrity_check` (corruption), so callers can fall\n * back to a full rebuild or a directory scan.\n */\nfunction openHealthy(dbPath: string): OpenResult | null {\n if (!existsSync(dbPath)) return null;\n try {\n const db = new Database(dbPath, { readonly: true, fileMustExist: true });\n try {\n const result = db.pragma(\"integrity_check\", { simple: true });\n if (result !== \"ok\") {\n db.close();\n return null;\n }\n // Confirm the expected schema is present.\n db.prepare(`SELECT 1 FROM meta LIMIT 1`).get();\n db.prepare(`SELECT 1 FROM runs LIMIT 1`).get();\n return { db, healthy: true };\n } catch {\n db.close();\n return null;\n }\n } catch {\n return null;\n }\n}\n\nfunction meta(db: Database.Database, key: string): string | null {\n const row = db.prepare(`SELECT value FROM meta WHERE key = ?`).get(key) as\n | { value: string }\n | undefined;\n return row?.value ?? null;\n}\n\n/** Reports index presence, health, and basic counts. Never throws. */\nexport function indexStatus(dbPath: string): IndexStatus {\n const opened = openHealthy(dbPath);\n if (!opened) {\n return {\n dbPath,\n exists: existsSync(dbPath),\n healthy: false,\n builtAt: null,\n sourceDir: null,\n schemaVersion: null,\n runs: 0,\n steps: 0,\n };\n }\n const { db } = opened;\n try {\n const runs = (db.prepare(`SELECT COUNT(*) AS c FROM runs`).get() as { c: number }).c;\n const steps = (db.prepare(`SELECT COUNT(*) AS c FROM steps`).get() as { c: number }).c;\n return {\n dbPath,\n exists: true,\n healthy: true,\n builtAt: meta(db, META_KEYS.builtAt),\n sourceDir: meta(db, META_KEYS.sourceDir),\n schemaVersion: meta(db, META_KEYS.schemaVersion),\n runs,\n steps,\n };\n } finally {\n db.close();\n }\n}\n\n/** Returns true when the index is missing, corrupt, or older than any trace. */\nexport function isIndexStale(dbPath: string, newestTraceMtimeMs: number): boolean {\n const opened = openHealthy(dbPath);\n if (!opened) return true;\n try {\n const builtAt = meta(opened.db, META_KEYS.builtAt);\n if (!builtAt) return true;\n const builtMs = Date.parse(builtAt);\n if (Number.isNaN(builtMs)) return true;\n return newestTraceMtimeMs > builtMs;\n } finally {\n opened.db.close();\n }\n}\n\nfunction mapRow(row: Record<string, unknown>): IndexedRun {\n return {\n runId: row.run_id as string,\n file: row.file as string,\n mtimeMs: row.mtime_ms as number,\n name: (row.name as string | null) ?? null,\n status: (row.status as string | null) ?? null,\n startedAt: (row.started_at as number | null) ?? null,\n endedAt: (row.ended_at as number | null) ?? null,\n durationMs: (row.duration_ms as number | null) ?? null,\n sessionId: (row.session_id as string | null) ?? null,\n groupId: (row.group_id as string | null) ?? null,\n correlationId: (row.correlation_id as string | null) ?? null,\n };\n}\n\n/**\n * Queries indexed runs. Returns an empty array when the index is missing or\n * corrupt (the caller should fall back to a directory scan).\n */\nexport function queryRuns(dbPath: string, query: RunQuery = {}): IndexedRun[] {\n const opened = openHealthy(dbPath);\n if (!opened) return [];\n const { db } = opened;\n try {\n const where: string[] = [];\n const params: Record<string, unknown> = {};\n\n if (query.status) {\n where.push(`r.status = @status`);\n params.status = query.status;\n }\n if (query.sessionId) {\n where.push(`r.session_id = @sessionId`);\n params.sessionId = query.sessionId;\n }\n if (query.name) {\n where.push(`LOWER(r.name) LIKE @name`);\n params.name = `%${query.name.toLowerCase()}%`;\n }\n if (query.kind) {\n where.push(`EXISTS (SELECT 1 FROM steps s WHERE s.run_id = r.run_id AND s.kind = @kind)`);\n params.kind = query.kind;\n }\n if (query.tool) {\n where.push(\n `EXISTS (SELECT 1 FROM steps s WHERE s.run_id = r.run_id AND LOWER(s.tool_name) LIKE @tool)`,\n );\n params.tool = `%${query.tool.toLowerCase()}%`;\n }\n\n const limit = Number.isInteger(query.limit) && query.limit! > 0 ? query.limit! : 100;\n const sql = `SELECT r.* FROM runs r ${\n where.length ? `WHERE ${where.join(\" AND \")}` : \"\"\n } ORDER BY r.started_at DESC LIMIT ${limit}`;\n\n const rows = db.prepare(sql).all(params) as Array<Record<string, unknown>>;\n return rows.map(mapRow);\n } finally {\n db.close();\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/checks/index.ts"],"names":["finishedEvents"],"mappings":"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","file":"chunk-QLYOCCEF.mjs","sourcesContent":["import type { TraceReadResult, TraceReadWarning } from \"../readers/index.js\";\nimport type {\n AttributionConfidence,\n InspectNode,\n InspectRunTree,\n} from \"../types/inspect-event.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport {\n extractOutcomesFromPersistedEvents,\n outcomesMatchingStatus,\n type ObservedOutcomeStatus,\n} from \"../outcomes/index.js\";\n\n/**\n * Experimental trace-check finding severity.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport type TraceCheckSeverity = \"error\" | \"warning\" | \"info\";\n\n/**\n * Experimental trace-check rule category.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport type TraceCheckRuleCategory =\n | \"run\"\n | \"tool\"\n | \"llm\"\n | \"structure\"\n | \"baseline\"\n | \"safety\"\n | \"reader\";\n\n/**\n * Experimental trace-check finding status.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport type TraceCheckFindingStatus = \"pass\" | \"fail\" | \"warning\";\n\n/**\n * Experimental trace-check aggregate status.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport type TraceCheckStatus = \"pass\" | \"fail\" | \"error\";\n\n/**\n * Experimental stable diagnostic code for check execution and input errors.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport type TraceCheckDiagnosticCode =\n | \"AI_CHECK_INVALID_ARGUMENTS\"\n | \"AI_CHECK_INVALID_CONFIG\"\n | \"AI_CHECK_CONFIG_LOAD_FAILED\"\n | \"AI_CHECK_TRACE_UNREADABLE\"\n | \"AI_CHECK_UNSUPPORTED_FORMAT\"\n | \"AI_CHECK_AMBIGUOUS_FORMAT\"\n | \"AI_CHECK_RUN_SELECTION_REQUIRED\"\n | \"AI_CHECK_BASELINE_UNREADABLE\"\n | \"AI_CHECK_BASELINE_INCOMPATIBLE\"\n | \"AI_CHECK_RULE_FAILED\"\n | \"AI_CHECK_INTERNAL_ERROR\";\n\n/**\n * Experimental evidence pointing at trace data relevant to a finding.\n *\n * Evidence intentionally identifies runs/events/spans and bounded paths rather\n * than embedding raw prompts, outputs, request bodies, headers, or tool payloads.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckEvidence {\n runId?: string;\n eventId?: string;\n parentId?: string;\n traceId?: string;\n spanId?: string;\n kind?: string;\n name?: string;\n status?: string;\n path?: string;\n}\n\n/**\n * Experimental finding emitted by a trace-check rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckFinding {\n ruleId: string;\n severity: TraceCheckSeverity;\n status: TraceCheckFindingStatus;\n message: string;\n expected?: unknown;\n actual?: unknown;\n evidence: TraceCheckEvidence[];\n}\n\n/**\n * Experimental diagnostic emitted when check execution cannot complete normally.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckDiagnostic {\n code: TraceCheckDiagnosticCode;\n message: string;\n severity: TraceCheckSeverity;\n ruleId?: string;\n}\n\n/**\n * Experimental input projection for trace checks.\n *\n * The `read` value must come from `agent-inspect/readers` or an equivalent\n * already-normalized `TraceReadResult`. The checks engine does not read files\n * or reparse source payloads.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckInput {\n read: TraceReadResult;\n selectedRun?: InspectRunTree;\n sourceLabel?: string;\n}\n\n/**\n * Experimental normalized facts available to trace-check rules.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckFacts {\n format: string;\n runs: readonly InspectRunTree[];\n events: readonly PersistedInspectEvent[];\n readerWarnings: readonly TraceReadWarning[];\n unsupportedFields: readonly string[];\n sourceFiles: readonly string[];\n nodesByEventId: ReadonlyMap<string, InspectNode>;\n childrenByParentId: ReadonlyMap<string, readonly InspectNode[]>;\n rootNodes: readonly InspectNode[];\n}\n\n/**\n * Experimental rule evaluation context.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckContext extends TraceCheckFacts {\n selectedRun?: InspectRunTree;\n sourceLabel?: string;\n}\n\n/**\n * Experimental trace-check rule definition.\n *\n * Rules are synchronous and pure: they receive normalized facts and return\n * findings without reading files, mutating input, or performing network I/O.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckRule {\n id: string;\n category: TraceCheckRuleCategory;\n defaultSeverity: TraceCheckSeverity;\n evaluate(context: TraceCheckContext): readonly TraceCheckFinding[];\n}\n\n/**\n * Experimental options for `runTraceChecks`.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RunTraceChecksOptions {\n rules?: readonly TraceCheckRule[];\n select?: readonly string[];\n runId?: string;\n}\n\n/**\n * Experimental options for the built-in run status rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RunStatusRuleOptions {\n expected?: \"ok\" | \"error\" | \"running\";\n allowIncomplete?: boolean;\n}\n\n/**\n * Experimental options for the built-in run duration rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RunDurationRuleOptions {\n maxDurationMs: number;\n}\n\n/**\n * Experimental options for the built-in max step duration rule.\n */\nexport interface MaxStepDurationRuleOptions {\n maxDurationMs: number;\n}\n\n/**\n * Experimental options for stall detection (running / incomplete events).\n */\nexport interface StallDetectionRuleOptions {\n /** When true, events with startedAt but no endedAt also fail. */\n requireEndedAt?: boolean;\n}\n\n/**\n * Experimental options for the built-in event count rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RunEventCountRuleOptions {\n kind?: PersistedInspectEvent[\"kind\"];\n min?: number;\n max?: number;\n}\n\n/**\n * Experimental options for the built-in run depth rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RunDepthRuleOptions {\n maxDepth: number;\n}\n\n/**\n * Experimental options for the built-in tool usage rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface ToolUsageRuleOptions {\n required?: readonly string[];\n forbidden?: readonly string[];\n allowed?: readonly string[];\n minCount?: number;\n maxCount?: number;\n}\n\n/**\n * Experimental options for the built-in tool ordering rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface ToolOrderingRuleOptions {\n before: string;\n after: string;\n}\n\n/**\n * Experimental options for the built-in tool failure rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface ToolFailureRuleOptions {\n maxFailures?: number;\n maxRetries?: number;\n}\n\n/**\n * Experimental options for the built-in LLM usage rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface LlmUsageRuleOptions {\n allowedModels?: readonly string[];\n allowedProviders?: readonly string[];\n maxCalls?: number;\n maxInputTokens?: number;\n maxOutputTokens?: number;\n maxTotalTokens?: number;\n maxCachedTokens?: number;\n finishReasons?: readonly string[];\n}\n\n/**\n * Experimental options for the built-in structure incomplete rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface StructureIncompleteRuleOptions {\n allowRunning?: boolean;\n requireEndedAtForStarted?: boolean;\n}\n\n/**\n * Experimental options for the built-in structure orphan rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface StructureOrphanRuleOptions {\n allowMarkedUnresolved?: boolean;\n}\n\n/**\n * Experimental options for the built-in structure relationship rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface StructureRelationshipRuleOptions {\n minConfidence?: AttributionConfidence;\n requireParentBeforeChild?: boolean;\n requireTraceParentSpan?: boolean;\n}\n\n/**\n * Experimental options for the built-in structure parallel-width rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface StructureParallelWidthRuleOptions {\n maxChildren?: number;\n maxConcurrent?: number;\n}\n\n/**\n * Experimental options shared by built-in signal rules.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceSignalRuleOptions {\n required?: readonly string[];\n forbidden?: readonly string[];\n allowed?: readonly string[];\n minCount?: number;\n maxCount?: number;\n}\n\n/**\n * Experimental options for the built-in retrieval signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RetrievalRuleOptions extends TraceSignalRuleOptions {}\n\n/**\n * Experimental options for the built-in guardrail signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface GuardrailRuleOptions extends TraceSignalRuleOptions {}\n\n/**\n * Experimental options for the built-in decision signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface DecisionRuleOptions extends TraceSignalRuleOptions {}\n\n/**\n * Experimental options for the built-in safety redaction rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface SafetyRedactionRuleOptions {\n sensitiveKeys?: readonly string[];\n redactedMarkers?: readonly string[];\n maxFindings?: number;\n}\n\n/**\n * Experimental options for the built-in raw content path rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface SafetyRawContentRuleOptions {\n forbiddenKeys?: readonly string[];\n includeSummaries?: boolean;\n maxFindings?: number;\n}\n\n/**\n * Experimental secret pattern used by the built-in secret safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface SafetySecretPattern {\n id: string;\n pattern: RegExp;\n}\n\n/**\n * Experimental options for the built-in secret pattern safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface SafetySecretPatternRuleOptions {\n patterns?: readonly SafetySecretPattern[];\n maxStringLength?: number;\n maxFindings?: number;\n}\n\n/**\n * Experimental options for the built-in oversized attribute safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface SafetyOversizedAttributeRuleOptions {\n maxStringLength?: number;\n maxArrayLength?: number;\n maxObjectKeys?: number;\n maxSerializedBytes?: number;\n maxFindings?: number;\n}\n\n/**\n * Experimental options for the built-in baseline regression rule.\n *\n * The baseline must already be normalized through `agent-inspect/readers` or an\n * equivalent `TraceReadResult`; this rule does not read files or parse traces.\n * `durationToleranceMs` defaults to `0`, meaning exact duration comparison.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface BaselineRegressionRuleOptions {\n baseline: TraceCheckInput;\n baselineRunId?: string;\n durationToleranceMs?: number;\n compareFormat?: boolean;\n}\n\n/**\n * Experimental aggregate counts for trace-check results.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckSummary {\n passed: number;\n failed: number;\n warnings: number;\n errors: number;\n}\n\n/**\n * Experimental trace-check result.\n *\n * `status: \"fail\"` means rules ran and at least one error-severity finding\n * failed. `status: \"error\"` means execution could not complete because of\n * invalid input, invalid rule selection, or a thrown rule error.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckResult {\n ok: boolean;\n status: TraceCheckStatus;\n format: string;\n runId?: string;\n summary: TraceCheckSummary;\n findings: TraceCheckFinding[];\n diagnostics: TraceCheckDiagnostic[];\n}\n\nconst SEVERITY_RANK: Record<TraceCheckSeverity, number> = {\n error: 0,\n warning: 1,\n info: 2,\n};\n\nconst STATUS_RANK: Record<TraceCheckFindingStatus, number> = {\n fail: 0,\n warning: 1,\n pass: 2,\n};\n\nconst CONFIDENCE_RANK: Record<AttributionConfidence, number> = {\n unknown: 0,\n heuristic: 1,\n correlated: 2,\n explicit: 3,\n};\n\nconst DEFAULT_SENSITIVE_KEYS = [\n \"authorization\",\n \"cookie\",\n \"token\",\n \"apikey\",\n \"api_key\",\n \"password\",\n \"secret\",\n \"email\",\n];\n\nconst DEFAULT_RAW_CONTENT_KEYS = [\n \"body\",\n \"headers\",\n \"input\",\n \"messages\",\n \"output\",\n \"payload\",\n \"prompt\",\n \"requestbody\",\n \"request_body\",\n \"responsebody\",\n \"response_body\",\n \"rawprompt\",\n \"raw_prompt\",\n \"rawoutput\",\n \"raw_output\",\n \"toolinput\",\n \"tool_input\",\n \"tooloutput\",\n \"tool_output\",\n];\n\nconst DEFAULT_SECRET_PATTERNS: readonly SafetySecretPattern[] = [\n { id: \"bearer-token\", pattern: /Bearer\\s+[A-Za-z0-9._~+/-]{12,}=*/ },\n { id: \"openai-key\", pattern: /sk-[A-Za-z0-9_-]{16,}/ },\n { id: \"aws-access-key\", pattern: /AKIA[0-9A-Z]{16}/ },\n { id: \"github-token\", pattern: /gh[opsu]_[A-Za-z0-9_]{20,}/ },\n { id: \"key-value-secret\", pattern: /(api[_-]?key|token|password|secret)=\\S{8,}/i },\n];\n\ntype EventValueEntry = {\n event: PersistedInspectEvent;\n path: string;\n key?: string;\n value: unknown;\n};\n\nfunction compareStrings(a: string | undefined, b: string | undefined): number {\n return (a ?? \"\").localeCompare(b ?? \"\");\n}\n\nfunction diagnostic(\n code: TraceCheckDiagnosticCode,\n message: string,\n ruleId?: string,\n): TraceCheckDiagnostic {\n return {\n code,\n message,\n severity: \"error\",\n ...(ruleId ? { ruleId } : {}),\n };\n}\n\nfunction emptySummary(): TraceCheckSummary {\n return {\n passed: 0,\n failed: 0,\n warnings: 0,\n errors: 0,\n };\n}\n\nfunction errorResult(\n input: TraceCheckInput,\n diagnostics: readonly TraceCheckDiagnostic[],\n selectedRun?: InspectRunTree,\n): TraceCheckResult {\n return {\n ok: false,\n status: \"error\",\n format: input.read.format,\n ...(selectedRun ? { runId: selectedRun.runId } : {}),\n summary: {\n ...emptySummary(),\n errors: diagnostics.filter((item) => item.severity === \"error\").length,\n },\n findings: [],\n diagnostics: [...diagnostics],\n };\n}\n\nfunction flattenNodes(nodes: readonly InspectNode[]): InspectNode[] {\n return nodes.flatMap((node) => [node, ...flattenNodes(node.children)]);\n}\n\nfunction buildFacts(input: TraceCheckInput, selectedRun?: InspectRunTree): TraceCheckFacts {\n const scopedRuns = selectedRun ? [selectedRun] : input.read.runs;\n const scopedRunIds = new Set(scopedRuns.map((run) => run.runId));\n const scopedEvents =\n selectedRun === undefined\n ? input.read.events\n : input.read.events.filter((event) => scopedRunIds.has(event.runId));\n const nodes = flattenNodes(scopedRuns.flatMap((run) => run.children));\n const nodesByEventId = new Map<string, InspectNode>();\n const childrenByParentId = new Map<string, InspectNode[]>();\n\n for (const node of nodes) {\n nodesByEventId.set(node.event.eventId, node);\n const parentId = node.event.parentId;\n if (parentId) {\n const children = childrenByParentId.get(parentId) ?? [];\n children.push(node);\n childrenByParentId.set(parentId, children);\n }\n }\n\n return {\n format: input.read.format,\n runs: Object.freeze([...input.read.runs]),\n events: Object.freeze([...scopedEvents]),\n readerWarnings: Object.freeze([...input.read.warnings]),\n unsupportedFields: Object.freeze([...input.read.unsupportedFields]),\n sourceFiles: Object.freeze([...input.read.sourceFiles]),\n nodesByEventId,\n childrenByParentId,\n rootNodes: Object.freeze(scopedRuns.flatMap((run) => run.children)),\n };\n}\n\nfunction resolveSelectedRun(\n input: TraceCheckInput,\n runId?: string,\n): { run?: InspectRunTree; diagnostics: TraceCheckDiagnostic[] } {\n if (input.selectedRun) {\n if (runId && input.selectedRun.runId !== runId) {\n return {\n diagnostics: [\n diagnostic(\n \"AI_CHECK_INVALID_ARGUMENTS\",\n `Selected run ${input.selectedRun.runId} does not match requested run ${runId}.`,\n ),\n ],\n };\n }\n return { run: input.selectedRun, diagnostics: [] };\n }\n\n if (runId) {\n const run = input.read.runs.find((candidate) => candidate.runId === runId);\n if (!run) {\n return {\n diagnostics: [\n diagnostic(\"AI_CHECK_RUN_SELECTION_REQUIRED\", `Run not found: ${runId}.`),\n ],\n };\n }\n return { run, diagnostics: [] };\n }\n\n if (input.read.runs.length === 1) {\n return { run: input.read.runs[0], diagnostics: [] };\n }\n\n if (input.read.runs.length === 0) {\n return {\n diagnostics: [\n diagnostic(\"AI_CHECK_RUN_SELECTION_REQUIRED\", \"No runs are available for checks.\"),\n ],\n };\n }\n\n return {\n diagnostics: [\n diagnostic(\n \"AI_CHECK_RUN_SELECTION_REQUIRED\",\n \"Multiple runs are available; select a run before executing checks.\",\n ),\n ],\n };\n}\n\nfunction selectRules(\n rules: readonly TraceCheckRule[],\n selectedIds: readonly string[] | undefined,\n): { rules: TraceCheckRule[]; diagnostics: TraceCheckDiagnostic[] } {\n const diagnostics: TraceCheckDiagnostic[] = [];\n const byId = new Map<string, TraceCheckRule>();\n\n for (const rule of rules) {\n if (byId.has(rule.id)) {\n diagnostics.push(\n diagnostic(\"AI_CHECK_INVALID_CONFIG\", `Duplicate trace check rule id: ${rule.id}.`, rule.id),\n );\n continue;\n }\n byId.set(rule.id, rule);\n }\n\n if (selectedIds && selectedIds.length > 0) {\n const selected = new Set(selectedIds);\n for (const id of selected) {\n if (!byId.has(id)) {\n diagnostics.push(\n diagnostic(\"AI_CHECK_INVALID_CONFIG\", `Unknown trace check rule id: ${id}.`, id),\n );\n }\n }\n return {\n rules: [...byId.values()].filter((rule) => selected.has(rule.id)).sort(compareRules),\n diagnostics,\n };\n }\n\n return { rules: [...byId.values()].sort(compareRules), diagnostics };\n}\n\nfunction compareRules(a: TraceCheckRule, b: TraceCheckRule): number {\n return a.id.localeCompare(b.id);\n}\n\nfunction eventTimestamp(\n finding: TraceCheckFinding,\n eventById: ReadonlyMap<string, PersistedInspectEvent>,\n): string {\n const eventId = finding.evidence[0]?.eventId;\n return eventId ? eventById.get(eventId)?.timestamp ?? \"\" : \"\";\n}\n\nfunction compareFindings(\n eventById: ReadonlyMap<string, PersistedInspectEvent>,\n): (a: TraceCheckFinding, b: TraceCheckFinding) => number {\n return (a, b) => {\n if (SEVERITY_RANK[a.severity] !== SEVERITY_RANK[b.severity]) {\n return SEVERITY_RANK[a.severity] - SEVERITY_RANK[b.severity];\n }\n const byRule = a.ruleId.localeCompare(b.ruleId);\n if (byRule !== 0) return byRule;\n if (STATUS_RANK[a.status] !== STATUS_RANK[b.status]) {\n return STATUS_RANK[a.status] - STATUS_RANK[b.status];\n }\n const byRun = compareStrings(a.evidence[0]?.runId, b.evidence[0]?.runId);\n if (byRun !== 0) return byRun;\n const byTime = eventTimestamp(a, eventById).localeCompare(eventTimestamp(b, eventById));\n if (byTime !== 0) return byTime;\n const byEvent = compareStrings(a.evidence[0]?.eventId, b.evidence[0]?.eventId);\n if (byEvent !== 0) return byEvent;\n return compareStrings(a.evidence[0]?.path, b.evidence[0]?.path);\n };\n}\n\nfunction normalizeFinding(rule: TraceCheckRule, finding: TraceCheckFinding): TraceCheckFinding {\n return {\n ruleId: finding.ruleId || rule.id,\n severity: finding.severity ?? rule.defaultSeverity,\n status: finding.status,\n message: finding.message,\n ...(finding.expected !== undefined ? { expected: finding.expected } : {}),\n ...(finding.actual !== undefined ? { actual: finding.actual } : {}),\n evidence: [...(finding.evidence ?? [])],\n };\n}\n\nfunction summarize(\n findings: readonly TraceCheckFinding[],\n diagnostics: readonly TraceCheckDiagnostic[],\n): TraceCheckSummary {\n return {\n passed: findings.filter((finding) => finding.status === \"pass\").length,\n failed: findings.filter(\n (finding) => finding.status === \"fail\" && finding.severity === \"error\",\n ).length,\n warnings: findings.filter(\n (finding) => finding.status === \"warning\" || finding.severity === \"warning\",\n ).length,\n errors: diagnostics.filter((item) => item.severity === \"error\").length,\n };\n}\n\nfunction stringAttr(event: PersistedInspectEvent, keys: readonly string[]): string | undefined {\n for (const key of keys) {\n const value = event.attributes?.[key];\n if (typeof value === \"string\" && value.trim() !== \"\") return value;\n }\n return undefined;\n}\n\nfunction numericAttr(event: PersistedInspectEvent, keys: readonly string[]): number | undefined {\n for (const key of keys) {\n const value = event.attributes?.[key];\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n }\n return undefined;\n}\n\nfunction booleanAttr(event: PersistedInspectEvent, keys: readonly string[]): boolean | undefined {\n for (const key of keys) {\n const value = event.attributes?.[key];\n if (typeof value === \"boolean\") return value;\n }\n return undefined;\n}\n\nfunction stripPrefix(name: string, prefixes: readonly string[]): string {\n for (const prefix of prefixes) {\n if (name.startsWith(prefix)) return name.slice(prefix.length);\n }\n return name;\n}\n\nfunction eventEvidence(event: PersistedInspectEvent, path?: string): TraceCheckEvidence {\n return {\n runId: event.runId,\n eventId: event.eventId,\n parentId: event.parentId,\n traceId: event.trace?.traceId,\n spanId: event.trace?.spanId,\n kind: event.kind,\n name: event.name,\n status: event.status,\n ...(path ? { path } : {}),\n };\n}\n\nfunction runEvidence(run: InspectRunTree | undefined): TraceCheckEvidence[] {\n return run ? [{ runId: run.runId, name: run.name, status: run.status }] : [];\n}\n\nfunction failFinding(\n ruleId: string,\n message: string,\n evidence: readonly TraceCheckEvidence[],\n expected?: unknown,\n actual?: unknown,\n): TraceCheckFinding {\n return {\n ruleId,\n severity: \"error\",\n status: \"fail\",\n message,\n ...(expected !== undefined ? { expected } : {}),\n ...(actual !== undefined ? { actual } : {}),\n evidence: [...evidence],\n };\n}\n\nfunction toolName(event: PersistedInspectEvent): string {\n return (\n stringAttr(event, [\"toolName\", \"tool\"]) ??\n stripPrefix(event.name, [\"tool:\", \"function:\", \"mcp-tools:\"])\n );\n}\n\nfunction llmModel(event: PersistedInspectEvent): string | undefined {\n return (\n stringAttr(event, [\"model\", \"modelId\", \"responseModelId\", \"modelName\", \"model_name\"]) ??\n stripPrefix(event.name, [\"llm:\", \"generation:\", \"transcription:\", \"speech:\"])\n );\n}\n\nfunction llmProvider(event: PersistedInspectEvent): string | undefined {\n return stringAttr(event, [\"provider\", \"providerName\", \"provider_name\"]);\n}\n\nfunction llmFinishReason(event: PersistedInspectEvent): string | undefined {\n return stringAttr(event, [\"finishReason\", \"rawFinishReason\", \"finish_reason\"]);\n}\n\nfunction retryCount(event: PersistedInspectEvent): number | undefined {\n return numericAttr(event, [\"retryCount\", \"retryAttempt\", \"retry_attempt\", \"attempt\"]);\n}\n\nfunction finishedEvents(context: TraceCheckContext, kind?: PersistedInspectEvent[\"kind\"]): PersistedInspectEvent[] {\n return context.events.filter(\n (event) =>\n (kind === undefined || event.kind === kind) &&\n event.status !== \"running\",\n );\n}\n\nfunction firstIndexByName(events: readonly PersistedInspectEvent[]): Map<string, number> {\n const index = new Map<string, number>();\n for (const [position, event] of events.entries()) {\n const name = toolName(event);\n if (!index.has(name)) index.set(name, position);\n }\n return index;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction eventMap(events: readonly PersistedInspectEvent[]): Map<string, PersistedInspectEvent> {\n return new Map(events.map((event) => [event.eventId, event]));\n}\n\nfunction parseEventTime(value: string | undefined): number | undefined {\n if (!value) return undefined;\n const parsed = Date.parse(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction eventStartMs(event: PersistedInspectEvent): number | undefined {\n return parseEventTime(event.startedAt) ?? parseEventTime(event.timestamp);\n}\n\nfunction eventEndMs(event: PersistedInspectEvent): number | undefined {\n const endedAt = parseEventTime(event.endedAt);\n if (endedAt !== undefined) return endedAt;\n const startedAt = eventStartMs(event);\n if (\n startedAt !== undefined &&\n event.durationMs !== undefined &&\n Number.isFinite(event.durationMs)\n ) {\n return startedAt + event.durationMs;\n }\n return undefined;\n}\n\nfunction sortedStrings(values: readonly string[] | undefined): string[] {\n return [...(values ?? [])].sort((a, b) => a.localeCompare(b));\n}\n\nfunction normalizedKey(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9_]/g, \"\");\n}\n\nfunction lastPathSegment(path: string): string {\n const parts = path.split(\".\");\n return parts[parts.length - 1] ?? path;\n}\n\nfunction valueType(value: unknown): string {\n if (Array.isArray(value)) return \"array\";\n if (value === null) return \"null\";\n return typeof value;\n}\n\nfunction serializedByteLength(value: unknown): number | undefined {\n try {\n return Buffer.byteLength(JSON.stringify(value), \"utf-8\");\n } catch {\n return undefined;\n }\n}\n\nfunction pushValueEntries(\n entries: EventValueEntry[],\n event: PersistedInspectEvent,\n value: unknown,\n path: string,\n key?: string,\n depth = 0,\n): void {\n entries.push({ event, path, key, value });\n if (depth >= 8) return;\n\n if (Array.isArray(value)) {\n for (const [index, item] of value.entries()) {\n pushValueEntries(entries, event, item, `${path}.${index}`, String(index), depth + 1);\n }\n return;\n }\n\n if (!isRecord(value)) return;\n for (const nestedKey of Object.keys(value).sort((a, b) => a.localeCompare(b))) {\n pushValueEntries(\n entries,\n event,\n value[nestedKey],\n `${path}.${nestedKey}`,\n nestedKey,\n depth + 1,\n );\n }\n}\n\nfunction eventValueEntries(\n event: PersistedInspectEvent,\n options: { includeSummaries?: boolean; includeError?: boolean } = {},\n): EventValueEntry[] {\n const entries: EventValueEntry[] = [];\n if (event.attributes !== undefined) {\n pushValueEntries(entries, event, event.attributes, \"attributes\", \"attributes\");\n }\n if (options.includeSummaries) {\n if (event.inputSummary !== undefined) {\n pushValueEntries(entries, event, event.inputSummary, \"inputSummary\", \"inputSummary\");\n }\n if (event.outputSummary !== undefined) {\n pushValueEntries(entries, event, event.outputSummary, \"outputSummary\", \"outputSummary\");\n }\n }\n if (options.includeError && event.error !== undefined) {\n pushValueEntries(entries, event, event.error, \"error\", \"error\");\n }\n return entries;\n}\n\nfunction limitFindings(\n findings: TraceCheckFinding[],\n maxFindings: number | undefined,\n): TraceCheckFinding[] {\n if (maxFindings === undefined || findings.length <= maxFindings) return findings;\n return findings.slice(0, Math.max(0, maxFindings));\n}\n\nfunction hasRedactionMarker(value: string, markers: readonly string[]): boolean {\n return markers.some((marker) => value.includes(marker)) || /^\\[HASH:[A-Za-z0-9_-]+\\]$/.test(value);\n}\n\nfunction isSensitiveKey(key: string | undefined, sensitiveKeys: readonly string[]): boolean {\n if (!key) return false;\n const normalized = normalizedKey(key);\n return sensitiveKeys.some((sensitive) => normalized.includes(normalizedKey(sensitive)));\n}\n\nfunction isRawContentKey(key: string | undefined, forbiddenKeys: readonly string[]): boolean {\n if (!key) return false;\n const normalized = normalizedKey(key);\n return forbiddenKeys.some((forbidden) => normalized === normalizedKey(forbidden));\n}\n\nfunction parentMarkedUnresolved(event: PersistedInspectEvent): boolean {\n if (\n booleanAttr(event, [\n \"parentUnresolved\",\n \"unresolvedParent\",\n \"relationshipUnresolved\",\n \"unresolvedRelationship\",\n ]) === true\n ) {\n return true;\n }\n const resolution = stringAttr(event, [\n \"parentResolution\",\n \"relationshipResolution\",\n \"relationshipStatus\",\n ]);\n return resolution === \"unresolved\" || resolution === \"missing-parent\";\n}\n\nfunction signalName(\n event: PersistedInspectEvent,\n attributeKeys: readonly string[],\n prefixes: readonly string[],\n): string {\n return stringAttr(event, attributeKeys) ?? stripPrefix(event.name, prefixes);\n}\n\nfunction guardrailEvents(context: TraceCheckContext): PersistedInspectEvent[] {\n return finishedEvents().filter((event) => {\n const name = event.name.toLowerCase();\n if (name.startsWith(\"guardrail:\") || name.includes(\".guardrail.\")) return true;\n return stringAttr(event, [\"guardrailName\", \"guardrail\", \"guardrailId\"]) !== undefined;\n });\n\n function finishedEvents(): PersistedInspectEvent[] {\n return context.events.filter((event) => event.status !== \"running\");\n }\n}\n\nfunction retryValue(event: PersistedInspectEvent): number {\n return retryCount(event) ?? 0;\n}\n\nfunction eventDurationMs(event: PersistedInspectEvent): number | undefined {\n if (event.durationMs !== undefined) return event.durationMs;\n const start = eventStartMs(event);\n const end = eventEndMs(event);\n return start !== undefined && end !== undefined && end >= start ? end - start : undefined;\n}\n\nfunction treeShape(nodes: readonly InspectNode[]): string[] {\n const lines: string[] = [];\n const visit = (node: InspectNode, path: string) => {\n lines.push(`${path}:${node.event.kind}:${node.event.name}:${node.event.status ?? \"unknown\"}`);\n node.children.forEach((child, index) => visit(child, `${path}.${index}`));\n };\n nodes.forEach((node, index) => visit(node, String(index)));\n return lines;\n}\n\nfunction statusShape(context: TraceCheckContext): string[] {\n return context.events\n .map((event) => `${event.kind}:${event.name}:${event.status ?? \"unknown\"}`)\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction toolShape(context: TraceCheckContext): string[] {\n return finishedEvents(context, \"TOOL\").map((event) =>\n [\n toolName(event),\n event.status ?? \"unknown\",\n retryValue(event),\n eventDurationMs(event) ?? \"unknown\",\n ].join(\":\"),\n );\n}\n\nfunction llmShape(context: TraceCheckContext): string[] {\n return finishedEvents(context, \"LLM\").map((event) =>\n [\n llmProvider(event) ?? \"unknown\",\n llmModel(event) ?? \"unknown\",\n llmFinishReason(event) ?? \"unknown\",\n event.tokenUsage?.input ?? 0,\n event.tokenUsage?.output ?? 0,\n event.tokenUsage?.total ?? 0,\n event.tokenUsage?.cached ?? 0,\n ].join(\":\"),\n );\n}\n\nfunction errorShape(context: TraceCheckContext): string[] {\n return context.events\n .filter((event) => event.status === \"error\" || event.error !== undefined)\n .map((event) =>\n [\n event.kind,\n event.name,\n event.error?.name ?? \"Error\",\n event.error?.code ?? \"unknown\",\n ].join(\":\"),\n )\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction retrievalShape(context: TraceCheckContext): string[] {\n return finishedEvents(context, \"RETRIEVER\")\n .map((event) =>\n signalName(event, [\"retrievalName\", \"retrieverName\", \"retriever\"], [\"retriever:\", \"retrieval:\"]),\n )\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction guardrailShape(context: TraceCheckContext): string[] {\n return guardrailEvents(context)\n .map((event) => signalName(event, [\"guardrailName\", \"guardrail\", \"guardrailId\"], [\"guardrail:\"]))\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction firstEvidenceForKind(\n context: TraceCheckContext,\n kind: PersistedInspectEvent[\"kind\"],\n path: string,\n): TraceCheckEvidence[] {\n const event = context.events.find((candidate) => candidate.kind === kind);\n return event ? [eventEvidence(event, path)] : runEvidence(context.selectedRun);\n}\n\nfunction baselineDiffFinding(\n message: string,\n evidence: readonly TraceCheckEvidence[],\n expected: unknown,\n actual: unknown,\n): TraceCheckFinding {\n return failFinding(\"baseline.regression\", message, evidence, expected, actual);\n}\n\n/**\n * Create the experimental built-in run status rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createRunStatusRule(options: RunStatusRuleOptions = {}): TraceCheckRule {\n const expected = options.expected ?? \"ok\";\n const allowIncomplete = options.allowIncomplete === true;\n return {\n id: \"run.status\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const actual = context.selectedRun?.status ?? \"unknown\";\n if (actual !== expected) {\n findings.push(\n failFinding(\n \"run.status\",\n `Run status ${actual} did not match expected ${expected}.`,\n runEvidence(context.selectedRun),\n expected,\n actual,\n ),\n );\n }\n if (!allowIncomplete) {\n const running = context.events.filter((event) => event.status === \"running\");\n if (running.length > 0) {\n findings.push(\n failFinding(\n \"run.status\",\n \"Run contains incomplete running events.\",\n running.map((event) => eventEvidence(event)),\n \"no running events\",\n running.length,\n ),\n );\n }\n }\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in run duration rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createRunDurationRule(options: RunDurationRuleOptions): TraceCheckRule {\n return {\n id: \"run.duration\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const actual = context.selectedRun?.durationMs;\n if (actual === undefined || actual <= options.maxDurationMs) return [];\n return [\n failFinding(\n \"run.duration\",\n `Run duration ${actual}ms exceeded ${options.maxDurationMs}ms.`,\n runEvidence(context.selectedRun),\n { maxDurationMs: options.maxDurationMs },\n actual,\n ),\n ];\n },\n };\n}\n\n/**\n * Fail when any step duration exceeds the configured maximum.\n */\nexport function createMaxStepDurationRule(options: MaxStepDurationRuleOptions): TraceCheckRule {\n return {\n id: \"run.maxStepDuration\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const over = context.events.filter((event) => {\n const duration = eventDurationMs(event);\n return duration !== undefined && duration > options.maxDurationMs;\n });\n if (over.length === 0) return [];\n return [\n failFinding(\n \"run.maxStepDuration\",\n `${over.length} step(s) exceeded max duration ${options.maxDurationMs}ms.`,\n over.map((event) => eventEvidence(event, \"durationMs\")),\n { maxDurationMs: options.maxDurationMs },\n over.map((event) => ({\n eventId: event.eventId,\n name: event.name,\n durationMs: eventDurationMs(event),\n })),\n ),\n ];\n },\n };\n}\n\n/**\n * Detect stalled runs: running events and optionally started-but-unended events.\n */\nexport function createStallDetectionRule(\n options: StallDetectionRuleOptions = {},\n): TraceCheckRule {\n const requireEndedAt = options.requireEndedAt === true;\n return {\n id: \"run.stall\",\n category: \"run\",\n defaultSeverity: \"warning\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const running = context.events.filter((event) => event.status === \"running\");\n if (running.length > 0) {\n findings.push(\n failFinding(\n \"run.stall\",\n `Found ${running.length} event(s) still running (possible stall).`,\n running.map((event) => eventEvidence(event, \"status\")),\n \"no running events\",\n running.length,\n ),\n );\n }\n if (requireEndedAt) {\n const incomplete = context.events.filter(\n (event) =>\n event.startedAt !== undefined &&\n event.endedAt === undefined &&\n event.status !== \"running\",\n );\n if (incomplete.length > 0) {\n findings.push(\n failFinding(\n \"run.stall\",\n `Found ${incomplete.length} started event(s) without endedAt.`,\n incomplete.map((event) => eventEvidence(event, \"endedAt\")),\n \"endedAt for started events\",\n incomplete.length,\n ),\n );\n }\n }\n return findings;\n },\n };\n}\n\n/**\n * Require a completed run with no running events.\n */\nexport function createRequireCompletedRule(): TraceCheckRule {\n return {\n id: \"run.requireCompleted\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const runStatus = context.selectedRun?.status;\n if (runStatus === \"running\") {\n findings.push(\n failFinding(\n \"run.requireCompleted\",\n \"Run is still running.\",\n runEvidence(context.selectedRun),\n \"completed run\",\n runStatus,\n ),\n );\n }\n const running = context.events.filter((event) => event.status === \"running\");\n if (running.length > 0) {\n findings.push(\n failFinding(\n \"run.requireCompleted\",\n `Run has ${running.length} incomplete running event(s).`,\n running.map((event) => eventEvidence(event, \"status\")),\n \"no running events\",\n running.length,\n ),\n );\n }\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in event count rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createRunEventCountRule(options: RunEventCountRuleOptions): TraceCheckRule {\n return {\n id: \"run.eventCount\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const count = context.events.filter(\n (event) => options.kind === undefined || event.kind === options.kind,\n ).length;\n const findings: TraceCheckFinding[] = [];\n if (options.min !== undefined && count < options.min) {\n findings.push(\n failFinding(\n \"run.eventCount\",\n `Event count ${count} was below minimum ${options.min}.`,\n runEvidence(context.selectedRun),\n { kind: options.kind, min: options.min },\n count,\n ),\n );\n }\n if (options.max !== undefined && count > options.max) {\n findings.push(\n failFinding(\n \"run.eventCount\",\n `Event count ${count} exceeded maximum ${options.max}.`,\n runEvidence(context.selectedRun),\n { kind: options.kind, max: options.max },\n count,\n ),\n );\n }\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in run depth rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createRunDepthRule(options: RunDepthRuleOptions): TraceCheckRule {\n return {\n id: \"run.depth\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const nodes = [...context.nodesByEventId.values()];\n const maxDepth = nodes.reduce((max, node) => Math.max(max, node.depth), 0);\n if (maxDepth <= options.maxDepth) return [];\n const deepest = nodes.filter((node) => node.depth === maxDepth);\n return [\n failFinding(\n \"run.depth\",\n `Run depth ${maxDepth} exceeded ${options.maxDepth}.`,\n deepest.map((node) => ({\n runId: node.event.runId,\n eventId: node.event.eventId,\n parentId: node.event.parentId,\n kind: node.event.kind,\n name: node.event.name,\n status: node.event.status,\n })),\n { maxDepth: options.maxDepth },\n maxDepth,\n ),\n ];\n },\n };\n}\n\n/**\n * Create the experimental built-in tool usage rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createToolUsageRule(options: ToolUsageRuleOptions): TraceCheckRule {\n return {\n id: \"tool.usage\",\n category: \"tool\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const tools = finishedEvents(context, \"TOOL\");\n const names = tools.map(toolName);\n const nameSet = new Set(names);\n const findings: TraceCheckFinding[] = [];\n\n for (const required of options.required ?? []) {\n if (!nameSet.has(required)) {\n findings.push(\n failFinding(\"tool.usage\", `Required tool ${required} did not appear.`, runEvidence(context.selectedRun), required, names),\n );\n }\n }\n\n const forbidden = new Set(options.forbidden ?? []);\n const allowed = options.allowed ? new Set(options.allowed) : undefined;\n for (const event of tools) {\n const name = toolName(event);\n if (forbidden.has(name)) {\n findings.push(\n failFinding(\"tool.usage\", `Forbidden tool ${name} appeared.`, [eventEvidence(event)], \"tool absent\", name),\n );\n }\n if (allowed && !allowed.has(name)) {\n findings.push(\n failFinding(\"tool.usage\", `Tool ${name} is not in the allowed tool set.`, [eventEvidence(event)], [...allowed].sort(), name),\n );\n }\n }\n\n if (options.minCount !== undefined && tools.length < options.minCount) {\n findings.push(\n failFinding(\"tool.usage\", `Tool count ${tools.length} was below minimum ${options.minCount}.`, runEvidence(context.selectedRun), { minCount: options.minCount }, tools.length),\n );\n }\n if (options.maxCount !== undefined && tools.length > options.maxCount) {\n findings.push(\n failFinding(\"tool.usage\", `Tool count ${tools.length} exceeded maximum ${options.maxCount}.`, tools.map((event) => eventEvidence(event)), { maxCount: options.maxCount }, tools.length),\n );\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in tool ordering rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createToolOrderingRule(options: ToolOrderingRuleOptions): TraceCheckRule {\n return {\n id: \"tool.order\",\n category: \"tool\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const tools = finishedEvents(context, \"TOOL\");\n const index = firstIndexByName(tools);\n const beforeIndex = index.get(options.before);\n const afterIndex = index.get(options.after);\n if (beforeIndex === undefined || afterIndex === undefined || beforeIndex < afterIndex) {\n return [];\n }\n return [\n failFinding(\n \"tool.order\",\n `Tool ${options.before} must appear before ${options.after}.`,\n [eventEvidence(tools[beforeIndex]!), eventEvidence(tools[afterIndex]!)],\n { before: options.before, after: options.after },\n tools.map(toolName),\n ),\n ];\n },\n };\n}\n\n/**\n * Create the experimental built-in tool failure/retry rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createToolFailureRule(options: ToolFailureRuleOptions): TraceCheckRule {\n return {\n id: \"tool.failures\",\n category: \"tool\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const tools = finishedEvents(context, \"TOOL\");\n const failures = tools.filter((event) => event.status === \"error\");\n const retries = tools\n .map((event) => ({ event, count: retryCount(event) }))\n .filter((item): item is { event: PersistedInspectEvent; count: number } => item.count !== undefined);\n const findings: TraceCheckFinding[] = [];\n\n if (options.maxFailures !== undefined && failures.length > options.maxFailures) {\n findings.push(\n failFinding(\n \"tool.failures\",\n `Tool failure count ${failures.length} exceeded ${options.maxFailures}.`,\n failures.map((event) => eventEvidence(event)),\n { maxFailures: options.maxFailures },\n failures.length,\n ),\n );\n }\n\n if (options.maxRetries !== undefined) {\n const excessiveRetries = retries.filter((item) => item.count > options.maxRetries!);\n if (excessiveRetries.length > 0) {\n findings.push(\n failFinding(\n \"tool.failures\",\n `Tool retry count exceeded ${options.maxRetries}.`,\n excessiveRetries.map((item) => eventEvidence(item.event, \"attributes.retryCount\")),\n { maxRetries: options.maxRetries },\n excessiveRetries.map((item) => ({ tool: toolName(item.event), retries: item.count })),\n ),\n );\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in LLM usage rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createLlmUsageRule(options: LlmUsageRuleOptions): TraceCheckRule {\n return {\n id: \"llm.usage\",\n category: \"llm\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const llms = finishedEvents(context, \"LLM\");\n const findings: TraceCheckFinding[] = [];\n const allowedModels = options.allowedModels ? new Set(options.allowedModels) : undefined;\n const allowedProviders = options.allowedProviders ? new Set(options.allowedProviders) : undefined;\n const finishReasons = options.finishReasons ? new Set(options.finishReasons) : undefined;\n\n if (options.maxCalls !== undefined && llms.length > options.maxCalls) {\n findings.push(\n failFinding(\n \"llm.usage\",\n `LLM call count ${llms.length} exceeded ${options.maxCalls}.`,\n llms.map((event) => eventEvidence(event)),\n { maxCalls: options.maxCalls },\n llms.length,\n ),\n );\n }\n\n for (const event of llms) {\n const model = llmModel(event);\n const provider = llmProvider(event);\n const finishReason = llmFinishReason(event);\n if (allowedModels && (!model || !allowedModels.has(model))) {\n findings.push(\n failFinding(\"llm.usage\", `LLM model ${model ?? \"unknown\"} is not allowed.`, [eventEvidence(event, \"attributes.model\")], [...allowedModels].sort(), model ?? \"unknown\"),\n );\n }\n if (allowedProviders && (!provider || !allowedProviders.has(provider))) {\n findings.push(\n failFinding(\"llm.usage\", `LLM provider ${provider ?? \"unknown\"} is not allowed.`, [eventEvidence(event, \"attributes.provider\")], [...allowedProviders].sort(), provider ?? \"unknown\"),\n );\n }\n if (finishReasons && (!finishReason || !finishReasons.has(finishReason))) {\n findings.push(\n failFinding(\"llm.usage\", `LLM finish reason ${finishReason ?? \"unknown\"} is not allowed.`, [eventEvidence(event, \"attributes.finishReason\")], [...finishReasons].sort(), finishReason ?? \"unknown\"),\n );\n }\n }\n\n const tokenTotals = llms.reduce(\n (totals, event) => ({\n input: totals.input + (event.tokenUsage?.input ?? 0),\n output: totals.output + (event.tokenUsage?.output ?? 0),\n total: totals.total + (event.tokenUsage?.total ?? 0),\n cached: totals.cached + (event.tokenUsage?.cached ?? 0),\n }),\n { input: 0, output: 0, total: 0, cached: 0 },\n );\n const tokenLimits = [\n [\"input\", options.maxInputTokens],\n [\"output\", options.maxOutputTokens],\n [\"total\", options.maxTotalTokens],\n [\"cached\", options.maxCachedTokens],\n ] as const;\n for (const [key, limit] of tokenLimits) {\n if (limit !== undefined && tokenTotals[key] > limit) {\n findings.push(\n failFinding(\n \"llm.usage\",\n `LLM ${key} token count ${tokenTotals[key]} exceeded ${limit}.`,\n llms.map((event) => eventEvidence(event, `tokenUsage.${key}`)),\n { [`max${key[0]!.toUpperCase()}${key.slice(1)}Tokens`]: limit },\n tokenTotals[key],\n ),\n );\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in structure incomplete rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createStructureIncompleteRule(\n options: StructureIncompleteRuleOptions = {},\n): TraceCheckRule {\n return {\n id: \"structure.incomplete\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n if (!options.allowRunning) {\n const running = context.events.filter((event) => event.status === \"running\");\n if (running.length > 0) {\n findings.push(\n failFinding(\n \"structure.incomplete\",\n \"Trace contains incomplete running events.\",\n running.map((event) => eventEvidence(event, \"status\")),\n \"no running events\",\n running.length,\n ),\n );\n }\n }\n\n if (options.requireEndedAtForStarted) {\n const missingEndedAt = context.events.filter(\n (event) =>\n event.startedAt !== undefined &&\n event.endedAt === undefined &&\n event.status !== \"running\",\n );\n if (missingEndedAt.length > 0) {\n findings.push(\n failFinding(\n \"structure.incomplete\",\n \"Trace contains events with startedAt but no endedAt.\",\n missingEndedAt.map((event) => eventEvidence(event, \"endedAt\")),\n \"endedAt for started events\",\n missingEndedAt.length,\n ),\n );\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in structure orphan rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createStructureOrphanRule(\n options: StructureOrphanRuleOptions = {},\n): TraceCheckRule {\n const allowMarkedUnresolved = options.allowMarkedUnresolved ?? true;\n return {\n id: \"structure.orphan\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const byId = eventMap(context.events);\n const orphans = context.events.filter((event) => {\n if (!event.parentId || byId.has(event.parentId)) return false;\n return !(allowMarkedUnresolved && parentMarkedUnresolved(event));\n });\n if (orphans.length === 0) return [];\n return [\n failFinding(\n \"structure.orphan\",\n \"Trace contains events whose parentId is not present in the selected run.\",\n orphans.map((event) => eventEvidence(event, \"parentId\")),\n \"parentId resolves to an event in the selected run\",\n orphans.length,\n ),\n ];\n },\n };\n}\n\n/**\n * Create the experimental built-in structure cycle rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createStructureCycleRule(): TraceCheckRule {\n return {\n id: \"structure.cycle\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const byId = eventMap(context.events);\n const seenCycles = new Set<string>();\n const findings: TraceCheckFinding[] = [];\n\n for (const event of [...context.events].sort((a, b) => a.eventId.localeCompare(b.eventId))) {\n const path: PersistedInspectEvent[] = [];\n const seenAt = new Map<string, number>();\n let current: PersistedInspectEvent | undefined = event;\n\n while (current) {\n const existing = seenAt.get(current.eventId);\n if (existing !== undefined) {\n const cycle = path.slice(existing);\n const key = cycle.map((item) => item.eventId).sort().join(\"\\0\");\n if (!seenCycles.has(key)) {\n seenCycles.add(key);\n findings.push(\n failFinding(\n \"structure.cycle\",\n \"Trace contains a parentId cycle.\",\n cycle.map((item) => eventEvidence(item, \"parentId\")),\n \"acyclic parentId graph\",\n cycle.map((item) => item.eventId).sort(),\n ),\n );\n }\n break;\n }\n seenAt.set(current.eventId, path.length);\n path.push(current);\n current = current.parentId ? byId.get(current.parentId) : undefined;\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in structure relationship rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createStructureRelationshipRule(\n options: StructureRelationshipRuleOptions = {},\n): TraceCheckRule {\n return {\n id: \"structure.relationship\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const byId = eventMap(context.events);\n const findings: TraceCheckFinding[] = [];\n const minConfidence = options.minConfidence;\n\n for (const event of context.events) {\n if (\n minConfidence &&\n CONFIDENCE_RANK[event.confidence] < CONFIDENCE_RANK[minConfidence]\n ) {\n findings.push(\n failFinding(\n \"structure.relationship\",\n `Event confidence ${event.confidence} is below ${minConfidence}.`,\n [eventEvidence(event, \"confidence\")],\n { minConfidence },\n event.confidence,\n ),\n );\n }\n\n if (!event.parentId) continue;\n if (event.parentId === event.eventId) {\n findings.push(\n failFinding(\n \"structure.relationship\",\n \"Event parentId points to itself.\",\n [eventEvidence(event, \"parentId\")],\n \"parentId references a distinct event\",\n \"self\",\n ),\n );\n continue;\n }\n\n const parent = byId.get(event.parentId);\n if (!parent) continue;\n\n if (options.requireParentBeforeChild) {\n const parentTime = eventStartMs(parent);\n const childTime = eventStartMs(event);\n if (\n parentTime !== undefined &&\n childTime !== undefined &&\n parentTime > childTime\n ) {\n findings.push(\n failFinding(\n \"structure.relationship\",\n \"Parent event starts after child event.\",\n [eventEvidence(parent), eventEvidence(event, \"parentId\")],\n \"parent start <= child start\",\n { parentEventId: parent.eventId, childEventId: event.eventId },\n ),\n );\n }\n }\n\n if (options.requireTraceParentSpan && parent.trace?.spanId && event.trace) {\n const actual = event.trace.parentSpanId;\n if (actual !== parent.trace.spanId) {\n findings.push(\n failFinding(\n \"structure.relationship\",\n \"Trace parentSpanId does not match parent spanId.\",\n [eventEvidence(event, \"trace.parentSpanId\")],\n { parentSpanId: parent.trace.spanId },\n actual ?? \"missing\",\n ),\n );\n }\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in structure parallel-width rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createStructureParallelWidthRule(\n options: StructureParallelWidthRuleOptions,\n): TraceCheckRule {\n return {\n id: \"structure.parallelWidth\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const byId = eventMap(context.events);\n\n if (options.maxChildren !== undefined) {\n for (const [parentId, children] of context.childrenByParentId.entries()) {\n if (children.length <= options.maxChildren) continue;\n const parent = byId.get(parentId);\n findings.push(\n failFinding(\n \"structure.parallelWidth\",\n `Parent ${parentId} has ${children.length} children, exceeding ${options.maxChildren}.`,\n [\n ...(parent ? [eventEvidence(parent)] : [{ runId: context.selectedRun?.runId, eventId: parentId }]),\n ...children.map((child) => ({\n runId: child.event.runId,\n eventId: child.event.eventId,\n parentId: child.event.parentId,\n kind: child.event.kind,\n name: child.event.name,\n status: child.event.status,\n })),\n ],\n { maxChildren: options.maxChildren },\n children.length,\n ),\n );\n }\n }\n\n if (options.maxConcurrent !== undefined) {\n const intervals = context.events\n .map((event) => ({ event, start: eventStartMs(event), end: eventEndMs(event) }))\n .filter(\n (item): item is { event: PersistedInspectEvent; start: number; end: number } =>\n item.start !== undefined && item.end !== undefined && item.end > item.start,\n );\n const points = intervals.flatMap((item) => [\n { time: item.start, delta: 1, event: item.event },\n { time: item.end, delta: -1, event: item.event },\n ]);\n points.sort((a, b) => {\n const byTime = a.time - b.time;\n if (byTime !== 0) return byTime;\n const byDelta = a.delta - b.delta;\n if (byDelta !== 0) return byDelta;\n return a.event.eventId.localeCompare(b.event.eventId);\n });\n\n const active = new Map<string, PersistedInspectEvent>();\n let maxActive: PersistedInspectEvent[] = [];\n for (const point of points) {\n if (point.delta > 0) {\n active.set(point.event.eventId, point.event);\n if (active.size > maxActive.length) {\n maxActive = [...active.values()].sort((a, b) => a.eventId.localeCompare(b.eventId));\n }\n } else {\n active.delete(point.event.eventId);\n }\n }\n\n if (maxActive.length > options.maxConcurrent) {\n findings.push(\n failFinding(\n \"structure.parallelWidth\",\n `Concurrent event width ${maxActive.length} exceeded ${options.maxConcurrent}.`,\n maxActive.map((event) => eventEvidence(event)),\n { maxConcurrent: options.maxConcurrent },\n maxActive.length,\n ),\n );\n }\n }\n\n return findings;\n },\n };\n}\n\nfunction createSignalRule(\n ruleId: \"structure.retrieval\" | \"structure.guardrail\" | \"structure.decision\",\n label: string,\n options: TraceSignalRuleOptions,\n selectEvents: (context: TraceCheckContext) => PersistedInspectEvent[],\n nameForEvent: (event: PersistedInspectEvent) => string,\n): TraceCheckRule {\n return {\n id: ruleId,\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const events = selectEvents(context);\n const names = events.map(nameForEvent);\n const nameSet = new Set(names);\n const findings: TraceCheckFinding[] = [];\n\n for (const required of sortedStrings(options.required)) {\n if (!nameSet.has(required)) {\n findings.push(\n failFinding(\n ruleId,\n `Required ${label} ${required} did not appear.`,\n runEvidence(context.selectedRun),\n required,\n names,\n ),\n );\n }\n }\n\n const forbidden = new Set(options.forbidden ?? []);\n const allowed = options.allowed ? new Set(options.allowed) : undefined;\n for (const event of events) {\n const name = nameForEvent(event);\n if (forbidden.has(name)) {\n findings.push(\n failFinding(\n ruleId,\n `Forbidden ${label} ${name} appeared.`,\n [eventEvidence(event)],\n `${label} absent`,\n name,\n ),\n );\n }\n if (allowed && !allowed.has(name)) {\n findings.push(\n failFinding(\n ruleId,\n `${label[0]!.toUpperCase()}${label.slice(1)} ${name} is not in the allowed set.`,\n [eventEvidence(event)],\n [...allowed].sort(),\n name,\n ),\n );\n }\n }\n\n if (options.minCount !== undefined && events.length < options.minCount) {\n findings.push(\n failFinding(\n ruleId,\n `${label[0]!.toUpperCase()}${label.slice(1)} count ${events.length} was below minimum ${options.minCount}.`,\n runEvidence(context.selectedRun),\n { minCount: options.minCount },\n events.length,\n ),\n );\n }\n if (options.maxCount !== undefined && events.length > options.maxCount) {\n findings.push(\n failFinding(\n ruleId,\n `${label[0]!.toUpperCase()}${label.slice(1)} count ${events.length} exceeded maximum ${options.maxCount}.`,\n events.map((event) => eventEvidence(event)),\n { maxCount: options.maxCount },\n events.length,\n ),\n );\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in retrieval signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createRetrievalRule(options: RetrievalRuleOptions): TraceCheckRule {\n return createSignalRule(\n \"structure.retrieval\",\n \"retrieval\",\n options,\n (context) => finishedEvents(context, \"RETRIEVER\"),\n (event) => signalName(event, [\"retrievalName\", \"retrieverName\", \"retriever\"], [\"retriever:\", \"retrieval:\"]),\n );\n}\n\n/**\n * Create the experimental built-in guardrail signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createGuardrailRule(options: GuardrailRuleOptions): TraceCheckRule {\n return createSignalRule(\n \"structure.guardrail\",\n \"guardrail\",\n options,\n guardrailEvents,\n (event) => signalName(event, [\"guardrailName\", \"guardrail\", \"guardrailId\"], [\"guardrail:\"]),\n );\n}\n\n/**\n * Create the experimental built-in decision signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createDecisionRule(options: DecisionRuleOptions): TraceCheckRule {\n return createSignalRule(\n \"structure.decision\",\n \"decision\",\n options,\n (context) => finishedEvents(context, \"DECISION\"),\n (event) => signalName(event, [\"decisionName\", \"decision\", \"decisionId\"], [\"decision:\"]),\n );\n}\n\n/**\n * Create the experimental built-in safety redaction rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createSafetyRedactionRule(\n options: SafetyRedactionRuleOptions = {},\n): TraceCheckRule {\n const sensitiveKeys = options.sensitiveKeys ?? DEFAULT_SENSITIVE_KEYS;\n const markers = options.redactedMarkers ?? [\"[REDACTED]\", \"[REDACTED:\"];\n return {\n id: \"safety.redaction\",\n category: \"safety\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n for (const event of context.events) {\n for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {\n if (!isSensitiveKey(entry.key ?? lastPathSegment(entry.path), sensitiveKeys)) continue;\n if (typeof entry.value === \"string\" && hasRedactionMarker(entry.value, markers)) continue;\n findings.push(\n failFinding(\n \"safety.redaction\",\n `Sensitive-looking field at ${entry.path} is not redacted.`,\n [eventEvidence(event, entry.path)],\n \"redaction marker\",\n { path: entry.path, valueType: valueType(entry.value) },\n ),\n );\n }\n }\n return limitFindings(findings, options.maxFindings);\n },\n };\n}\n\n/**\n * Create the experimental built-in raw content path safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createSafetyRawContentRule(\n options: SafetyRawContentRuleOptions = {},\n): TraceCheckRule {\n const forbiddenKeys = options.forbiddenKeys ?? DEFAULT_RAW_CONTENT_KEYS;\n return {\n id: \"safety.rawPrompt\",\n category: \"safety\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n for (const event of context.events) {\n for (const entry of eventValueEntries(event, { includeSummaries: options.includeSummaries })) {\n const key = entry.key ?? lastPathSegment(entry.path);\n if (!isRawContentKey(key, forbiddenKeys)) continue;\n findings.push(\n failFinding(\n \"safety.rawPrompt\",\n `Raw content-like field ${entry.path} is present.`,\n [eventEvidence(event, entry.path)],\n \"metadata-only trace fields\",\n { path: entry.path, valueType: valueType(entry.value) },\n ),\n );\n }\n }\n return limitFindings(findings, options.maxFindings);\n },\n };\n}\n\n/**\n * Create the experimental built-in secret pattern safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createSafetySecretPatternRule(\n options: SafetySecretPatternRuleOptions = {},\n): TraceCheckRule {\n const patterns = options.patterns ?? DEFAULT_SECRET_PATTERNS;\n const maxStringLength = options.maxStringLength ?? 4_096;\n return {\n id: \"safety.secretPattern\",\n category: \"safety\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n for (const event of context.events) {\n for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {\n if (typeof entry.value !== \"string\") continue;\n const sample = entry.value.slice(0, maxStringLength);\n for (const pattern of patterns) {\n pattern.pattern.lastIndex = 0;\n if (!pattern.pattern.test(sample)) continue;\n pattern.pattern.lastIndex = 0;\n findings.push(\n failFinding(\n \"safety.secretPattern\",\n `Secret-like pattern ${pattern.id} matched at ${entry.path}.`,\n [eventEvidence(event, entry.path)],\n \"no secret-like strings\",\n { pattern: pattern.id, path: entry.path },\n ),\n );\n break;\n }\n }\n }\n return limitFindings(findings, options.maxFindings);\n },\n };\n}\n\n/**\n * Create the experimental built-in oversized attribute safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createSafetyOversizedAttributeRule(\n options: SafetyOversizedAttributeRuleOptions,\n): TraceCheckRule {\n return {\n id: \"safety.oversizedAttribute\",\n category: \"safety\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n for (const event of context.events) {\n for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {\n if (\n typeof entry.value === \"string\" &&\n options.maxStringLength !== undefined &&\n entry.value.length > options.maxStringLength\n ) {\n findings.push(\n failFinding(\n \"safety.oversizedAttribute\",\n `String at ${entry.path} exceeds ${options.maxStringLength} characters.`,\n [eventEvidence(event, entry.path)],\n { maxStringLength: options.maxStringLength },\n { path: entry.path, length: entry.value.length },\n ),\n );\n }\n\n if (\n Array.isArray(entry.value) &&\n options.maxArrayLength !== undefined &&\n entry.value.length > options.maxArrayLength\n ) {\n findings.push(\n failFinding(\n \"safety.oversizedAttribute\",\n `Array at ${entry.path} exceeds ${options.maxArrayLength} items.`,\n [eventEvidence(event, entry.path)],\n { maxArrayLength: options.maxArrayLength },\n { path: entry.path, length: entry.value.length },\n ),\n );\n }\n\n if (\n isRecord(entry.value) &&\n options.maxObjectKeys !== undefined &&\n Object.keys(entry.value).length > options.maxObjectKeys\n ) {\n findings.push(\n failFinding(\n \"safety.oversizedAttribute\",\n `Object at ${entry.path} exceeds ${options.maxObjectKeys} keys.`,\n [eventEvidence(event, entry.path)],\n { maxObjectKeys: options.maxObjectKeys },\n { path: entry.path, keys: Object.keys(entry.value).length },\n ),\n );\n }\n\n if (options.maxSerializedBytes !== undefined) {\n const bytes = serializedByteLength(entry.value);\n if (bytes !== undefined && bytes > options.maxSerializedBytes) {\n findings.push(\n failFinding(\n \"safety.oversizedAttribute\",\n `Value at ${entry.path} exceeds ${options.maxSerializedBytes} serialized bytes.`,\n [eventEvidence(event, entry.path)],\n { maxSerializedBytes: options.maxSerializedBytes },\n { path: entry.path, bytes },\n ),\n );\n }\n }\n }\n }\n return limitFindings(findings, options.maxFindings);\n },\n };\n}\n\n/**\n * Create the experimental built-in baseline regression rule.\n *\n * The rule compares safe structural summaries from a normalized baseline\n * against the candidate context. It intentionally ignores raw prompt/output,\n * request/response body, header, and tool payload text.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createBaselineRegressionRule(\n options: BaselineRegressionRuleOptions,\n): TraceCheckRule {\n return {\n id: \"baseline.regression\",\n category: \"baseline\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const baselineSelection = resolveSelectedRun(options.baseline, options.baselineRunId);\n if (baselineSelection.diagnostics.length > 0 || !baselineSelection.run) {\n return [\n failFinding(\n \"baseline.regression\",\n \"Baseline run could not be selected.\",\n runEvidence(context.selectedRun),\n \"selectable baseline run\",\n baselineSelection.diagnostics.map((item) => item.code),\n ),\n ];\n }\n\n const baselineFacts = buildFacts(options.baseline, baselineSelection.run);\n const baselineContext: TraceCheckContext = {\n ...baselineFacts,\n selectedRun: baselineSelection.run,\n sourceLabel: options.baseline.sourceLabel,\n };\n const findings: TraceCheckFinding[] = [];\n const durationToleranceMs = options.durationToleranceMs ?? 0;\n\n if (options.compareFormat && baselineContext.format !== context.format) {\n findings.push(\n baselineDiffFinding(\n \"Trace format differs from baseline.\",\n runEvidence(context.selectedRun),\n baselineContext.format,\n context.format,\n ),\n );\n }\n\n const baselineRunStatus = baselineContext.selectedRun?.status ?? \"unknown\";\n const candidateRunStatus = context.selectedRun?.status ?? \"unknown\";\n if (baselineRunStatus !== candidateRunStatus) {\n findings.push(\n baselineDiffFinding(\n \"Run status differs from baseline.\",\n runEvidence(context.selectedRun),\n baselineRunStatus,\n candidateRunStatus,\n ),\n );\n }\n\n const baselineDuration = baselineContext.selectedRun?.durationMs;\n const candidateDuration = context.selectedRun?.durationMs;\n if (\n baselineDuration !== undefined &&\n candidateDuration !== undefined &&\n Math.abs(candidateDuration - baselineDuration) > durationToleranceMs\n ) {\n findings.push(\n baselineDiffFinding(\n \"Run duration differs from baseline beyond tolerance.\",\n runEvidence(context.selectedRun),\n { durationMs: baselineDuration, toleranceMs: durationToleranceMs },\n candidateDuration,\n ),\n );\n }\n\n const comparisons = [\n {\n label: \"Tree shape\",\n path: \"tree\",\n expected: treeShape(baselineContext.rootNodes),\n actual: treeShape(context.rootNodes),\n evidence: runEvidence(context.selectedRun),\n },\n {\n label: \"Event statuses\",\n path: \"status\",\n expected: statusShape(baselineContext),\n actual: statusShape(context),\n evidence: runEvidence(context.selectedRun),\n },\n {\n label: \"Tool usage\",\n path: \"tool\",\n expected: toolShape(baselineContext),\n actual: toolShape(context),\n evidence: firstEvidenceForKind(context, \"TOOL\", \"tool\"),\n },\n {\n label: \"LLM usage\",\n path: \"llm\",\n expected: llmShape(baselineContext),\n actual: llmShape(context),\n evidence: firstEvidenceForKind(context, \"LLM\", \"llm\"),\n },\n {\n label: \"Error profile\",\n path: \"error\",\n expected: errorShape(baselineContext),\n actual: errorShape(context),\n evidence: firstEvidenceForKind(context, \"ERROR\", \"error\"),\n },\n {\n label: \"Retrieval signals\",\n path: \"retrieval\",\n expected: retrievalShape(baselineContext),\n actual: retrievalShape(context),\n evidence: firstEvidenceForKind(context, \"RETRIEVER\", \"retrieval\"),\n },\n {\n label: \"Guardrail signals\",\n path: \"guardrail\",\n expected: guardrailShape(baselineContext),\n actual: guardrailShape(context),\n evidence: guardrailEvents(context)[0]\n ? [eventEvidence(guardrailEvents(context)[0]!, \"guardrail\")]\n : runEvidence(context.selectedRun),\n },\n ];\n\n for (const comparison of comparisons) {\n if (JSON.stringify(comparison.expected) === JSON.stringify(comparison.actual)) {\n continue;\n }\n findings.push(\n baselineDiffFinding(\n `${comparison.label} differs from baseline.`,\n comparison.evidence.length > 0\n ? comparison.evidence\n : [{ runId: context.selectedRun?.runId, path: comparison.path }],\n comparison.expected,\n comparison.actual,\n ),\n );\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Experimental rule for observed real-world outcomes (v4.4+).\n */\nexport interface ObservedOutcomeRuleOptions {\n failOn?: readonly ObservedOutcomeStatus[];\n}\n\nexport function createObservedOutcomeRule(\n options: ObservedOutcomeRuleOptions = {},\n): TraceCheckRule {\n const failOn = options.failOn ?? ([\"failed\"] as const);\n return {\n id: \"outcome.status\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const outcomes = extractOutcomesFromPersistedEvents(context.events);\n const matching = outcomesMatchingStatus(outcomes, failOn);\n if (matching.length === 0) return [];\n return [\n failFinding(\n \"outcome.status\",\n `Observed outcome count ${matching.length} matched [${failOn.join(\", \")}].`,\n matching.map((outcome) => ({\n runId: outcome.runId,\n eventId: outcome.outcomeId,\n ...(outcome.parentId !== undefined ? { parentId: outcome.parentId } : {}),\n kind: \"OUTCOME\",\n name: outcome.name,\n status: outcome.status,\n path: `outcome.${outcome.name}`,\n })),\n { failOn },\n matching.map((outcome) => ({\n name: outcome.name,\n status: outcome.status,\n expectation: outcome.expectation,\n })),\n ),\n ];\n },\n };\n}\n\n/**\n * Run experimental deterministic trace checks against normalized reader output.\n *\n * The engine is local-only and pure: it does not discover config files, read\n * trace files, call providers, perform network I/O, or mutate input objects.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function runTraceChecks(\n input: TraceCheckInput,\n options: RunTraceChecksOptions = {},\n): TraceCheckResult {\n const selected = resolveSelectedRun(input, options.runId);\n if (selected.diagnostics.length > 0) {\n return errorResult(input, selected.diagnostics, selected.run);\n }\n\n const rules = selectRules(options.rules ?? [], options.select);\n if (rules.diagnostics.length > 0) {\n return errorResult(input, rules.diagnostics, selected.run);\n }\n\n const facts = buildFacts(input, selected.run);\n const context: TraceCheckContext = {\n ...facts,\n ...(selected.run ? { selectedRun: selected.run } : {}),\n ...(input.sourceLabel ? { sourceLabel: input.sourceLabel } : {}),\n };\n const diagnostics: TraceCheckDiagnostic[] = [];\n const findings: TraceCheckFinding[] = [];\n\n for (const rule of rules.rules) {\n try {\n findings.push(...rule.evaluate(context).map((finding) => normalizeFinding(rule, finding)));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n diagnostics.push(\n diagnostic(\"AI_CHECK_INTERNAL_ERROR\", `Rule ${rule.id} failed: ${message}`, rule.id),\n );\n }\n }\n\n if (diagnostics.length > 0) {\n return errorResult(input, diagnostics, selected.run);\n }\n\n const eventById = new Map(input.read.events.map((event) => [event.eventId, event] as const));\n const sortedFindings = findings.sort(compareFindings(eventById));\n const summary = summarize(sortedFindings, diagnostics);\n const status: TraceCheckStatus = summary.failed > 0 ? \"fail\" : \"pass\";\n\n return {\n ok: status === \"pass\",\n status,\n format: input.read.format,\n ...(selected.run ? { runId: selected.run.runId } : {}),\n summary,\n findings: sortedFindings,\n diagnostics,\n };\n}\n"]}