agentv 4.5.1 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-5DEZ72J3.js → chunk-5GZJIXTY.js} +155 -59
- package/dist/chunk-5GZJIXTY.js.map +1 -0
- package/dist/{chunk-7DRAXDVC.js → chunk-KQQTEWZF.js} +111 -47
- package/dist/chunk-KQQTEWZF.js.map +1 -0
- package/dist/{chunk-BQC2CDLN.js → chunk-U2LSJ6Y4.js} +19 -5
- package/dist/chunk-U2LSJ6Y4.js.map +1 -0
- package/dist/cli.js +3 -3
- package/dist/{dist-VWMHFUXR.js → dist-FBPCDLOY.js} +2 -2
- package/dist/index.js +3 -3
- package/dist/{interactive-OG7ZJIHG.js → interactive-6D3ULOMN.js} +3 -3
- package/package.json +1 -1
- package/dist/chunk-5DEZ72J3.js.map +0 -1
- package/dist/chunk-7DRAXDVC.js.map +0 -1
- package/dist/chunk-BQC2CDLN.js.map +0 -1
- /package/dist/{dist-VWMHFUXR.js.map → dist-FBPCDLOY.js.map} +0 -0
- /package/dist/{interactive-OG7ZJIHG.js.map → interactive-6D3ULOMN.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.bun/didyoumean@1.2.2/node_modules/didyoumean/didYouMean-1.2.1.js","../../../node_modules/.bun/ms@2.1.3/node_modules/ms/index.js","../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/common.js","../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/browser.js","../../../node_modules/.bun/has-flag@4.0.0/node_modules/has-flag/index.js","../../../node_modules/.bun/supports-color@7.2.0/node_modules/supports-color/index.js","../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/node.js","../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/index.js","../../../node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js","../../../node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js","../../../node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/utilities.js","../../../node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/index.js","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/subcommands.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/Result.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/effects.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/newparser/findOption.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/from.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/type.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/types.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/flag.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/circuitbreaker.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/positional.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/binary.ts","../../../node_modules/.bun/ansi-regex@6.2.2/node_modules/ansi-regex/index.js","../../../node_modules/.bun/strip-ansi@7.1.2/node_modules/strip-ansi/index.js","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/utils.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/command.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/option.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/errorBox.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/newparser/parser.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/newparser/tokenizer.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/runner.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/restPositionals.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/multioption.ts","../../../node_modules/.bun/cmd-ts@0.14.3/node_modules/cmd-ts/src/oneOf.ts","../src/commands/compare/index.ts","../src/commands/convert/index.ts","../src/commands/create/commands.ts","../src/commands/create/index.ts","../src/commands/eval/commands/assert.ts","../src/commands/eval/commands/run.ts","../src/commands/eval/index.ts","../src/commands/import/claude.ts","../src/commands/import/index.ts","../src/commands/init/index.ts","../src/templates/index.ts","../src/commands/pipeline/bench.ts","../src/commands/pipeline/grade.ts","../src/commands/pipeline/input.ts","../src/commands/pipeline/run.ts","../src/commands/pipeline/index.ts","../src/commands/results/export.ts","../src/commands/results/shared.ts","../src/commands/trace/utils.ts","../src/commands/results/failures.ts","../src/commands/results/show.ts","../src/commands/results/summary.ts","../src/commands/results/validate.ts","../src/commands/results/index.ts","../src/commands/results/serve.ts","../src/commands/results/studio-config.ts","../src/commands/self/index.ts","../src/commands/trace/list.ts","../src/commands/trace/score.ts","../src/commands/trace/show.ts","../src/commands/trace/stats.ts","../src/commands/trace/index.ts","../src/commands/transpile/index.ts","../src/commands/trim/index.ts","../src/commands/validate/format-output.ts","../src/commands/validate/validate-files.ts","../src/commands/validate/index.ts","../src/commands/workspace/clean.ts","../src/commands/workspace/list.ts","../src/commands/workspace/index.ts","../src/update-check.ts","../src/index.ts"],"sourcesContent":["/*\n\ndidYouMean.js - A simple JavaScript matching engine\n===================================================\n\n[Available on GitHub](https://github.com/dcporter/didyoumean.js).\n\nA super-simple, highly optimized JS library for matching human-quality input to a list of potential\nmatches. You can use it to suggest a misspelled command-line utility option to a user, or to offer\nlinks to nearby valid URLs on your 404 page. (The examples below are taken from a personal project,\nmy [HTML5 business card](http://dcporter.aws.af.cm/me), which uses didYouMean.js to suggest correct\nURLs from misspelled ones, such as [dcporter.aws.af.cm/me/instagarm](http://dcporter.aws.af.cm/me/instagarm).)\nUses the [Levenshtein distance algorithm](https://en.wikipedia.org/wiki/Levenshtein_distance).\n\ndidYouMean.js works in the browser as well as in node.js. To install it for use in node:\n\n```\nnpm install didyoumean\n```\n\n\nExamples\n--------\n\nMatching against a list of strings:\n```\nvar input = 'insargrm'\nvar list = ['facebook', 'twitter', 'instagram', 'linkedin'];\nconsole.log(didYouMean(input, list));\n> 'instagram'\n// The method matches 'insargrm' to 'instagram'.\n\ninput = 'google plus';\nconsole.log(didYouMean(input, list));\n> null\n// The method was unable to find 'google plus' in the list of options.\n```\n\nMatching against a list of objects:\n```\nvar input = 'insargrm';\nvar list = [ { id: 'facebook' }, { id: 'twitter' }, { id: 'instagram' }, { id: 'linkedin' } ];\nvar key = 'id';\nconsole.log(didYouMean(input, list, key));\n> 'instagram'\n// The method returns the matching value.\n\ndidYouMean.returnWinningObject = true;\nconsole.log(didYouMean(input, list, key));\n> { id: 'instagram' }\n// The method returns the matching object.\n```\n\n\ndidYouMean(str, list, [key])\n----------------------------\n\n- str: The string input to match.\n- list: An array of strings or objects to match against.\n- key (OPTIONAL): If your list array contains objects, you must specify the key which contains the string\n to match against.\n\nReturns: the closest matching string, or null if no strings exceed the threshold.\n\n\nOptions\n-------\n\nOptions are set on the didYouMean function object. You may change them at any time.\n\n### threshold\n\n By default, the method will only return strings whose edit distance is less than 40% (0.4x) of their length.\n For example, if a ten-letter string is five edits away from its nearest match, the method will return null.\n\n You can control this by setting the \"threshold\" value on the didYouMean function. For example, to set the\n edit distance threshold to 50% of the input string's length:\n\n ```\n didYouMean.threshold = 0.5;\n ```\n\n To return the nearest match no matter the threshold, set this value to null.\n\n### thresholdAbsolute\n\n This option behaves the same as threshold, but instead takes an integer number of edit steps. For example,\n if thresholdAbsolute is set to 20 (the default), then the method will only return strings whose edit distance\n is less than 20. Both options apply.\n\n### caseSensitive\n\n By default, the method will perform case-insensitive comparisons. If you wish to force case sensitivity, set\n the \"caseSensitive\" value to true:\n\n ```\n didYouMean.caseSensitive = true;\n ```\n\n### nullResultValue\n\n By default, the method will return null if there is no sufficiently close match. You can change this value here.\n\n### returnWinningObject\n\n By default, the method will return the winning string value (if any). If your list contains objects rather\n than strings, you may set returnWinningObject to true.\n \n ```\n didYouMean.returnWinningObject = true;\n ```\n \n This option has no effect on lists of strings.\n\n### returnFirstMatch\n \n By default, the method will search all values and return the closest match. If you're simply looking for a \"good-\n enough\" match, you can set your thresholds appropriately and set returnFirstMatch to true to substantially speed\n things up.\n\n\nLicense\n-------\n\ndidYouMean copyright (c) 2013-2014 Dave Porter.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License\n[here](http://www.apache.org/licenses/LICENSE-2.0).\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n*/\n(function() {\n \"use strict\";\n\n // The didYouMean method.\n function didYouMean(str, list, key) {\n if (!str) return null;\n\n // If we're running a case-insensitive search, smallify str.\n if (!didYouMean.caseSensitive) { str = str.toLowerCase(); }\n\n // Calculate the initial value (the threshold) if present.\n var thresholdRelative = didYouMean.threshold === null ? null : didYouMean.threshold * str.length,\n thresholdAbsolute = didYouMean.thresholdAbsolute,\n winningVal;\n if (thresholdRelative !== null && thresholdAbsolute !== null) winningVal = Math.min(thresholdRelative, thresholdAbsolute);\n else if (thresholdRelative !== null) winningVal = thresholdRelative;\n else if (thresholdAbsolute !== null) winningVal = thresholdAbsolute;\n else winningVal = null;\n\n // Get the edit distance to each option. If the closest one is less than 40% (by default) of str's length,\n // then return it.\n var winner, candidate, testCandidate, val,\n i, len = list.length;\n for (i = 0; i < len; i++) {\n // Get item.\n candidate = list[i];\n // If there's a key, get the candidate value out of the object.\n if (key) { candidate = candidate[key]; }\n // Gatekeep.\n if (!candidate) { continue; }\n // If we're running a case-insensitive search, smallify the candidate.\n if (!didYouMean.caseSensitive) { testCandidate = candidate.toLowerCase(); }\n else { testCandidate = candidate; }\n // Get and compare edit distance.\n val = getEditDistance(str, testCandidate, winningVal);\n // If this value is smaller than our current winning value, OR if we have no winning val yet (i.e. the\n // threshold option is set to null, meaning the caller wants a match back no matter how bad it is), then\n // this is our new winner.\n if (winningVal === null || val < winningVal) {\n winningVal = val;\n // Set the winner to either the value or its object, depending on the returnWinningObject option.\n if (key && didYouMean.returnWinningObject) winner = list[i];\n else winner = candidate;\n // If we're returning the first match, return it now.\n if (didYouMean.returnFirstMatch) return winner;\n }\n }\n\n // If we have a winner, return it.\n return winner || didYouMean.nullResultValue;\n }\n\n // Set default options.\n didYouMean.threshold = 0.4;\n didYouMean.thresholdAbsolute = 20;\n didYouMean.caseSensitive = false;\n didYouMean.nullResultValue = null;\n didYouMean.returnWinningObject = null;\n didYouMean.returnFirstMatch = false;\n\n // Expose.\n // In node...\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = didYouMean;\n }\n // Otherwise...\n else {\n window.didYouMean = didYouMean;\n }\n\n var MAX_INT = Math.pow(2,32) - 1; // We could probably go higher than this, but for practical reasons let's not.\n function getEditDistance(a, b, max) {\n // Handle null or undefined max.\n max = max || max === 0 ? max : MAX_INT;\n\n var lena = a.length;\n var lenb = b.length;\n\n // Fast path - no A or B.\n if (lena === 0) return Math.min(max + 1, lenb);\n if (lenb === 0) return Math.min(max + 1, lena);\n\n // Fast path - length diff larger than max.\n if (Math.abs(lena - lenb) > max) return max + 1;\n\n // Slow path.\n var matrix = [],\n i, j, colMin, minJ, maxJ;\n\n // Set up the first row ([0, 1, 2, 3, etc]).\n for (i = 0; i <= lenb; i++) { matrix[i] = [i]; }\n\n // Set up the first column (same).\n for (j = 0; j <= lena; j++) { matrix[0][j] = j; }\n\n // Loop over the rest of the columns.\n for (i = 1; i <= lenb; i++) {\n colMin = MAX_INT;\n minJ = 1;\n if (i > max) minJ = i - max;\n maxJ = lenb + 1;\n if (maxJ > max + i) maxJ = max + i;\n // Loop over the rest of the rows.\n for (j = 1; j <= lena; j++) {\n // If j is out of bounds, just put a large value in the slot.\n if (j < minJ || j > maxJ) {\n matrix[i][j] = max + 1;\n }\n\n // Otherwise do the normal Levenshtein thing.\n else {\n // If the characters are the same, there's no change in edit distance.\n if (b.charAt(i - 1) === a.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n }\n // Otherwise, see if we're substituting, inserting or deleting.\n else {\n matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // Substitute\n Math.min(matrix[i][j - 1] + 1, // Insert\n matrix[i - 1][j] + 1)); // Delete\n }\n }\n\n // Either way, update colMin.\n if (matrix[i][j] < colMin) colMin = matrix[i][j];\n }\n\n // If this column's minimum is greater than the allowed maximum, there's no point\n // in going on with life.\n if (colMin > max) return max + 1;\n }\n // If we made it this far without running into the max, then return the final matrix value.\n return matrix[lenb][lena];\n }\n\n})();\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n","'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n",null,null,null,null,null,null,null,null,null,null,null,"export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\n\t// OSC sequences only: ESC ] ... ST (non-greedy until the first ST)\n\tconst osc = `(?:\\\\u001B\\\\][\\\\s\\\\S]*?${ST})`;\n\n\t// CSI and related: ESC/C1, optional intermediates, optional params (supports ; and :) then final byte\n\tconst csi = '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:\\\\d{1,4}(?:[;:]\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]';\n\n\tconst pattern = `${osc}|${csi}`;\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n",null,null,null,null,null,null,null,null,null,null,"import {\n array,\n command,\n flag,\n multioption,\n number,\n oneOf,\n option,\n optional,\n restPositionals,\n string,\n} from 'cmd-ts';\nimport { toSnakeCaseDeep } from '../../utils/case-conversion.js';\nimport { loadLightweightResults, resolveResultSourcePath } from '../results/manifest.js';\n\n// ANSI color codes (no dependency needed)\nconst colors = {\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n green: '\\x1b[32m',\n red: '\\x1b[31m',\n yellow: '\\x1b[33m',\n cyan: '\\x1b[36m',\n gray: '\\x1b[90m',\n};\n\n// Check if colors should be disabled\nconst noColor = process.env.NO_COLOR !== undefined || !process.stdout.isTTY;\nconst c = noColor ? Object.fromEntries(Object.keys(colors).map((k) => [k, ''])) : colors;\n\nexport interface EvalResult {\n testId: string;\n score: number;\n}\n\ninterface MatchedResult {\n testId: string;\n score1: number;\n score2: number;\n delta: number;\n outcome: 'win' | 'loss' | 'tie';\n}\n\nexport interface ComparisonOutput {\n matched: MatchedResult[];\n unmatched: { file1: number; file2: number };\n summary: {\n total: number;\n matched: number;\n wins: number;\n losses: number;\n ties: number;\n meanDelta: number;\n };\n baseline?: string;\n candidate?: string;\n}\n\ninterface MatrixRow {\n testId: string;\n scores: Record<string, number>;\n}\n\nexport interface MatrixOutput {\n matrix: MatrixRow[];\n pairwise: ComparisonOutput[];\n targets: string[];\n}\n\nexport function loadJsonlResults(filePath: string): EvalResult[] {\n return loadLightweightResults(resolveResultSourcePath(filePath)).map((record) => ({\n testId: record.testId,\n score: record.score,\n }));\n}\n\nexport function loadCombinedResults(filePath: string): Map<string, EvalResult[]> {\n const groups = new Map<string, EvalResult[]>();\n\n for (const record of loadLightweightResults(resolveResultSourcePath(filePath))) {\n if (typeof record.target !== 'string') {\n throw new Error(`Missing target field in combined result source: ${filePath}`);\n }\n\n const target = record.target;\n if (!groups.has(target)) {\n groups.set(target, []);\n }\n groups.get(target)?.push({ testId: record.testId, score: record.score });\n }\n\n return groups;\n}\n\nexport function classifyOutcome(delta: number, threshold: number): 'win' | 'loss' | 'tie' {\n if (delta >= threshold) return 'win';\n if (delta <= -threshold) return 'loss';\n return 'tie';\n}\n\nexport function compareResults(\n results1: EvalResult[],\n results2: EvalResult[],\n threshold: number,\n): ComparisonOutput {\n const map1 = new Map(results1.map((r) => [r.testId, r.score]));\n const map2 = new Map(results2.map((r) => [r.testId, r.score]));\n\n const matched: MatchedResult[] = [];\n const matchedIds = new Set<string>();\n\n for (const [testId, score1] of map1) {\n const score2 = map2.get(testId);\n if (score2 !== undefined) {\n const delta = score2 - score1;\n matched.push({\n testId,\n score1,\n score2,\n delta,\n outcome: classifyOutcome(delta, threshold),\n });\n matchedIds.add(testId);\n }\n }\n\n const unmatchedFile1 = results1.filter((r) => !matchedIds.has(r.testId)).length;\n const unmatchedFile2 = results2.filter((r) => !map1.has(r.testId)).length;\n\n const wins = matched.filter((m) => m.outcome === 'win').length;\n const losses = matched.filter((m) => m.outcome === 'loss').length;\n const ties = matched.filter((m) => m.outcome === 'tie').length;\n\n const meanDelta =\n matched.length > 0 ? matched.reduce((sum, m) => sum + m.delta, 0) / matched.length : 0;\n\n return {\n matched,\n unmatched: { file1: unmatchedFile1, file2: unmatchedFile2 },\n summary: {\n total: results1.length + results2.length,\n matched: matched.length,\n wins,\n losses,\n ties,\n meanDelta: Math.round(meanDelta * 1000) / 1000,\n },\n };\n}\n\nexport function compareMatrix(groups: Map<string, EvalResult[]>, threshold: number): MatrixOutput {\n const targets = [...groups.keys()].sort();\n\n // Collect all test IDs across all targets\n const allTestIds = new Set<string>();\n for (const results of groups.values()) {\n for (const r of results) {\n allTestIds.add(r.testId);\n }\n }\n const sortedTestIds = [...allTestIds].sort();\n\n // Build score lookup: target -> testId -> score\n const scoreLookup = new Map<string, Map<string, number>>();\n for (const [target, results] of groups) {\n scoreLookup.set(target, new Map(results.map((r) => [r.testId, r.score])));\n }\n\n // Build matrix rows\n const matrix: MatrixRow[] = sortedTestIds.map((testId) => {\n const scores: Record<string, number> = {};\n for (const target of targets) {\n const score = scoreLookup.get(target)?.get(testId);\n if (score !== undefined) {\n scores[target] = score;\n }\n }\n return { testId, scores };\n });\n\n // Run pairwise comparisons for all target pairs\n const pairwise: ComparisonOutput[] = [];\n for (let i = 0; i < targets.length; i++) {\n for (let j = i + 1; j < targets.length; j++) {\n const t1 = targets[i];\n const t2 = targets[j];\n const r1 = groups.get(t1) ?? [];\n const r2 = groups.get(t2) ?? [];\n const comparison = compareResults(r1, r2, threshold);\n comparison.baseline = t1;\n comparison.candidate = t2;\n pairwise.push(comparison);\n }\n }\n\n return { matrix, pairwise, targets };\n}\n\nexport function determineExitCode(meanDelta: number): number {\n // Exit 0 if file2 >= file1 (meanDelta >= 0), exit 1 if file1 > file2\n return meanDelta >= 0 ? 0 : 1;\n}\n\nexport function determineMatrixExitCode(\n matrixOutput: MatrixOutput,\n baselineTarget?: string,\n): number {\n if (!baselineTarget) {\n return 0; // Informational mode\n }\n\n // Exit 1 if any target regresses vs baseline.\n // Pairwise pairs are generated in sorted order, so the designated baseline\n // may appear as either .baseline or .candidate depending on alphabetical position.\n for (const p of matrixOutput.pairwise) {\n if (p.baseline === baselineTarget && p.summary.meanDelta < 0) {\n // candidate scored lower than baseline → regression\n return 1;\n }\n if (p.candidate === baselineTarget && p.summary.meanDelta > 0) {\n // baseline scored higher than the other target → other regressed\n return 1;\n }\n }\n return 0;\n}\n\nfunction formatDelta(delta: number): string {\n const sign = delta >= 0 ? '+' : '';\n const formatted = `${sign}${delta.toFixed(2)}`;\n if (delta > 0) return `${c.green}${formatted}${c.reset}`;\n if (delta < 0) return `${c.red}${formatted}${c.reset}`;\n return `${c.gray}${formatted}${c.reset}`;\n}\n\nfunction formatOutcome(outcome: 'win' | 'loss' | 'tie'): string {\n switch (outcome) {\n case 'win':\n return `${c.green}✓ win${c.reset}`;\n case 'loss':\n return `${c.red}✗ loss${c.reset}`;\n case 'tie':\n return `${c.gray}= tie${c.reset}`;\n }\n}\n\n// Regex to strip ANSI escape codes (constructed to avoid lint warning)\nconst ansiPattern = new RegExp(`${String.fromCharCode(27)}\\\\[[0-9;]*m`, 'g');\n\nfunction stripAnsi(str: string): string {\n return str.replace(ansiPattern, '');\n}\n\nfunction padRight(str: string, len: number): string {\n const plainLen = stripAnsi(str).length;\n return str + ' '.repeat(Math.max(0, len - plainLen));\n}\n\nfunction padLeft(str: string, len: number): string {\n const plainLen = stripAnsi(str).length;\n return ' '.repeat(Math.max(0, len - plainLen)) + str;\n}\n\nexport function formatTable(comparison: ComparisonOutput, file1: string, file2: string): string {\n const lines: string[] = [];\n\n // Header\n lines.push('');\n lines.push(\n `${c.bold}Comparing:${c.reset} ${c.cyan}${file1}${c.reset} → ${c.cyan}${file2}${c.reset}`,\n );\n lines.push('');\n\n if (comparison.matched.length === 0) {\n lines.push(`${c.yellow}No matching test IDs found between files.${c.reset}`);\n } else {\n // Calculate column widths\n const maxIdLen = Math.max(\n 7, // \"Test ID\"\n ...comparison.matched.map((m) => m.testId.length),\n );\n\n // Table header\n const header = ` ${padRight('Test ID', maxIdLen)} ${padLeft('Baseline', 8)} ${padLeft('Candidate', 9)} ${padLeft('Delta', 8)} Result`;\n lines.push(`${c.dim}${header}${c.reset}`);\n lines.push(\n `${c.dim} ${'─'.repeat(maxIdLen)} ${'─'.repeat(8)} ${'─'.repeat(9)} ${'─'.repeat(8)} ${'─'.repeat(8)}${c.reset}`,\n );\n\n // Table rows\n for (const m of comparison.matched) {\n const row = ` ${padRight(m.testId, maxIdLen)} ${padLeft(m.score1.toFixed(2), 8)} ${padLeft(m.score2.toFixed(2), 9)} ${padLeft(formatDelta(m.delta), 8)} ${formatOutcome(m.outcome)}`;\n lines.push(row);\n }\n }\n\n // Unmatched warning\n if (comparison.unmatched.file1 > 0 || comparison.unmatched.file2 > 0) {\n lines.push('');\n lines.push(\n `${c.yellow}⚠ Unmatched:${c.reset} ${comparison.unmatched.file1} in baseline, ${comparison.unmatched.file2} in candidate`,\n );\n }\n\n // Summary\n lines.push('');\n const { wins, losses, ties, meanDelta } = comparison.summary;\n\n const winStr =\n wins > 0 ? `${c.green}${wins} win${wins !== 1 ? 's' : ''}${c.reset}` : `${wins} wins`;\n const lossStr =\n losses > 0 ? `${c.red}${losses} loss${losses !== 1 ? 'es' : ''}${c.reset}` : `${losses} losses`;\n const tieStr = `${ties} tie${ties !== 1 ? 's' : ''}`;\n\n const deltaColor = meanDelta > 0 ? c.green : meanDelta < 0 ? c.red : c.gray;\n const deltaSign = meanDelta >= 0 ? '+' : '';\n const status =\n meanDelta > 0\n ? `${c.green}improved${c.reset}`\n : meanDelta < 0\n ? `${c.red}regressed${c.reset}`\n : `${c.gray}neutral${c.reset}`;\n\n lines.push(\n `${c.bold}Summary:${c.reset} ${winStr}, ${lossStr}, ${tieStr} | Mean Δ: ${deltaColor}${deltaSign}${meanDelta.toFixed(3)}${c.reset} | Status: ${status}`,\n );\n lines.push('');\n\n return lines.join('\\n');\n}\n\nexport function formatMatrix(matrixOutput: MatrixOutput, baselineTarget?: string): string {\n const { matrix, pairwise, targets } = matrixOutput;\n const lines: string[] = [];\n\n lines.push('');\n lines.push(`${c.bold}Score Matrix${c.reset}`);\n lines.push('');\n\n if (matrix.length === 0) {\n lines.push(`${c.yellow}No results found.${c.reset}`);\n return lines.join('\\n');\n }\n\n // Calculate column widths\n const testIdWidth = Math.max(\n 7, // \"Test ID\"\n ...matrix.map((r) => r.testId.length),\n );\n const targetWidths = targets.map((t) => Math.max(t.length, 6));\n\n // Header row\n let header = ` ${padRight('Test ID', testIdWidth)}`;\n for (let i = 0; i < targets.length; i++) {\n header += ` ${padLeft(targets[i], targetWidths[i])}`;\n }\n lines.push(`${c.dim}${header}${c.reset}`);\n\n // Separator\n let sep = ` ${'─'.repeat(testIdWidth)}`;\n for (let i = 0; i < targets.length; i++) {\n sep += ` ${'─'.repeat(targetWidths[i])}`;\n }\n lines.push(`${c.dim}${sep}${c.reset}`);\n\n // Data rows\n for (const row of matrix) {\n let line = ` ${padRight(row.testId, testIdWidth)}`;\n for (let i = 0; i < targets.length; i++) {\n const score = row.scores[targets[i]];\n const scoreStr = score !== undefined ? score.toFixed(2) : ' --';\n // Highlight regressions vs baseline\n if (baselineTarget && targets[i] !== baselineTarget && score !== undefined) {\n const baselineScore = row.scores[baselineTarget];\n if (baselineScore !== undefined && score < baselineScore) {\n line += ` ${padLeft(`${c.red}${scoreStr}${c.reset}`, targetWidths[i])}`;\n } else if (baselineScore !== undefined && score > baselineScore) {\n line += ` ${padLeft(`${c.green}${scoreStr}${c.reset}`, targetWidths[i])}`;\n } else {\n line += ` ${padLeft(scoreStr, targetWidths[i])}`;\n }\n } else {\n line += ` ${padLeft(scoreStr, targetWidths[i])}`;\n }\n }\n lines.push(line);\n }\n\n // Pairwise summary\n if (pairwise.length > 0) {\n lines.push('');\n lines.push(`${c.bold}Pairwise Summary:${c.reset}`);\n\n const maxLabelLen = Math.max(\n ...pairwise.map((pw) => ` ${pw.baseline} → ${pw.candidate}:`.length),\n );\n for (const p of pairwise) {\n const { wins, losses, ties, meanDelta } = p.summary;\n const sign = meanDelta >= 0 ? '+' : '';\n const deltaColor = meanDelta > 0 ? c.green : meanDelta < 0 ? c.red : c.gray;\n const label = ` ${p.baseline} → ${p.candidate}:`;\n lines.push(\n `${padRight(label, maxLabelLen)} ${wins} win${wins !== 1 ? 's' : ''}, ${losses} loss${losses !== 1 ? 'es' : ''}, ${ties} tie${ties !== 1 ? 's' : ''} (${c.bold}Δ${c.reset} ${deltaColor}${sign}${meanDelta.toFixed(3)}${c.reset})`,\n );\n }\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n\nexport const compareCommand = command({\n name: 'compare',\n description:\n 'Compare evaluation result files: two-file pairwise, combined JSONL pairwise, or N-way matrix',\n args: {\n results: restPositionals({\n type: string,\n displayName: 'results',\n description: 'JSONL result file path(s). One file: combined mode. Two files: pairwise mode.',\n }),\n threshold: option({\n type: optional(number),\n long: 'threshold',\n short: 't',\n description: 'Score delta threshold for win/loss classification (default: 0.1)',\n }),\n baseline: option({\n type: optional(string),\n long: 'baseline',\n short: 'b',\n description: 'Target name to use as baseline (filters combined JSONL)',\n }),\n candidate: option({\n type: optional(string),\n long: 'candidate',\n short: 'c',\n description: 'Target name to use as candidate (filters combined JSONL)',\n }),\n targets: multioption({\n type: array(string),\n long: 'targets',\n description: 'Target names to include in matrix comparison (repeatable)',\n }),\n format: option({\n type: optional(oneOf(['table', 'json'])),\n long: 'format',\n short: 'f',\n description: 'Output format: table (default, human-readable) or json (machine-readable)',\n }),\n json: flag({\n long: 'json',\n description: 'Output JSON format (shorthand for --format=json)',\n }),\n },\n handler: async ({ results, threshold, baseline, candidate, targets, format, json }) => {\n const effectiveThreshold = threshold ?? 0.1;\n const outputFormat = json ? 'json' : (format ?? 'table');\n\n try {\n if (results.length === 0) {\n throw new Error('At least one JSONL result file is required');\n }\n\n if (results.length === 2) {\n // Two-file pairwise mode (existing behavior)\n const results1 = loadJsonlResults(results[0]);\n const results2 = loadJsonlResults(results[1]);\n const comparison = compareResults(results1, results2, effectiveThreshold);\n\n if (outputFormat === 'json') {\n console.log(JSON.stringify(toSnakeCaseDeep(comparison), null, 2));\n } else {\n console.log(formatTable(comparison, results[0], results[1]));\n }\n\n const exitCode = determineExitCode(comparison.summary.meanDelta);\n process.exit(exitCode);\n } else if (results.length === 1) {\n // Combined JSONL mode\n let groups = loadCombinedResults(results[0]);\n\n // Filter by --targets if specified\n if (targets.length > 0) {\n const filtered = new Map<string, EvalResult[]>();\n for (const t of targets) {\n const group = groups.get(t);\n if (group) {\n filtered.set(t, group);\n }\n }\n if (filtered.size === 0) {\n const available = [...groups.keys()].join(', ');\n throw new Error(\n `None of the specified targets found in results. Available targets: ${available}`,\n );\n }\n groups = filtered;\n }\n\n // Validate --baseline target exists in (possibly filtered) groups\n if (baseline && !groups.has(baseline)) {\n const available = [...groups.keys()].join(', ');\n throw new Error(\n `Baseline target \"${baseline}\" not found in results. Available targets: ${available}`,\n );\n }\n\n if (candidate && !baseline) {\n throw new Error(\n '--candidate requires --baseline. Use both flags for pairwise comparison.',\n );\n }\n\n if (baseline && candidate) {\n // Pairwise mode from combined JSONL\n const baselineResults = groups.get(baseline);\n const candidateResults = groups.get(candidate);\n if (!baselineResults) {\n throw new Error(`Baseline target \"${baseline}\" not found in results`);\n }\n if (!candidateResults) {\n throw new Error(`Candidate target \"${candidate}\" not found in results`);\n }\n\n const comparison = compareResults(baselineResults, candidateResults, effectiveThreshold);\n\n if (outputFormat === 'json') {\n console.log(JSON.stringify(toSnakeCaseDeep(comparison), null, 2));\n } else {\n console.log(formatTable(comparison, baseline, candidate));\n }\n\n const exitCode = determineExitCode(comparison.summary.meanDelta);\n process.exit(exitCode);\n } else {\n // N-way matrix mode\n const matrixOutput = compareMatrix(groups, effectiveThreshold);\n\n if (outputFormat === 'json') {\n console.log(JSON.stringify(toSnakeCaseDeep(matrixOutput), null, 2));\n } else {\n console.log(formatMatrix(matrixOutput, baseline));\n }\n\n const exitCode = determineMatrixExitCode(matrixOutput, baseline);\n process.exit(exitCode);\n }\n } else {\n throw new Error('Expected 1 or 2 JSONL result files');\n }\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n },\n});\n","import { readFileSync, writeFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { isAgentSkillsFormat, normalizeLineEndings, parseAgentSkillsEvals } from '@agentv/core';\nimport { command, option, optional, positional, string } from 'cmd-ts';\nimport { stringify as stringifyYaml } from 'yaml';\n\nimport { HtmlWriter } from '../eval/html-writer.js';\n\nasync function convertJsonlToHtml(inputPath: string, outputPath: string): Promise<number> {\n const content = readFileSync(inputPath, 'utf8');\n const lines = content\n .trim()\n .split('\\n')\n .filter((line) => line.trim());\n\n const writer = await HtmlWriter.open(outputPath);\n for (const line of lines) {\n await writer.append(JSON.parse(line));\n }\n await writer.close();\n return lines.length;\n}\n\nfunction convertJsonlToYaml(inputPath: string, outputPath: string): number {\n const content = readFileSync(inputPath, 'utf8');\n const lines = content\n .trim()\n .split('\\n')\n .filter((line) => line.trim());\n\n let yamlOutput = '';\n let isFirst = true;\n\n for (const line of lines) {\n const record = JSON.parse(line);\n const yamlDoc = stringifyYaml(record, {\n indent: 2,\n lineWidth: 0,\n });\n\n const normalizedYaml = normalizeLineEndings(yamlDoc);\n const separator = isFirst ? '---\\n' : '\\n---\\n';\n isFirst = false;\n yamlOutput += separator + normalizedYaml;\n }\n\n writeFileSync(outputPath, yamlOutput);\n return lines.length;\n}\n\n/**\n * Convert an Agent Skills evals.json file into an AgentV EVAL.yaml.\n * Returns the YAML string.\n */\nexport function convertEvalsJsonToYaml(inputPath: string): string {\n const content = readFileSync(inputPath, 'utf8');\n const parsed = JSON.parse(content);\n\n if (!isAgentSkillsFormat(parsed)) {\n throw new Error(`Not a valid Agent Skills evals.json: missing 'evals' array`);\n }\n\n const tests = parseAgentSkillsEvals(parsed, inputPath, path.dirname(path.resolve(inputPath)));\n const lines: string[] = [];\n\n lines.push('# Converted from Agent Skills evals.json');\n lines.push('# See: https://agentskills.io/skill-creation/evaluating-skills');\n lines.push('#');\n lines.push('# AgentV features you can add:');\n lines.push('# - type: is_json, contains, regex for deterministic evaluators');\n lines.push('# - type: code-grader for custom scoring scripts');\n lines.push('# - Multi-turn conversations via input message arrays');\n lines.push('# - Composite evaluators with weighted scoring');\n lines.push('# - Workspace isolation with repos and hooks');\n lines.push('');\n\n if (parsed.skill_name) {\n lines.push(`description: \"Evals for ${parsed.skill_name} skill\"`);\n lines.push('');\n }\n\n lines.push('tests:');\n\n for (const test of tests) {\n lines.push(` - id: \"${test.id}\"`);\n lines.push('');\n\n // Emit criteria\n if (test.criteria) {\n lines.push(' criteria: |-');\n for (const line of test.criteria.split('\\n')) {\n lines.push(` ${line}`);\n }\n lines.push('');\n }\n\n // Emit input as simple user message\n lines.push(' input:');\n for (const msg of test.input) {\n lines.push(` - role: ${msg.role}`);\n if (typeof msg.content === 'string' && msg.content.includes('\\n')) {\n lines.push(' content: |-');\n for (const line of msg.content.split('\\n')) {\n lines.push(` ${line}`);\n }\n } else {\n lines.push(\n ` content: \"${typeof msg.content === 'string' ? msg.content.replace(/\"/g, '\\\\\"') : msg.content}\"`,\n );\n }\n }\n lines.push('');\n\n // Emit expected_output\n if (test.expected_output && test.expected_output.length > 0) {\n lines.push(' expected_output:');\n for (const msg of test.expected_output) {\n lines.push(` - role: ${msg.role}`);\n if (typeof msg.content === 'string' && msg.content.includes('\\n')) {\n lines.push(' content: |-');\n for (const line of msg.content.split('\\n')) {\n lines.push(` ${line}`);\n }\n } else {\n lines.push(\n ` content: \"${typeof msg.content === 'string' ? msg.content.replace(/\"/g, '\\\\\"') : msg.content}\"`,\n );\n }\n }\n lines.push('');\n }\n\n // Emit assertions as llm-grader evaluators\n if (test.assertions && test.assertions.length > 0) {\n lines.push(' # Promoted from evals.json assertions[]');\n lines.push(' # Replace with type: is_json, contains, or regex for deterministic checks');\n lines.push(' assertions:');\n for (const assertion of test.assertions) {\n lines.push(` - name: ${assertion.name}`);\n lines.push(` type: ${assertion.type}`);\n if (assertion.type === 'llm-grader' && 'prompt' in assertion) {\n const prompt = (assertion as { prompt: string }).prompt;\n lines.push(` prompt: \"${prompt.replace(/\"/g, '\\\\\"')}\"`);\n }\n }\n lines.push('');\n }\n\n // Note about files\n if (test.file_paths && test.file_paths.length > 0) {\n lines.push(' # TODO: Configure workspace.repos or file references for these files:');\n const agentSkillsFiles = test.metadata?.agent_skills_files as readonly string[] | undefined;\n if (agentSkillsFiles) {\n for (const file of agentSkillsFiles) {\n lines.push(` # - ${file}`);\n }\n }\n lines.push('');\n }\n }\n\n return `${lines.join('\\n')}\\n`;\n}\n\nexport const convertCommand = command({\n name: 'convert',\n description: 'Convert between evaluation formats (JSONL→YAML, JSONL→HTML, evals.json→EVAL.yaml)',\n args: {\n input: positional({\n type: string,\n displayName: 'input',\n description: 'Path to input file (.jsonl or .json)',\n }),\n out: option({\n type: optional(string),\n long: 'out',\n short: 'o',\n description: 'Output file path (defaults to stdout for evals.json, .yaml or .html for JSONL)',\n }),\n },\n handler: async ({ input, out }) => {\n const ext = path.extname(input).toLowerCase();\n\n if (ext === '.json') {\n try {\n const yaml = convertEvalsJsonToYaml(input);\n if (out) {\n writeFileSync(out, yaml);\n console.log(`Converted to ${path.resolve(out)}`);\n } else {\n process.stdout.write(yaml);\n }\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n return;\n }\n\n if (ext === '.jsonl') {\n const outExt = out ? path.extname(out).toLowerCase() : '.yaml';\n if (outExt === '.html' || outExt === '.htm') {\n const outputPath = out ?? input.replace(/\\.jsonl$/, '.html');\n try {\n const count = await convertJsonlToHtml(input, outputPath);\n console.log(`Converted ${count} records to ${path.resolve(outputPath)}`);\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n return;\n }\n const outputPath = out ?? input.replace(/\\.jsonl$/, '.yaml');\n try {\n const count = convertJsonlToYaml(input, outputPath);\n console.log(`Converted ${count} records to ${path.resolve(outputPath)}`);\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n return;\n }\n\n console.error(`Error: Unsupported input format '${ext}'. Supported: .json, .jsonl`);\n process.exit(1);\n },\n});\n","import { mkdir, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { command, option, optional, positional, string } from 'cmd-ts';\n\nconst ASSERTION_TEMPLATES: Record<string, string> = {\n default: `#!/usr/bin/env bun\nimport { defineAssertion } from '@agentv/eval';\n\n/** Extract text from the last message with the given role. */\nfunction getMessageText(messages: Array<{ role: string; content?: unknown }>, role = 'assistant'): string {\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.role !== role) continue;\n if (typeof msg.content === 'string') return msg.content;\n if (Array.isArray(msg.content)) {\n return msg.content.filter((b: any) => b.type === 'text').map((b: any) => b.text).join('\\\\n');\n }\n }\n return '';\n}\n\nexport default defineAssertion(({ output }) => {\n // TODO: Implement your assertion logic\n const text = getMessageText(output ?? []);\n const pass = text.length > 0;\n return {\n pass,\n reasoning: pass ? 'Output has content' : 'Output is empty',\n };\n});\n`,\n score: `#!/usr/bin/env bun\nimport { defineAssertion } from '@agentv/eval';\n\n/** Extract text from the last message with the given role. */\nfunction getMessageText(messages: Array<{ role: string; content?: unknown }>, role = 'assistant'): string {\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.role !== role) continue;\n if (typeof msg.content === 'string') return msg.content;\n if (Array.isArray(msg.content)) {\n return msg.content.filter((b: any) => b.type === 'text').map((b: any) => b.text).join('\\\\n');\n }\n }\n return '';\n}\n\nexport default defineAssertion(({ output }) => {\n // TODO: Implement your scoring logic (0.0 to 1.0)\n const text = getMessageText(output ?? []);\n const score = text.length > 0 ? 1.0 : 0.0;\n return {\n pass: score >= 0.5,\n score,\n reasoning: \\`Score: \\${score}\\`,\n };\n});\n`,\n};\n\nconst EVAL_TEMPLATES: Record<string, (name: string) => string> = {\n default: (name: string) => `description: ${name} evaluation suite\nexecution:\n target: default\n\ntests:\n - id: sample-test\n criteria: Agent responds correctly\n input: \"Hello, how are you?\"\n expected_output: \"I'm doing well\"\n assertions:\n - type: contains\n value: \"well\"\n`,\n rubric: (name: string) => `description: ${name} evaluation suite\nexecution:\n target: default\n\ntests:\n - id: sample-test\n criteria: Agent responds correctly and completely\n input: \"Hello, how are you?\"\n expected_output: \"I'm doing well, thank you for asking!\"\n assertions:\n - type: llm-grader\n rubric:\n accuracy:\n weight: 0.6\n criteria: Response is factually correct\n completeness:\n weight: 0.4\n criteria: Response addresses all parts of the question\n`,\n};\n\nconst PROVIDER_TEMPLATE = `#!/usr/bin/env bun\n/**\n * Custom provider scaffold.\n *\n * AgentV providers are configured via .agentv/targets.yaml using the CLI provider:\n *\n * targets:\n * - name: my-target\n * provider: cli\n * command: \"bun run .agentv/providers/<name>.ts {PROMPT}\"\n *\n * This script receives the prompt as a CLI argument and prints the response to stdout.\n */\n\nconst prompt = process.argv[2];\n\nif (!prompt) {\n console.error('Usage: bun run provider.ts \"<prompt>\"');\n process.exit(1);\n}\n\n// TODO: Replace with your LLM API call or custom logic\nconst response = \\`Echo: \\${prompt}\\`;\n\nconsole.log(response);\n`;\n\nconst EVAL_CASES_TEMPLATE = `{\"id\":\"case-1\",\"criteria\":\"Responds helpfully\",\"input\":\"What is 2+2?\",\"expected_output\":\"4\"}\n`;\n\nexport const createAssertionCommand = command({\n name: 'assertion',\n description: 'Create a custom assertion scaffold',\n args: {\n name: positional({\n type: string,\n displayName: 'name',\n description: 'Name of the assertion (e.g., sentiment)',\n }),\n template: option({\n type: optional(string),\n long: 'template',\n description: `Template variant (${Object.keys(ASSERTION_TEMPLATES).join(', ')})`,\n }),\n },\n handler: async ({ name, template }) => {\n const templateName = template ?? 'default';\n const content = ASSERTION_TEMPLATES[templateName];\n if (!content) {\n console.error(\n `Unknown template \"${templateName}\". Available: ${Object.keys(ASSERTION_TEMPLATES).join(', ')}`,\n );\n process.exit(1);\n }\n\n const dir = path.join(process.cwd(), '.agentv', 'assertions');\n const filePath = path.join(dir, `${name}.ts`);\n\n await mkdir(dir, { recursive: true });\n await writeFile(filePath, content);\n console.log(`Created ${path.relative(process.cwd(), filePath)} (template: ${templateName})`);\n console.log(`\\nUse in EVAL.yaml:\\n assertions:\\n - type: ${name}`);\n },\n});\n\nexport const createProviderCommand = command({\n name: 'provider',\n description: 'Create a custom provider scaffold',\n args: {\n name: positional({\n type: string,\n displayName: 'name',\n description: 'Name of the provider (e.g., my-llm)',\n }),\n template: option({\n type: optional(string),\n long: 'template',\n description: 'Template variant (default)',\n }),\n },\n handler: async ({ name, template }) => {\n const templateName = template ?? 'default';\n if (templateName !== 'default') {\n console.error(`Unknown template \"${templateName}\". Available: default`);\n process.exit(1);\n }\n\n const dir = path.join(process.cwd(), '.agentv', 'providers');\n const filePath = path.join(dir, `${name}.ts`);\n\n await mkdir(dir, { recursive: true });\n await writeFile(filePath, PROVIDER_TEMPLATE);\n console.log(`Created ${path.relative(process.cwd(), filePath)} (template: ${templateName})`);\n console.log(\n `\\nConfigure in .agentv/targets.yaml:\\n targets:\\n - name: ${name}\\n provider: cli\\n command: \"bun run .agentv/providers/${name}.ts {PROMPT}\"`,\n );\n },\n});\n\nexport const createEvalCommand = command({\n name: 'eval',\n description: 'Create an eval suite scaffold',\n args: {\n name: positional({\n type: string,\n displayName: 'name',\n description: 'Name of the eval suite (e.g., my-agent)',\n }),\n template: option({\n type: optional(string),\n long: 'template',\n description: `Template variant (${Object.keys(EVAL_TEMPLATES).join(', ')})`,\n }),\n },\n handler: async ({ name, template }) => {\n const templateName = template ?? 'default';\n const templateFn = EVAL_TEMPLATES[templateName];\n if (!templateFn) {\n console.error(\n `Unknown template \"${templateName}\". Available: ${Object.keys(EVAL_TEMPLATES).join(', ')}`,\n );\n process.exit(1);\n }\n\n const dir = path.join(process.cwd(), 'evals');\n const yamlPath = path.join(dir, `${name}.eval.yaml`);\n const casesPath = path.join(dir, `${name}.cases.jsonl`);\n\n await mkdir(dir, { recursive: true });\n await writeFile(yamlPath, templateFn(name));\n await writeFile(casesPath, EVAL_CASES_TEMPLATE);\n console.log(`Created ${path.relative(process.cwd(), yamlPath)} (template: ${templateName})`);\n console.log(`Created ${path.relative(process.cwd(), casesPath)}`);\n console.log(`\\nRun with:\\n agentv eval ${path.relative(process.cwd(), yamlPath)}`);\n },\n});\n","import { subcommands } from 'cmd-ts';\n\nimport { createAssertionCommand, createEvalCommand, createProviderCommand } from './commands.js';\n\nexport const createCommand = subcommands({\n name: 'create',\n description: 'Scaffold new AgentV components',\n cmds: {\n assertion: createAssertionCommand,\n eval: createEvalCommand,\n provider: createProviderCommand,\n },\n});\n","import { readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { command, option, optional, positional, string } from 'cmd-ts';\nimport fg from 'fast-glob';\n\nimport { executeScript } from '@agentv/core';\n\nexport const evalAssertCommand = command({\n name: 'assert',\n description: 'Run a single code-grader assertion from .agentv/graders/ and print the score',\n args: {\n graderName: positional({\n type: string,\n displayName: 'name',\n description: 'Assertion name (matches filename without extension in .agentv/graders/)',\n }),\n agentOutput: option({\n type: optional(string),\n long: 'agent-output',\n description: \"The agent's full response text\",\n }),\n agentInput: option({\n type: optional(string),\n long: 'agent-input',\n description: 'The original user prompt',\n }),\n file: option({\n type: optional(string),\n long: 'file',\n description: 'Path to JSON file with { output, input } fields',\n }),\n },\n handler: async ({ graderName, agentOutput: output, agentInput: input, file }) => {\n let resolvedOutput: string;\n let resolvedInput: string;\n\n if (file) {\n const content = JSON.parse(readFileSync(path.resolve(file), 'utf8'));\n resolvedOutput = content.output ?? '';\n resolvedInput = content.input ?? '';\n } else {\n if (output === undefined) {\n console.error('Error: --agent-output is required (or use --file)');\n process.exit(1);\n }\n resolvedOutput = output;\n resolvedInput = input ?? '';\n }\n\n if (!/^[a-zA-Z0-9_-]+$/.test(graderName)) {\n console.error(\n `Error: Invalid grader name '${graderName}' — only letters, digits, hyphens, and underscores allowed`,\n );\n process.exit(1);\n }\n\n const scriptPath = await findGraderScript(graderName, process.cwd());\n if (!scriptPath) {\n console.error(\n `Error: Grader '${graderName}' not found in .agentv/graders/ (or .agentv/judges/)`,\n );\n process.exit(1);\n }\n\n // Build payload matching CodeEvaluator's expected format (snake_case).\n // Include all fields that defineCodeGrader validates as required.\n const payload = JSON.stringify(\n {\n output: [{ role: 'assistant', content: resolvedOutput }],\n input: [{ role: 'user', content: resolvedInput }],\n question: resolvedInput,\n criteria: '',\n expected_output: [],\n reference_answer: '',\n\n input_files: [],\n trace: null,\n token_usage: null,\n cost_usd: null,\n duration_ms: null,\n start_time: null,\n end_time: null,\n file_changes: null,\n workspace_path: null,\n config: null,\n metadata: {},\n // Text convenience accessors (new names)\n input_text: resolvedInput,\n output_text: resolvedOutput,\n expected_output_text: '',\n },\n null,\n 2,\n );\n\n try {\n const stdout = await executeScript(['bun', 'run', scriptPath], payload);\n const parsed = JSON.parse(stdout);\n const score = typeof parsed.score === 'number' ? parsed.score : 0;\n\n process.stdout.write(JSON.stringify(parsed, null, 2));\n process.stdout.write('\\n');\n process.exit(score >= 0.5 ? 0 : 1);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`Error: ${message}`);\n process.exit(1);\n }\n },\n});\n\nasync function findGraderScript(graderName: string, startDir: string): Promise<string | null> {\n let dir = path.resolve(startDir);\n const root = path.parse(dir).root;\n\n while (dir !== root) {\n // Search .agentv/graders/ first, then fall back to .agentv/judges/ for backward compat\n for (const subdir of ['graders', 'judges']) {\n const gradersDir = path.join(dir, '.agentv', subdir);\n const found = await fg([`${graderName}.{ts,js,mts,mjs}`], {\n cwd: gradersDir,\n absolute: true,\n onlyFiles: true,\n });\n if (found.length > 0) return found[0];\n }\n dir = path.dirname(dir);\n }\n\n return null;\n}\n","import {\n array,\n command,\n flag,\n multioption,\n number,\n option,\n optional,\n restPositionals,\n string,\n} from 'cmd-ts';\n\nimport { runEvalCommand } from '../run-eval.js';\nimport { resolveEvalPaths } from '../shared.js';\n\nexport const evalRunCommand = command({\n name: 'eval',\n description: 'Run eval suites and report results',\n args: {\n evalPaths: restPositionals({\n type: string,\n displayName: 'eval-paths',\n description: 'Path(s) or glob(s) to evaluation .yaml file(s)',\n }),\n target: multioption({\n type: array(string),\n long: 'target',\n description: 'Override target name(s) from targets.yaml (repeatable for matrix evaluation)',\n }),\n targets: option({\n type: optional(string),\n long: 'targets',\n description: 'Path to targets.yaml (overrides discovery)',\n }),\n testId: option({\n type: optional(string),\n long: 'test-id',\n description: 'Filter tests by ID pattern (glob supported, e.g., \"summary-*\")',\n }),\n workers: option({\n type: optional(number),\n long: 'workers',\n description:\n 'Number of parallel workers (default: 3, max: 50). Can also be set per-target in targets.yaml',\n }),\n out: option({\n type: optional(string),\n long: 'out',\n description: 'Write results to the specified path',\n }),\n output: multioption({\n type: array(string),\n long: 'output',\n short: 'o',\n description:\n 'Output file path(s). Format inferred from extension: .jsonl, .json, .xml, .yaml, .html',\n }),\n outputFormat: option({\n type: optional(string),\n long: 'output-format',\n description: \"Output format: 'jsonl', 'yaml', or 'html' (default: jsonl)\",\n }),\n dryRun: flag({\n long: 'dry-run',\n description: 'Use mock provider responses instead of real LLM calls',\n }),\n dryRunDelay: option({\n type: number,\n long: 'dry-run-delay',\n description:\n 'Fixed delay in milliseconds for dry-run mode (overridden by delay range if specified)',\n defaultValue: () => 0,\n }),\n dryRunDelayMin: option({\n type: number,\n long: 'dry-run-delay-min',\n description: 'Minimum delay in milliseconds for dry-run mode (requires --dry-run-delay-max)',\n defaultValue: () => 0,\n }),\n dryRunDelayMax: option({\n type: number,\n long: 'dry-run-delay-max',\n description: 'Maximum delay in milliseconds for dry-run mode (requires --dry-run-delay-min)',\n defaultValue: () => 0,\n }),\n agentTimeout: option({\n type: optional(number),\n long: 'agent-timeout',\n description: 'Optional top-level evaluation timeout in seconds. Unset by default.',\n }),\n maxRetries: option({\n type: optional(number),\n long: 'max-retries',\n description: 'Retry count for timeout recoveries (default: 2)',\n }),\n cache: flag({\n long: 'cache',\n description: 'Enable provider response cache (persisted to disk)',\n }),\n noCache: flag({\n long: 'no-cache',\n description: 'Disable caching (overrides YAML execution.cache)',\n }),\n verbose: flag({\n long: 'verbose',\n description: 'Enable verbose logging',\n }),\n workspaceMode: option({\n type: optional(string),\n long: 'workspace-mode',\n description: \"Workspace mode: 'pooled', 'temp', or 'static'\",\n }),\n workspacePath: option({\n type: optional(string),\n long: 'workspace-path',\n description: 'Static workspace directory path (used when workspace mode is static)',\n }),\n otelFile: option({\n type: optional(string),\n long: 'otel-file',\n description: 'Write OTLP JSON trace to file (importable by OTel backends)',\n }),\n exportOtel: flag({\n long: 'export-otel',\n description: 'Export evaluation traces via OTLP/HTTP to configured endpoint',\n }),\n otelBackend: option({\n type: optional(string),\n long: 'otel-backend',\n description: 'Use a backend preset (langfuse, braintrust, confident)',\n }),\n otelCaptureContent: flag({\n long: 'otel-capture-content',\n description: 'Include message content in exported OTel spans (privacy: disabled by default)',\n }),\n otelGroupTurns: flag({\n long: 'otel-group-turns',\n description:\n 'Group messages into turn spans for multi-turn evaluations (requires --export-otel)',\n }),\n retryErrors: option({\n type: optional(string),\n long: 'retry-errors',\n description: 'Path to previous output JSONL — re-run only execution_error test cases',\n }),\n strict: flag({\n long: 'strict',\n description: 'Exit with error on version mismatch (instead of warning)',\n }),\n benchmarkJson: option({\n type: optional(string),\n long: 'benchmark-json',\n description: 'Write Agent Skills benchmark.json to the specified path',\n }),\n artifacts: option({\n type: optional(string),\n long: 'artifacts',\n description:\n 'Write companion artifacts (index.jsonl, <test>/grading.json, <test>/timing.json, timing.json, benchmark.json) to the specified directory',\n }),\n graderTarget: option({\n type: optional(string),\n long: 'grader-target',\n description:\n 'Override grader target for all evaluators (e.g., \"agentv\", or a target name from targets.yaml)',\n }),\n model: option({\n type: optional(string),\n long: 'model',\n description: 'Override model for the grader target (e.g., \"openai:gpt-5-mini\")',\n }),\n outputMessages: option({\n type: optional(string),\n long: 'output-messages',\n description:\n 'Number of trailing messages to include in results output (default: 1, or \"all\")',\n }),\n threshold: option({\n type: optional(number),\n long: 'threshold',\n description:\n 'Per-test score threshold (0-1, default 0.8). Exit 1 if any test scores below this value',\n }),\n tag: multioption({\n type: array(string),\n long: 'tag',\n description: 'Only run eval files that have this tag (repeatable, AND logic)',\n }),\n excludeTag: multioption({\n type: array(string),\n long: 'exclude-tag',\n description: 'Skip eval files that have this tag (repeatable, file skipped if any match)',\n }),\n },\n handler: async (args) => {\n // Launch interactive wizard when no eval paths and stdin is a TTY\n if (args.evalPaths.length === 0 && process.stdin.isTTY) {\n const { launchInteractiveWizard } = await import('../interactive.js');\n await launchInteractiveWizard();\n return;\n }\n\n const resolvedPaths = await resolveEvalPaths(args.evalPaths, process.cwd());\n const rawOptions: Record<string, unknown> = {\n target: args.target,\n targets: args.targets,\n filter: args.testId,\n workers: args.workers,\n out: args.out,\n output: args.output,\n outputFormat: args.outputFormat,\n dryRun: args.dryRun,\n dryRunDelay: args.dryRunDelay,\n dryRunDelayMin: args.dryRunDelayMin,\n dryRunDelayMax: args.dryRunDelayMax,\n agentTimeout: args.agentTimeout,\n maxRetries: args.maxRetries,\n cache: args.cache,\n noCache: args.noCache,\n verbose: args.verbose,\n workspaceMode: args.workspaceMode,\n workspacePath: args.workspacePath,\n trace: false,\n otelFile: args.otelFile,\n exportOtel: args.exportOtel,\n otelBackend: args.otelBackend,\n otelCaptureContent: args.otelCaptureContent,\n otelGroupTurns: args.otelGroupTurns,\n retryErrors: args.retryErrors,\n strict: args.strict,\n benchmarkJson: args.benchmarkJson,\n artifacts: args.artifacts,\n graderTarget: args.graderTarget,\n model: args.model,\n outputMessages: args.outputMessages,\n threshold: args.threshold,\n tag: args.tag,\n excludeTag: args.excludeTag,\n };\n const result = await runEvalCommand({ testFiles: resolvedPaths, rawOptions });\n if (result?.thresholdFailed) {\n process.exit(1);\n }\n },\n});\n","import { subcommands } from 'cmd-ts';\n\nimport { evalAssertCommand } from './commands/assert.js';\nimport { evalRunCommand } from './commands/run.js';\n\nexport const evalCommand = subcommands({\n name: 'eval',\n description: 'Evaluation commands',\n cmds: {\n run: evalRunCommand,\n assert: evalAssertCommand,\n },\n});\n","import { mkdir, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { discoverClaudeSessions, parseClaudeSession, readTranscriptFile } from '@agentv/core';\nimport { command, flag, option, optional, string } from 'cmd-ts';\n\nexport const importClaudeCommand = command({\n name: 'claude',\n description: 'Import a Claude Code session transcript for offline grading',\n args: {\n sessionId: option({\n type: optional(string),\n long: 'session-id',\n description: 'UUID of the Claude Code session to import',\n }),\n discover: option({\n type: optional(string),\n long: 'discover',\n description: 'Discovery mode: \"latest\" to import the most recent session',\n }),\n projectPath: option({\n type: optional(string),\n long: 'project-path',\n description: 'Filter sessions by project path',\n }),\n output: option({\n type: optional(string),\n long: 'output',\n short: 'o',\n description:\n 'Output file path (default: .agentv/transcripts/claude-<session-id-short>.jsonl)',\n }),\n projectsDir: option({\n type: optional(string),\n long: 'projects-dir',\n description: 'Override the default ~/.claude/projects directory',\n }),\n list: flag({\n long: 'list',\n description: 'List available sessions instead of importing',\n }),\n },\n handler: async ({ sessionId, discover, projectPath, output, projectsDir, list }) => {\n if (list) {\n const sessions = await discoverClaudeSessions({\n projectPath,\n projectsDir,\n limit: 20,\n });\n\n if (sessions.length === 0) {\n console.log('No Claude Code sessions found.');\n return;\n }\n\n console.log(`Found ${sessions.length} session(s):\\n`);\n for (const session of sessions) {\n const age = formatAge(session.updatedAt);\n console.log(` ${session.sessionId} ${age} ${session.projectDir}`);\n }\n return;\n }\n\n // Determine which session to import\n let sessionFilePath: string;\n\n if (sessionId) {\n const sessions = await discoverClaudeSessions({\n sessionId,\n projectPath,\n projectsDir,\n limit: 1,\n });\n\n if (sessions.length === 0) {\n console.error(`Error: session ${sessionId} not found.`);\n process.exit(1);\n }\n sessionFilePath = sessions[0].filePath;\n } else if (discover === 'latest') {\n const sessions = await discoverClaudeSessions({\n projectPath,\n projectsDir,\n latest: true,\n });\n\n if (sessions.length === 0) {\n console.error('Error: no Claude Code sessions found.');\n process.exit(1);\n }\n sessionFilePath = sessions[0].filePath;\n sessionId = sessions[0].sessionId;\n console.log(`Discovered latest session: ${sessionId}`);\n } else {\n console.error('Error: specify --session-id <uuid> or --discover latest to select a session.');\n process.exit(1);\n }\n\n // Parse the session\n const rawJsonl = await readTranscriptFile(sessionFilePath);\n const transcript = parseClaudeSession(rawJsonl);\n\n // Determine output path\n const shortId = (sessionId ?? transcript.source.sessionId).slice(0, 8);\n const outputPath = output ?? path.join('.agentv', 'transcripts', `claude-${shortId}.jsonl`);\n\n // Ensure output directory exists\n await mkdir(path.dirname(outputPath), { recursive: true });\n\n // Write transcript as JSONL (one message per line)\n const outputLines = transcript.messages.map((msg) => JSON.stringify(msg));\n await writeFile(outputPath, `${outputLines.join('\\n')}\\n`, 'utf8');\n\n const msgCount = transcript.messages.length;\n const toolCount = transcript.messages.reduce((sum, m) => sum + (m.toolCalls?.length ?? 0), 0);\n\n console.log(`Imported ${msgCount} messages (${toolCount} tool calls) → ${outputPath}`);\n\n if (transcript.source.model) {\n console.log(` Model: ${transcript.source.model}`);\n }\n if (transcript.durationMs !== undefined) {\n console.log(` Duration: ${formatDurationMs(transcript.durationMs)}`);\n }\n if (transcript.tokenUsage) {\n console.log(\n ` Tokens: ${transcript.tokenUsage.input} in / ${transcript.tokenUsage.output} out`,\n );\n }\n },\n});\n\nfunction formatAge(date: Date): string {\n const diffMs = Date.now() - date.getTime();\n const diffMin = Math.floor(diffMs / 60_000);\n if (diffMin < 60) return `${diffMin}m ago`;\n const diffHours = Math.floor(diffMin / 60);\n if (diffHours < 24) return `${diffHours}h ago`;\n const diffDays = Math.floor(diffHours / 24);\n return `${diffDays}d ago`;\n}\n\nfunction formatDurationMs(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n const seconds = Math.floor(ms / 1000);\n if (seconds < 60) return `${seconds}s`;\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n return `${minutes}m ${remainingSeconds}s`;\n}\n","import { subcommands } from 'cmd-ts';\n\nimport { importClaudeCommand } from './claude.js';\n\nexport const importCommand = subcommands({\n name: 'import',\n description: 'Import agent session transcripts for offline grading',\n cmds: {\n claude: importClaudeCommand,\n },\n});\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs';\nimport path from 'node:path';\nimport * as readline from 'node:readline/promises';\nimport { command, option, optional, string } from 'cmd-ts';\n\nimport { getAgentvTemplates, getEnvExampleTemplate } from '../../templates/index.js';\n\nexport interface InitCommandOptions {\n targetPath?: string;\n}\n\nfunction printSkillFirstInstructions(): void {\n console.log('\\nAI-skills-first setup (recommended):');\n console.log(' npx allagents plugin marketplace add EntityProcess/agentv');\n console.log(' npx allagents plugin install agentv-dev@agentv');\n console.log(' Then ask your agent: \"Set up AgentV in this repo.\"');\n}\n\nasync function promptYesNo(message: string): Promise<boolean> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n try {\n const answer = await rl.question(`${message} (y/N): `);\n return answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes';\n } finally {\n rl.close();\n }\n}\n\nexport async function initCommand(options: InitCommandOptions = {}): Promise<void> {\n const targetPath = path.resolve(options.targetPath ?? '.');\n const agentvDir = path.join(targetPath, '.agentv');\n\n // Get templates for legacy bootstrap files only.\n const otherAgentvTemplates = getAgentvTemplates();\n\n // .env.example lives at templates root (not inside .agentv/) to avoid duplication\n const envTemplate = getEnvExampleTemplate();\n\n // Check if any files already exist\n const existingFiles: string[] = [];\n\n // Check for .env.example in root\n if (envTemplate) {\n const envFilePath = path.join(targetPath, '.env.example');\n if (existsSync(envFilePath)) {\n existingFiles.push('.env.example');\n }\n }\n\n if (existsSync(agentvDir)) {\n for (const template of otherAgentvTemplates) {\n const targetFilePath = path.join(agentvDir, template.path);\n if (existsSync(targetFilePath)) {\n existingFiles.push(path.relative(targetPath, targetFilePath));\n }\n }\n }\n // If files exist, prompt user\n if (existingFiles.length > 0) {\n console.log('We detected an existing setup:');\n for (const file of existingFiles) {\n console.log(` - ${file}`);\n }\n console.log();\n\n const shouldReplace = await promptYesNo('Do you want to replace these files?');\n if (!shouldReplace) {\n console.log('\\nInit cancelled. No files were changed.');\n printSkillFirstInstructions();\n return;\n }\n console.log();\n }\n\n // Create .agentv directory if it doesn't exist\n if (!existsSync(agentvDir)) {\n mkdirSync(agentvDir, { recursive: true });\n }\n\n // Create .env.example in the current working directory\n if (envTemplate) {\n const envFilePath = path.join(targetPath, '.env.example');\n writeFileSync(envFilePath, envTemplate.content, 'utf-8');\n console.log('Created .env.example');\n }\n\n // Copy remaining .agentv templates (excluding .env.example)\n for (const template of otherAgentvTemplates) {\n const targetFilePath = path.join(agentvDir, template.path);\n const targetDirPath = path.dirname(targetFilePath);\n\n // Create directory if needed\n if (!existsSync(targetDirPath)) {\n mkdirSync(targetDirPath, { recursive: true });\n }\n\n // Write file\n writeFileSync(targetFilePath, template.content, 'utf-8');\n console.log(`Created ${path.relative(targetPath, targetFilePath)}`);\n }\n\n console.log('\\nAgentV initialized successfully!');\n console.log('\\nFiles installed to root:');\n if (envTemplate) {\n console.log(' - .env.example');\n }\n console.log(`\\nFiles installed to ${path.relative(targetPath, agentvDir)}:`);\n for (const t of otherAgentvTemplates) {\n console.log(` - ${t.path}`);\n }\n console.log('\\nYou can now:');\n console.log(' 1. Copy .env.example to .env and add your API credentials');\n console.log(' 2. Configure targets in .agentv/targets.yaml');\n console.log(' 3. Use AI skills to create and run evals');\n printSkillFirstInstructions();\n}\n\nexport const initCmdTsCommand = command({\n name: 'init',\n description: 'Initialize AgentV bootstrap files in your project',\n args: {\n path: option({\n type: optional(string),\n long: 'path',\n description: 'Target directory for initialization (default: current directory)',\n }),\n },\n handler: async ({ path: targetPath }) => {\n try {\n await initCommand({ targetPath });\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n },\n});\n","import { readFileSync, readdirSync, statSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport interface Template {\n path: string;\n content: string;\n}\n\nexport function getAgentvTemplates(): Template[] {\n return getTemplatesFromDir('.agentv');\n}\n\nexport function getEnvExampleTemplate(): Template {\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n const templatesBase = currentDir.includes(`${path.sep}dist`)\n ? path.join(currentDir, 'templates')\n : currentDir;\n const content = readFileSync(path.join(templatesBase, '.env.example'), 'utf-8');\n return { path: '.env.example', content };\n}\n\nfunction getTemplatesFromDir(subdir: string): Template[] {\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n\n // Check if we're running from dist or src\n let templatesDir: string;\n if (currentDir.includes(`${path.sep}dist`)) {\n // Production: templates are at dist/templates/\n templatesDir = path.join(currentDir, 'templates', subdir);\n } else {\n // Development: templates are at src/templates/ (same directory as this file)\n templatesDir = path.join(currentDir, subdir);\n }\n\n return readTemplatesRecursively(templatesDir, '');\n}\n\nfunction readTemplatesRecursively(dir: string, relativePath: string): Template[] {\n const templates: Template[] = [];\n const entries = readdirSync(dir);\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry);\n const stat = statSync(fullPath);\n const entryRelativePath = relativePath ? path.join(relativePath, entry) : entry;\n\n if (stat.isDirectory()) {\n // Recursively read subdirectories\n templates.push(...readTemplatesRecursively(fullPath, entryRelativePath));\n } else {\n // Read file content\n const content = readFileSync(fullPath, 'utf-8');\n templates.push({\n path: entryRelativePath.split(path.sep).join('/'), // Normalize to forward slashes\n content,\n });\n }\n }\n\n return templates;\n}\n","/**\n * `agentv pipeline bench` — Merge code-grader and LLM grader scores into final\n * benchmark artifacts.\n *\n * Reads code_grader_results and llm_grader_results from disk per test.\n *\n * Writes:\n * - <test-id>/grading.json (per-test grading breakdown)\n * - index.jsonl (one line per test)\n * - benchmark.json (aggregate statistics)\n */\nimport { existsSync } from 'node:fs';\nimport { readFile, readdir, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nimport { command, positional, string } from 'cmd-ts';\n\ninterface EvaluatorScore {\n readonly name: string;\n readonly type: string;\n readonly score: number;\n readonly weight: number;\n readonly assertions: readonly { text: string; passed: boolean; evidence?: string }[];\n}\n\nexport const evalBenchCommand = command({\n name: 'bench',\n description: 'Merge evaluator scores and produce benchmark artifacts',\n args: {\n exportDir: positional({\n type: string,\n displayName: 'export-dir',\n description: 'Export directory from pipeline input/grade',\n }),\n },\n handler: async ({ exportDir }) => {\n const manifest = JSON.parse(await readFile(join(exportDir, 'manifest.json'), 'utf8'));\n const testIds: string[] = manifest.test_ids;\n const targetName: string = manifest.target?.name ?? 'unknown';\n const evalSet: string = manifest.dataset ?? '';\n const experiment: string | undefined = manifest.experiment;\n const safeEvalSet = evalSet ? evalSet.replace(/[\\/\\\\:*?\"<>|]/g, '_') : '';\n\n const indexLines: string[] = [];\n const allPassRates: number[] = [];\n\n for (const testId of testIds) {\n const subpath = safeEvalSet ? [safeEvalSet, testId] : [testId];\n const testDir = join(exportDir, ...subpath);\n const artifactSubdir = subpath.join('/');\n const evaluators: EvaluatorScore[] = [];\n const allAssertions: { text: string; passed: boolean; evidence: string }[] = [];\n\n // Collect code grader results\n const codeResultsDir = join(testDir, 'code_grader_results');\n try {\n const resultFiles = (await readdir(codeResultsDir)).filter((f) => f.endsWith('.json'));\n for (const file of resultFiles) {\n const result = JSON.parse(await readFile(join(codeResultsDir, file), 'utf8'));\n evaluators.push({\n name: result.name,\n type: 'code-grader',\n score: result.score,\n weight: result.weight ?? 1.0,\n assertions: result.assertions ?? [],\n });\n for (const a of result.assertions ?? []) {\n allAssertions.push({ text: a.text, passed: a.passed, evidence: a.evidence ?? '' });\n }\n }\n } catch {\n // No code grader results\n }\n\n // Collect LLM grader scores from per-test disk results\n const llmGradersDir = join(testDir, 'llm_graders');\n try {\n const graderFiles = (await readdir(llmGradersDir)).filter((f) => f.endsWith('.json'));\n for (const file of graderFiles) {\n const graderMeta = JSON.parse(await readFile(join(llmGradersDir, file), 'utf8'));\n const graderName = graderMeta.name;\n\n const diskResultPath = join(testDir, 'llm_grader_results', `${graderName}.json`);\n let llmResult:\n | { score: number; assertions?: { text: string; passed: boolean; evidence?: string }[] }\n | undefined;\n try {\n llmResult = JSON.parse(await readFile(diskResultPath, 'utf8'));\n } catch {\n // No result for this grader\n }\n\n if (llmResult) {\n evaluators.push({\n name: graderName,\n type: 'llm-grader',\n score: llmResult.score,\n weight: graderMeta.weight ?? 1.0,\n assertions: llmResult.assertions ?? [],\n });\n for (const a of llmResult.assertions ?? []) {\n allAssertions.push({ text: a.text, passed: a.passed, evidence: a.evidence ?? '' });\n }\n }\n }\n } catch {\n // No LLM graders\n }\n\n // Compute weighted score\n const totalWeight = evaluators.reduce((sum, e) => sum + e.weight, 0);\n const weightedScore =\n totalWeight > 0\n ? evaluators.reduce((sum, e) => sum + e.score * e.weight, 0) / totalWeight\n : 0;\n\n const passed = allAssertions.filter((a) => a.passed).length;\n const failed = allAssertions.filter((a) => !a.passed).length;\n const passRate =\n allAssertions.length > 0\n ? Math.round((passed / allAssertions.length) * 1000) / 1000\n : weightedScore >= 0.5\n ? 1.0\n : 0.0;\n\n allPassRates.push(passRate);\n\n // Write grading.json\n const grading = {\n assertions: allAssertions,\n summary: { passed, failed, total: allAssertions.length, pass_rate: passRate },\n execution_metrics: { tool_calls: {}, total_tool_calls: 0, errors_encountered: 0 },\n evaluators: evaluators.map((e) => ({\n name: e.name,\n type: e.type,\n score: e.score,\n reasoning: '',\n weight: e.weight,\n })),\n };\n await writeFile(\n join(testDir, 'grading.json'),\n `${JSON.stringify(grading, null, 2)}\\n`,\n 'utf8',\n );\n\n // Build index entry (match CLI-mode schema for dashboard compatibility)\n const scores = evaluators.map((e) => ({\n name: e.name,\n type: e.type,\n score: e.score,\n weight: e.weight,\n verdict: e.score >= 0.5 ? 'pass' : 'fail',\n assertions: e.assertions.map((a) => ({\n text: a.text,\n passed: a.passed,\n evidence: a.evidence ?? '',\n })),\n }));\n\n // Read execution_status from timing.json (written by pipeline run)\n let executionStatus = 'ok';\n const timingPath = join(testDir, 'timing.json');\n if (existsSync(timingPath)) {\n try {\n const timing = JSON.parse(await readFile(timingPath, 'utf8'));\n if (typeof timing.execution_status === 'string') {\n executionStatus = timing.execution_status;\n }\n } catch {\n // Fall back to 'ok' if timing.json is unreadable\n }\n }\n\n const hasResponse = existsSync(join(testDir, 'response.md'));\n indexLines.push(\n JSON.stringify({\n timestamp: manifest.timestamp,\n test_id: testId,\n dataset: evalSet || undefined,\n experiment: experiment || undefined,\n score: Math.round(weightedScore * 1000) / 1000,\n target: targetName,\n scores,\n execution_status: executionStatus,\n grading_path: `${artifactSubdir}/grading.json`,\n timing_path: `${artifactSubdir}/timing.json`,\n response_path: hasResponse ? `${artifactSubdir}/response.md` : undefined,\n }),\n );\n }\n\n // Write index.jsonl\n await writeFile(\n join(exportDir, 'index.jsonl'),\n indexLines.length > 0 ? `${indexLines.join('\\n')}\\n` : '',\n 'utf8',\n );\n\n // Write benchmark.json\n const passRateStats = computeStats(allPassRates);\n const benchmark = {\n metadata: {\n eval_file: manifest.eval_file,\n timestamp: manifest.timestamp,\n experiment: experiment || undefined,\n targets: [targetName],\n tests_run: testIds,\n },\n run_summary: {\n [targetName]: {\n pass_rate: passRateStats,\n time_seconds: { mean: 0, stddev: 0 },\n tokens: { mean: 0, stddev: 0 },\n },\n },\n notes: [],\n };\n await writeFile(\n join(exportDir, 'benchmark.json'),\n `${JSON.stringify(benchmark, null, 2)}\\n`,\n 'utf8',\n );\n\n console.log(`Benchmark: ${testIds.length} test(s), pass_rate=${passRateStats.mean}`);\n },\n});\n\nfunction computeStats(values: readonly number[]): { mean: number; stddev: number } {\n if (values.length === 0) return { mean: 0, stddev: 0 };\n const mean = values.reduce((sum, v) => sum + v, 0) / values.length;\n const variance = values.reduce((sum, v) => sum + (v - mean) ** 2, 0) / values.length;\n return {\n mean: Math.round(mean * 1000) / 1000,\n stddev: Math.round(Math.sqrt(variance) * 1000) / 1000,\n };\n}\n","/**\n * `agentv pipeline grade` — Run code-grader assertions against response.md files\n * in an export directory produced by `pipeline input`.\n *\n * For each test, reads code_graders/<name>.json configs, executes each grader\n * with the response text on stdin (matching CodeEvaluator payload format),\n * and writes results to code_grader_results/<name>.json.\n *\n * Graders run concurrently (default: 4 workers) for performance.\n * Progress is printed to stderr so users see real-time feedback.\n *\n * Export directory additions:\n * <out-dir>/<eval-set>/<test-id>/code_grader_results/<name>.json\n */\nimport { mkdir, readFile, readdir, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nimport { executeScript } from '@agentv/core';\nimport { command, number, option, optional, positional, string } from 'cmd-ts';\n\nconst DEFAULT_CONCURRENCY = 10;\n\n/**\n * Convert a Message[] array to plain text.\n * Single message: returns content directly (no role prefix).\n * Multiple messages: prefixes each with @role for clarity.\n */\nfunction extractInputText(input: Array<{ role: string; content: string }>): string {\n if (!input || input.length === 0) return '';\n if (input.length === 1) return input[0].content;\n return input.map((m) => `@[${m.role}]:\\n${m.content}`).join('\\n\\n');\n}\n\n/** Describes a single grader to execute. */\nexport interface GraderTask {\n testId: string;\n testDir: string;\n resultsDir: string;\n graderFile: string;\n responseText: string;\n inputData: {\n input: Array<{ role: string; content: string }>;\n input_files?: unknown[];\n metadata?: Record<string, unknown>;\n };\n}\n\n/**\n * Run code-grader tasks with concurrency and progress feedback.\n * Shared by `pipeline grade` and `pipeline run`.\n */\nexport async function runCodeGraders(\n tasks: GraderTask[],\n concurrency: number,\n): Promise<{ totalGraders: number; totalPassed: number }> {\n let totalGraders = 0;\n let totalPassed = 0;\n let completed = 0;\n const total = tasks.length;\n\n if (total === 0) return { totalGraders: 0, totalPassed: 0 };\n\n const writeProgress = () => {\n process.stderr.write(`\\rGrading: ${completed}/${total} done`);\n };\n\n writeProgress();\n\n const executeGrader = async (task: GraderTask) => {\n const { testId, testDir, resultsDir, graderFile, responseText, inputData } = task;\n const graderConfig = JSON.parse(\n await readFile(join(testDir, 'code_graders', graderFile), 'utf8'),\n );\n const graderName = graderConfig.name;\n\n const inputText = extractInputText(inputData.input);\n const payload = JSON.stringify({\n output: [{ role: 'assistant', content: responseText }],\n input: inputData.input,\n criteria: '',\n expected_output: [],\n input_files: inputData.input_files ?? [],\n trace: null,\n token_usage: null,\n cost_usd: null,\n duration_ms: null,\n start_time: null,\n end_time: null,\n file_changes: null,\n workspace_path: null,\n config: graderConfig.config ?? null,\n metadata: inputData.metadata ?? {},\n input_text: inputText,\n output_text: responseText,\n expected_output_text: '',\n });\n\n try {\n const stdout = await executeScript(\n graderConfig.command,\n payload,\n undefined,\n graderConfig.cwd,\n );\n const parsed = JSON.parse(stdout);\n const score = typeof parsed.score === 'number' ? parsed.score : 0;\n // TODO: Remove hits/misses fallback once all grader scripts emit assertions natively.\n // The hits/misses format is deprecated; graders should output { assertions: [...] } directly.\n const assertions: { text: string; passed: boolean }[] =\n Array.isArray(parsed.assertions) && parsed.assertions.length > 0\n ? parsed.assertions\n : [\n ...(parsed.hits ?? []).map((h: string) => ({ text: h, passed: true })),\n ...(parsed.misses ?? []).map((m: string) => ({ text: m, passed: false })),\n ];\n\n const result = {\n name: graderName,\n type: 'code-grader',\n score,\n weight: graderConfig.weight ?? 1.0,\n assertions,\n details: parsed.details ?? {},\n };\n\n await writeFile(\n join(resultsDir, `${graderName}.json`),\n `${JSON.stringify(result, null, 2)}\\n`,\n 'utf8',\n );\n\n totalGraders++;\n if (score >= 0.5) totalPassed++;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`\\n ${testId}/${graderName}: ERROR — ${message}\\n`);\n\n const errorResult = {\n name: graderName,\n type: 'code-grader',\n score: 0,\n weight: graderConfig.weight ?? 1.0,\n assertions: [{ text: `Error: ${message}`, passed: false }],\n details: { error: message },\n };\n\n await writeFile(\n join(resultsDir, `${graderName}.json`),\n `${JSON.stringify(errorResult, null, 2)}\\n`,\n 'utf8',\n );\n totalGraders++;\n } finally {\n completed++;\n writeProgress();\n }\n };\n\n // Run with concurrency limit\n const pending = new Set<Promise<void>>();\n for (const task of tasks) {\n const p = executeGrader(task).then(() => {\n pending.delete(p);\n });\n pending.add(p);\n if (pending.size >= concurrency) {\n await Promise.race(pending);\n }\n }\n await Promise.all(pending);\n\n // Clear the progress line and print final summary\n process.stderr.write('\\n');\n\n return { totalGraders, totalPassed };\n}\n\nexport const evalGradeCommand = command({\n name: 'grade',\n description: 'Run code-grader assertions on responses in an export directory',\n args: {\n exportDir: positional({\n type: string,\n displayName: 'export-dir',\n description: 'Export directory from pipeline input',\n }),\n concurrency: option({\n type: optional(number),\n long: 'concurrency',\n short: 'j',\n description: `Number of graders to run in parallel (default: ${DEFAULT_CONCURRENCY})`,\n }),\n },\n handler: async ({ exportDir, concurrency }) => {\n const maxWorkers = concurrency ?? DEFAULT_CONCURRENCY;\n const manifestPath = join(exportDir, 'manifest.json');\n const manifest = JSON.parse(await readFile(manifestPath, 'utf8'));\n const testIds: string[] = manifest.test_ids;\n const evalSet: string = manifest.dataset ?? '';\n const safeEvalSet = evalSet ? evalSet.replace(/[\\/\\\\:*?\"<>|]/g, '_') : '';\n\n // Collect all grader tasks upfront so we know the total count\n const tasks: GraderTask[] = [];\n\n for (const testId of testIds) {\n const subpath = safeEvalSet ? [safeEvalSet, testId] : [testId];\n const testDir = join(exportDir, ...subpath);\n const codeGradersDir = join(testDir, 'code_graders');\n const resultsDir = join(testDir, 'code_grader_results');\n\n let graderFiles: string[];\n try {\n graderFiles = (await readdir(codeGradersDir)).filter((f) => f.endsWith('.json'));\n } catch {\n continue; // No code graders for this test\n }\n\n if (graderFiles.length === 0) continue;\n await mkdir(resultsDir, { recursive: true });\n\n // Read response and input once per test (shared by all graders for this test)\n const responseText = await readFile(join(testDir, 'response.md'), 'utf8');\n const inputData = JSON.parse(await readFile(join(testDir, 'input.json'), 'utf8'));\n\n for (const graderFile of graderFiles) {\n tasks.push({ testId, testDir, resultsDir, graderFile, responseText, inputData });\n }\n }\n\n const { totalGraders, totalPassed } = await runCodeGraders(tasks, maxWorkers);\n console.log(`Graded ${totalGraders} code-grader(s): ${totalPassed} passed`);\n },\n});\n","/**\n * `agentv pipeline input` — Extract eval inputs, target invocation info, and grader\n * configurations for subagent-mode eval runs.\n *\n * Reads an eval YAML file and writes a structured export directory that agents\n * and Python wrapper scripts can consume without re-parsing YAML or resolving\n * file references.\n *\n * Export directory layout:\n * <out-dir>/\n * ├── manifest.json\n * └── <eval-set>/ (omitted if eval.yaml has no name)\n * └── <test-id>/\n * ├── input.json\n * ├── invoke.json\n * ├── criteria.md\n * ├── expected_output.json (if present)\n * ├── llm_graders/<name>.json\n * └── code_graders/<name>.json\n */\nimport { readFile } from 'node:fs/promises';\nimport { mkdir, writeFile } from 'node:fs/promises';\nimport { dirname, join, relative, resolve } from 'node:path';\n\nimport type { CodeEvaluatorConfig, EvaluatorConfig, LlmGraderEvaluatorConfig } from '@agentv/core';\nimport { deriveCategory, loadTestSuite } from '@agentv/core';\nimport { command, option, optional, positional, string } from 'cmd-ts';\n\nimport { buildDefaultRunDir } from '../eval/result-layout.js';\nimport { findRepoRoot } from '../eval/shared.js';\nimport { selectTarget } from '../eval/targets.js';\n\nexport const evalInputCommand = command({\n name: 'input',\n description: 'Extract eval inputs, target commands, and grader prompts for subagent-mode runs',\n args: {\n evalPath: positional({\n type: string,\n displayName: 'eval-path',\n description: 'Path to eval YAML file',\n }),\n out: option({\n type: optional(string),\n long: 'out',\n description:\n 'Output directory for extracted inputs (default: .agentv/results/runs/<timestamp>)',\n }),\n experiment: option({\n type: optional(string),\n long: 'experiment',\n description: 'Experiment label (e.g. with_skills, without_skills)',\n }),\n },\n handler: async ({ evalPath, out, experiment }) => {\n const resolvedEvalPath = resolve(evalPath);\n const outDir = resolve(out ?? buildDefaultRunDir(process.cwd()));\n const repoRoot = await findRepoRoot(dirname(resolvedEvalPath));\n const evalDir = dirname(resolvedEvalPath);\n\n const category = deriveCategory(relative(process.cwd(), resolvedEvalPath));\n const suite = await loadTestSuite(resolvedEvalPath, repoRoot, { category });\n const tests = suite.tests;\n\n if (tests.length === 0) {\n console.error('No tests found in eval file.');\n process.exit(1);\n }\n\n // Try to resolve target for CLI invocation info.\n // Non-CLI providers default to agent mode (executor subagents) unless\n // subagent_mode_allowed: false is set in targets.yaml.\n let targetInfo: { kind: 'cli'; command: string; cwd: string; timeoutMs: number } | null = null;\n let targetName = 'agent';\n let targetKind = 'agent';\n let subagentModeAllowed = true;\n\n try {\n const selection = await selectTarget({\n testFilePath: resolvedEvalPath,\n repoRoot,\n cwd: evalDir,\n dryRun: false,\n dryRunDelay: 0,\n dryRunDelayMin: 0,\n dryRunDelayMax: 0,\n env: process.env,\n });\n\n targetName = selection.targetName;\n const resolved = selection.resolvedTarget;\n subagentModeAllowed = resolved.subagentModeAllowed !== false;\n\n if (resolved.kind === 'cli') {\n targetKind = 'cli';\n subagentModeAllowed = false;\n const config = resolved.config;\n targetInfo = {\n kind: 'cli',\n command: config.command,\n cwd: config.cwd ?? evalDir,\n timeoutMs: config.timeoutMs ?? 30000,\n };\n } else {\n targetKind = resolved.kind;\n }\n } catch {\n // No targets file found — subagent-as-target mode\n }\n\n const evalSetName = suite.metadata?.name?.trim() ?? '';\n const safeEvalSet = evalSetName ? evalSetName.replace(/[\\/\\\\:*?\"<>|]/g, '_') : '';\n\n const testIds: string[] = [];\n\n for (const test of tests) {\n const subpath = safeEvalSet ? [safeEvalSet, test.id] : [test.id];\n const testDir = join(outDir, ...subpath);\n await mkdir(testDir, { recursive: true });\n testIds.push(test.id);\n\n // input.json — aligned with eval YAML schema and code grader SDK field names\n const inputMessages = test.input.map((m) => ({\n role: m.role,\n content: typeof m.content === 'string' ? m.content : m.content,\n }));\n await writeJson(join(testDir, 'input.json'), {\n input: inputMessages,\n input_files: test.file_paths,\n metadata: test.metadata ?? {},\n });\n\n // invoke.json — CLI targets get command info; non-CLI targets get agent mode.\n // The manifest carries subagent_mode_allowed so consumers (the bench skill)\n // can decide whether to dispatch executor subagents or use `agentv eval`.\n if (targetInfo) {\n await writeJson(join(testDir, 'invoke.json'), {\n kind: 'cli',\n command: targetInfo.command,\n cwd: targetInfo.cwd,\n timeout_ms: targetInfo.timeoutMs,\n env: {},\n });\n } else {\n await writeJson(join(testDir, 'invoke.json'), {\n kind: 'agent',\n instructions: 'Execute this task in the current workspace. The agent IS the target.',\n });\n }\n\n // criteria.md\n await writeFile(join(testDir, 'criteria.md'), test.criteria ?? '', 'utf8');\n\n // expected_output.json (if present)\n if (\n test.expected_output.length > 0 ||\n (test.reference_answer !== undefined && test.reference_answer !== '')\n ) {\n await writeJson(join(testDir, 'expected_output.json'), {\n expected_output: test.expected_output,\n reference_answer: test.reference_answer ?? '',\n });\n }\n\n // Grader configs\n await writeGraderConfigs(testDir, test.assertions ?? [], evalDir);\n }\n\n // manifest.json\n await writeJson(join(outDir, 'manifest.json'), {\n eval_file: resolvedEvalPath,\n dataset: evalSetName || undefined,\n experiment: experiment || undefined,\n timestamp: new Date().toISOString(),\n target: {\n name: targetName,\n kind: targetKind,\n subagent_mode_allowed: subagentModeAllowed,\n },\n test_ids: testIds,\n });\n\n console.log(`Extracted ${testIds.length} test(s) to ${outDir}`);\n },\n});\n\nasync function writeGraderConfigs(\n testDir: string,\n assertions: readonly EvaluatorConfig[],\n evalDir: string,\n): Promise<void> {\n const codeGradersDir = join(testDir, 'code_graders');\n const llmGradersDir = join(testDir, 'llm_graders');\n\n let hasCodeGraders = false;\n let hasLlmGraders = false;\n\n for (const assertion of assertions) {\n if (assertion.type === 'code-grader') {\n if (!hasCodeGraders) {\n await mkdir(codeGradersDir, { recursive: true });\n hasCodeGraders = true;\n }\n const config = assertion as CodeEvaluatorConfig;\n await writeJson(join(codeGradersDir, `${config.name}.json`), {\n name: config.name,\n command: config.command,\n cwd: config.resolvedCwd ?? config.cwd ?? evalDir,\n weight: config.weight ?? 1.0,\n config: config.config ?? {},\n });\n } else if (assertion.type === 'llm-grader') {\n if (!hasLlmGraders) {\n await mkdir(llmGradersDir, { recursive: true });\n hasLlmGraders = true;\n }\n const config = assertion as LlmGraderEvaluatorConfig;\n let promptContent = '';\n\n if (config.resolvedPromptPath) {\n try {\n promptContent = await readFile(config.resolvedPromptPath, 'utf8');\n } catch {\n promptContent = typeof config.prompt === 'string' ? config.prompt : '';\n }\n } else if (typeof config.prompt === 'string') {\n promptContent = config.prompt;\n }\n\n await writeJson(join(llmGradersDir, `${config.name}.json`), {\n name: config.name,\n prompt_content: promptContent,\n weight: config.weight ?? 1.0,\n threshold: 0.5,\n config: {},\n });\n }\n }\n}\n\nasync function writeJson(filePath: string, data: unknown): Promise<void> {\n await writeFile(filePath, `${JSON.stringify(data, null, 2)}\\n`, 'utf8');\n}\n","/**\n * `agentv pipeline run` — Combined command that runs input extraction, CLI target\n * invocation, and code grading in a single step.\n *\n * Equivalent to running:\n * 1. `agentv pipeline input <eval> --out <dir>`\n * 2. Invoking each CLI target in parallel (writing response.md + timing.json)\n * 3. `agentv pipeline grade <dir>`\n *\n * For `kind: agent` targets, step 2 is skipped (subagent handles execution).\n *\n * To add new features: extend the handler — all logic is self-contained.\n */\nimport { exec } from 'node:child_process';\nimport { existsSync, readFileSync, unlinkSync } from 'node:fs';\nimport { mkdir, readFile, readdir, writeFile } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { dirname, join, relative, resolve } from 'node:path';\n\nimport { deriveCategory, loadTestSuite } from '@agentv/core';\nimport type { CodeEvaluatorConfig, EvaluatorConfig, LlmGraderEvaluatorConfig } from '@agentv/core';\nimport { command, number, oneOf, option, optional, positional, string } from 'cmd-ts';\n\nimport { buildDefaultRunDir } from '../eval/result-layout.js';\nimport { findRepoRoot } from '../eval/shared.js';\nimport { selectTarget } from '../eval/targets.js';\nimport type { GraderTask } from './grade.js';\nimport { runCodeGraders } from './grade.js';\n\n/**\n * Convert a Message[] array to plain text.\n * Single message: returns content directly (no role prefix).\n * Multiple messages: prefixes each with @role for clarity.\n */\nfunction extractInputText(input: Array<{ role: string; content: string }>): string {\n if (!input || input.length === 0) return '';\n if (input.length === 1) return input[0].content;\n return input.map((m) => `@[${m.role}]:\\n${m.content}`).join('\\n\\n');\n}\n\n/** Load key=value pairs from a .env file. Ignores comments and blank lines. */\nfunction loadEnvFile(dir: string): Record<string, string> {\n let current = resolve(dir);\n while (true) {\n const candidate = join(current, '.env');\n if (existsSync(candidate)) {\n const env: Record<string, string> = {};\n for (const line of readFileSync(candidate, 'utf8').split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n const eqIdx = trimmed.indexOf('=');\n if (eqIdx === -1) continue;\n env[trimmed.slice(0, eqIdx).trim()] = trimmed.slice(eqIdx + 1).trim();\n }\n return env;\n }\n const parent = dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return {};\n}\n\nexport const evalRunCommand = command({\n name: 'run',\n description: 'Extract inputs, invoke CLI targets, and run code graders in one step',\n args: {\n evalPath: positional({\n type: string,\n displayName: 'eval-path',\n description: 'Path to eval YAML file',\n }),\n out: option({\n type: optional(string),\n long: 'out',\n description: 'Output directory for results (default: .agentv/results/runs/<timestamp>)',\n }),\n workers: option({\n type: optional(number),\n long: 'workers',\n description: 'Parallel workers for target invocation (default: targets.yaml workers, then 5)',\n }),\n experiment: option({\n type: optional(string),\n long: 'experiment',\n description: 'Experiment label (e.g. with_skills, without_skills)',\n }),\n graderType: option({\n type: optional(oneOf(['code', 'none'])),\n long: 'grader-type',\n description:\n 'Which grading phase to run: \"code\" runs code-graders inline, omit to skip grading (use pipeline grade separately)',\n }),\n },\n handler: async ({ evalPath, out, workers, experiment, graderType }) => {\n const resolvedEvalPath = resolve(evalPath);\n const outDir = resolve(out ?? buildDefaultRunDir(process.cwd()));\n const repoRoot = await findRepoRoot(dirname(resolvedEvalPath));\n const evalDir = dirname(resolvedEvalPath);\n\n // ── Step 1: Extract inputs (same as pipeline input) ──────────────\n const category = deriveCategory(relative(process.cwd(), resolvedEvalPath));\n const suite = await loadTestSuite(resolvedEvalPath, repoRoot, { category });\n const tests = suite.tests;\n\n if (tests.length === 0) {\n console.error('No tests found in eval file.');\n process.exit(1);\n }\n\n let targetInfo: {\n kind: 'cli';\n command: string;\n cwd: string;\n timeoutMs: number;\n } | null = null;\n let targetName = 'agent';\n let targetKind = 'agent';\n let targetWorkers: number | undefined;\n\n try {\n const selection = await selectTarget({\n testFilePath: resolvedEvalPath,\n repoRoot,\n cwd: evalDir,\n dryRun: false,\n dryRunDelay: 0,\n dryRunDelayMin: 0,\n dryRunDelayMax: 0,\n env: process.env,\n });\n targetName = selection.targetName;\n targetWorkers = selection.resolvedTarget.workers;\n if (selection.resolvedTarget.kind === 'cli') {\n targetKind = 'cli';\n const config = selection.resolvedTarget.config;\n targetInfo = {\n kind: 'cli',\n command: config.command,\n cwd: config.cwd ?? evalDir,\n timeoutMs: config.timeoutMs ?? 30000,\n };\n }\n } catch {\n // No targets file — subagent-as-target mode\n }\n\n const evalSetName = suite.metadata?.name?.trim() ?? '';\n const safeEvalSet = evalSetName ? evalSetName.replace(/[\\/\\\\:*?\"<>|]/g, '_') : '';\n\n const testIds: string[] = [];\n\n for (const test of tests) {\n const subpath = safeEvalSet ? [safeEvalSet, test.id] : [test.id];\n const testDir = join(outDir, ...subpath);\n await mkdir(testDir, { recursive: true });\n testIds.push(test.id);\n\n const inputMessages = test.input.map((m) => ({\n role: m.role,\n content: typeof m.content === 'string' ? m.content : m.content,\n }));\n await writeJson(join(testDir, 'input.json'), {\n input: inputMessages,\n input_files: test.file_paths,\n metadata: test.metadata ?? {},\n });\n\n if (targetInfo) {\n await writeJson(join(testDir, 'invoke.json'), {\n kind: 'cli',\n command: targetInfo.command,\n cwd: targetInfo.cwd,\n timeout_ms: targetInfo.timeoutMs,\n env: {},\n });\n } else {\n await writeJson(join(testDir, 'invoke.json'), {\n kind: 'agent',\n instructions: 'Execute this task in the current workspace. The agent IS the target.',\n });\n }\n\n await writeFile(join(testDir, 'criteria.md'), test.criteria ?? '', 'utf8');\n\n if (\n test.expected_output.length > 0 ||\n (test.reference_answer !== undefined && test.reference_answer !== '')\n ) {\n await writeJson(join(testDir, 'expected_output.json'), {\n expected_output: test.expected_output,\n reference_answer: test.reference_answer ?? '',\n });\n }\n\n await writeGraderConfigs(testDir, test.assertions ?? [], evalDir);\n }\n\n await writeJson(join(outDir, 'manifest.json'), {\n eval_file: resolvedEvalPath,\n dataset: evalSetName || undefined,\n experiment: experiment || undefined,\n timestamp: new Date().toISOString(),\n target: { name: targetName, kind: targetKind },\n test_ids: testIds,\n });\n\n console.log(`Extracted ${testIds.length} test(s) to ${outDir}`);\n\n // ── Step 2: Invoke CLI targets in parallel ───────────────────────\n if (targetInfo) {\n const envVars = loadEnvFile(evalDir);\n // Set AGENTV_RUN_TIMESTAMP so CLI targets group artifacts under one run folder.\n if (!process.env.AGENTV_RUN_TIMESTAMP) {\n process.env.AGENTV_RUN_TIMESTAMP = new Date()\n .toISOString()\n .replace(/:/g, '-')\n .replace(/\\./g, '-');\n }\n const mergedEnv = { ...process.env, ...envVars };\n const maxWorkers = workers ?? targetWorkers ?? 5;\n let invCompleted = 0;\n const invTotal = testIds.length;\n\n const writeInvProgress = () => {\n process.stderr.write(`\\rInvoking: ${invCompleted}/${invTotal} done`);\n };\n\n console.log(`Invoking ${invTotal} CLI target(s) (${maxWorkers} workers)...`);\n writeInvProgress();\n\n const invokeTarget = async (testId: string): Promise<void> => {\n const subpath = safeEvalSet ? [safeEvalSet, testId] : [testId];\n const testDir = join(outDir, ...subpath);\n const invoke = JSON.parse(await readFile(join(testDir, 'invoke.json'), 'utf8'));\n if (invoke.kind !== 'cli') return;\n\n const inputData = JSON.parse(await readFile(join(testDir, 'input.json'), 'utf8'));\n const template: string = invoke.command;\n const cwd: string = invoke.cwd;\n const timeoutMs: number = invoke.timeout_ms ?? 120000;\n\n // Write temp prompt file\n const promptFile = join(tmpdir(), `agentv-prompt-${testId}-${Date.now()}.txt`);\n const outputFile = join(tmpdir(), `agentv-output-${testId}-${Date.now()}.txt`);\n const inputText = extractInputText(inputData.input);\n await writeFile(promptFile, inputText, 'utf8');\n\n let rendered = template;\n rendered = rendered.replace('{PROMPT_FILE}', promptFile);\n rendered = rendered.replace('{OUTPUT_FILE}', outputFile);\n rendered = rendered.replace('{PROMPT}', inputText);\n\n const start = performance.now();\n try {\n await new Promise<void>((resolveP, rejectP) => {\n exec(\n rendered,\n {\n cwd,\n timeout: timeoutMs,\n env: mergedEnv,\n maxBuffer: 10 * 1024 * 1024,\n },\n (error) => {\n if (error) rejectP(error);\n else resolveP();\n },\n );\n });\n const durationMs = Math.round(performance.now() - start);\n\n let response: string;\n if (existsSync(outputFile)) {\n response = readFileSync(outputFile, 'utf8');\n } else {\n response = 'ERROR: No output file generated';\n }\n\n await writeFile(join(testDir, 'response.md'), response, 'utf8');\n await writeJson(join(testDir, 'timing.json'), {\n duration_ms: durationMs,\n total_duration_seconds: Math.round(durationMs / 10) / 100,\n execution_status: 'ok',\n });\n\n process.stderr.write(`\\n ${testId}: OK (${durationMs}ms, ${response.length} chars)\\n`);\n } catch (error) {\n const durationMs = Math.round(performance.now() - start);\n const message = error instanceof Error ? error.message : String(error);\n const response = `ERROR: target failed — ${message}`;\n await writeFile(join(testDir, 'response.md'), response, 'utf8');\n await writeJson(join(testDir, 'timing.json'), {\n duration_ms: durationMs,\n total_duration_seconds: Math.round(durationMs / 10) / 100,\n execution_status: 'execution_error',\n });\n process.stderr.write(\n `\\n ${testId}: FAILED (${durationMs}ms) — ${message.slice(0, 200)}\\n`,\n );\n } finally {\n invCompleted++;\n writeInvProgress();\n // Cleanup temp files\n try {\n if (existsSync(promptFile)) unlinkSync(promptFile);\n if (existsSync(outputFile)) unlinkSync(outputFile);\n } catch {\n /* ignore cleanup errors */\n }\n }\n };\n\n // Run targets with concurrency limit\n const pending = new Set<Promise<void>>();\n for (const testId of testIds) {\n const task = invokeTarget(testId).then(() => {\n pending.delete(task);\n });\n pending.add(task);\n if (pending.size >= maxWorkers) {\n await Promise.race(pending);\n }\n }\n await Promise.all(pending);\n process.stderr.write('\\n');\n } else {\n console.log('Subagent-as-target mode — skipping CLI invocation.');\n }\n\n // ── Step 3: Run code graders (only when explicitly requested) ─────\n if (graderType !== 'code') {\n console.log(`\\nDone. Results in ${outDir}`);\n console.log(\n 'To run code graders: agentv pipeline grade <run-dir> (or re-run with --grader-type code)',\n );\n return;\n }\n\n // Collect grader tasks and run concurrently with progress feedback\n const graderTasks: GraderTask[] = [];\n\n for (const testId of testIds) {\n const subpath = safeEvalSet ? [safeEvalSet, testId] : [testId];\n const testDir = join(outDir, ...subpath);\n const codeGradersDir = join(testDir, 'code_graders');\n const resultsDir = join(testDir, 'code_grader_results');\n\n let graderFiles: string[];\n try {\n graderFiles = (await readdir(codeGradersDir)).filter((f) => f.endsWith('.json'));\n } catch {\n continue;\n }\n if (graderFiles.length === 0) continue;\n await mkdir(resultsDir, { recursive: true });\n\n const responseText = await readFile(join(testDir, 'response.md'), 'utf8');\n const inputData = JSON.parse(await readFile(join(testDir, 'input.json'), 'utf8'));\n\n for (const graderFile of graderFiles) {\n graderTasks.push({ testId, testDir, resultsDir, graderFile, responseText, inputData });\n }\n }\n\n const graderConcurrency = workers ?? 10;\n const { totalGraders, totalPassed } = await runCodeGraders(graderTasks, graderConcurrency);\n console.log(`Graded ${totalGraders} code-grader(s): ${totalPassed} passed`);\n console.log(`\\nDone. Agent can now perform LLM grading on responses in ${outDir}`);\n },\n});\n\n// ── Helpers (shared with input.ts) ──────────────────────────────────\n\nasync function writeJson(filePath: string, data: unknown): Promise<void> {\n await writeFile(filePath, `${JSON.stringify(data, null, 2)}\\n`, 'utf8');\n}\n\nasync function writeGraderConfigs(\n testDir: string,\n assertions: readonly EvaluatorConfig[],\n evalDir: string,\n): Promise<void> {\n const codeGradersDir = join(testDir, 'code_graders');\n const llmGradersDir = join(testDir, 'llm_graders');\n\n let hasCodeGraders = false;\n let hasLlmGraders = false;\n\n for (const assertion of assertions) {\n if (assertion.type === 'code-grader') {\n if (!hasCodeGraders) {\n await mkdir(codeGradersDir, { recursive: true });\n hasCodeGraders = true;\n }\n const config = assertion as CodeEvaluatorConfig;\n await writeJson(join(codeGradersDir, `${config.name}.json`), {\n name: config.name,\n command: config.command,\n cwd: config.resolvedCwd ?? config.cwd ?? evalDir,\n weight: config.weight ?? 1.0,\n config: config.config ?? {},\n });\n } else if (assertion.type === 'llm-grader') {\n if (!hasLlmGraders) {\n await mkdir(llmGradersDir, { recursive: true });\n hasLlmGraders = true;\n }\n const config = assertion as LlmGraderEvaluatorConfig;\n let promptContent = '';\n if (config.resolvedPromptPath) {\n try {\n promptContent = readFileSync(config.resolvedPromptPath, 'utf8');\n } catch {\n promptContent = typeof config.prompt === 'string' ? config.prompt : '';\n }\n } else if (typeof config.prompt === 'string') {\n promptContent = config.prompt;\n }\n await writeJson(join(llmGradersDir, `${config.name}.json`), {\n name: config.name,\n prompt_content: promptContent,\n weight: config.weight ?? 1.0,\n threshold: 0.5,\n config: {},\n });\n }\n }\n}\n","import { subcommands } from 'cmd-ts';\n\nimport { evalBenchCommand } from './bench.js';\nimport { evalGradeCommand } from './grade.js';\nimport { evalInputCommand } from './input.js';\nimport { evalRunCommand } from './run.js';\n\nexport const pipelineCommand = subcommands({\n name: 'pipeline',\n description: 'Agent-mode eval pipeline commands (input → grade → bench)',\n cmds: {\n input: evalInputCommand,\n grade: evalGradeCommand,\n bench: evalBenchCommand,\n run: evalRunCommand,\n },\n});\n","/**\n * `agentv results export` — converts JSONL eval results into a directory\n * structure matching the artifact-writer output format.\n *\n * Output structure:\n * <output-dir>/\n * benchmark.json — aggregate scores, pass/fail counts, timing\n * index.jsonl — per-test manifest with artifact pointers\n * <test-id>/\n * grading.json — per-test grading artifact (assertions, evaluators)\n * timing.json — per-test timing artifact\n * outputs/\n * response.md — human-readable agent response for this test\n * input.md — human-readable input messages for this test\n *\n * This module delegates artifact building to the shared artifact-writer so\n * that benchmark/grading/timing schemas stay aligned with `agentv eval`.\n *\n * How to extend:\n * - To change artifact schemas, update artifact-writer.ts (single source of truth).\n * - To add new per-test workspace files, add them under each test directory.\n */\n\nimport path from 'node:path';\nimport { command, option, optional, positional, string } from 'cmd-ts';\n\nimport { parseJsonlResults, writeArtifactsFromResults } from '../eval/artifact-writer.js';\nimport { loadResults as loadSharedResults, patchTestIds, resolveSourceFile } from './shared.js';\n\n// ── Export logic ─────────────────────────────────────────────────────────\n\nexport async function exportResults(\n sourceFile: string,\n content: string,\n outputDir: string,\n): Promise<void> {\n const results = parseJsonlResults(content);\n\n if (results.length === 0) {\n throw new Error(`No results found in ${sourceFile}`);\n }\n\n await writeArtifactsFromResults(patchTestIds(results), outputDir, {\n evalFile: sourceFile,\n });\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────\n\n/**\n * Derive the default output directory from a JSONL source path.\n * Handles both directory-per-run manifests (<ts>/index.jsonl) and legacy flat files.\n */\nfunction deriveOutputDir(cwd: string, sourceFile: string): string {\n const parentDir = path.basename(path.dirname(sourceFile));\n // Directory-per-run: parent is the timestamp dir (or legacy eval_<ts> dir)\n if (/^\\d{4}-\\d{2}-\\d{2}T/.test(parentDir)) {\n return path.join(cwd, '.agentv', 'results', 'export', parentDir);\n }\n if (parentDir.startsWith('eval_')) {\n // Legacy eval_ prefix: strip it\n return path.join(cwd, '.agentv', 'results', 'export', parentDir.slice(5));\n }\n // Legacy flat file: extract timestamp from filename\n const basename = path.basename(sourceFile, '.jsonl');\n const dirName = basename.startsWith('eval_') ? basename.slice(5) : basename;\n return path.join(cwd, '.agentv', 'results', 'export', dirName);\n}\n\n// ── CLI command ──────────────────────────────────────────────────────────\n\nexport const resultsExportCommand = command({\n name: 'export',\n description: 'Export JSONL eval results into a per-test directory structure',\n args: {\n source: positional({\n type: optional(string),\n displayName: 'source',\n description: 'JSONL result file to export (defaults to most recent in .agentv/results/)',\n }),\n out: option({\n type: optional(string),\n long: 'out',\n short: 'o',\n description: 'Output directory (defaults to .agentv/results/export/<run-timestamp>/)',\n }),\n dir: option({\n type: optional(string),\n long: 'dir',\n short: 'd',\n description: 'Working directory (default: current directory)',\n }),\n },\n handler: async ({ source, out, dir }) => {\n const cwd = dir ?? process.cwd();\n\n try {\n const { sourceFile } = await resolveSourceFile(source, cwd);\n const { results } = await loadSharedResults(source, cwd);\n\n const outputDir = out\n ? path.isAbsolute(out)\n ? out\n : path.resolve(cwd, out)\n : deriveOutputDir(cwd, sourceFile);\n\n await writeArtifactsFromResults(results, outputDir, {\n evalFile: sourceFile,\n });\n\n // Report exported test IDs\n console.log(`Exported ${results.length} test(s) to ${outputDir}`);\n for (const result of results) {\n const id =\n result.testId ?? (result as unknown as Record<string, unknown>).evalId ?? 'unknown';\n console.log(` ${id}`);\n }\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n },\n});\n","/**\n * Shared utilities for `agentv results` subcommands.\n *\n * Provides:\n * - resolveSourceFile() — find an index/results manifest from explicit path or auto-discover latest\n * - patchTestIds() — backward-compat eval_id -> test_id patching\n * - sourceArg — cmd-ts positional for optional result source path\n *\n * How to extend:\n * - To add a new subcommand, import loadResults() and sourceArg from this module.\n */\n\nimport { existsSync } from 'node:fs';\nimport { optional, positional, string } from 'cmd-ts';\n\nimport type { EvaluationResult } from '@agentv/core';\nimport { loadRunCache, resolveRunCacheFile } from '../eval/run-cache.js';\nimport { listResultFiles } from '../trace/utils.js';\nimport { loadManifestResults, resolveResultSourcePath } from './manifest.js';\n\n/** cmd-ts positional for optional result source file or workspace directory. */\nexport const sourceArg = positional({\n type: optional(string),\n displayName: 'source',\n description: 'Result file or workspace directory (defaults to most recent in .agentv/results/)',\n});\n\n/**\n * Resolve an index/results source path from explicit arg or auto-discovery.\n */\nexport async function resolveSourceFile(\n source: string | undefined,\n cwd: string,\n): Promise<{ sourceFile: string }> {\n let sourceFile: string;\n\n if (source) {\n sourceFile = resolveResultSourcePath(source, cwd);\n if (!existsSync(sourceFile)) {\n console.error(`Error: File not found: ${sourceFile}`);\n process.exit(1);\n }\n } else {\n const cache = await loadRunCache(cwd);\n const cachedFile = cache ? resolveRunCacheFile(cache) : '';\n if (cachedFile && existsSync(cachedFile)) {\n sourceFile = cachedFile;\n } else {\n const metas = listResultFiles(cwd, 1);\n if (metas.length === 0) {\n console.error('Error: No result files found in .agentv/results/');\n console.error('Run an evaluation first: agentv eval <eval-file>');\n process.exit(1);\n }\n sourceFile = metas[0].path;\n }\n }\n\n return { sourceFile };\n}\n\n/**\n * Load and parse eval results from an index/results source file, with backward-compat patching.\n */\nexport async function loadResults(\n source: string | undefined,\n cwd: string,\n): Promise<{ results: EvaluationResult[]; sourceFile: string }> {\n const { sourceFile } = await resolveSourceFile(source, cwd);\n const results = loadManifestResults(sourceFile);\n\n if (results.length === 0) {\n console.error(`No results found in ${sourceFile}`);\n process.exit(1);\n }\n\n return { results: patchTestIds(results), sourceFile };\n}\n\n/**\n * Patch older JSONL records that used eval_id instead of test_id.\n */\nexport function patchTestIds(results: EvaluationResult[]): EvaluationResult[] {\n return results.map((r) => {\n if (!r.testId && (r as unknown as Record<string, unknown>).evalId) {\n return { ...r, testId: String((r as unknown as Record<string, unknown>).evalId) };\n }\n return r;\n });\n}\n","import { readFileSync, readdirSync, statSync } from 'node:fs';\nimport path from 'node:path';\nimport type { EvaluationResult, TraceSummary } from '@agentv/core';\nimport { PASS_THRESHOLD, toCamelCaseDeep } from '@agentv/core';\nimport {\n RESULT_INDEX_FILENAME,\n RESULT_RUNS_DIRNAME,\n resolveExistingRunPrimaryPath,\n resolveWorkspaceOrFilePath,\n} from '../eval/result-layout.js';\nimport { loadManifestResults } from '../results/manifest.js';\n\n// ANSI color codes (no dependency needed)\nconst colors = {\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n green: '\\x1b[32m',\n red: '\\x1b[31m',\n yellow: '\\x1b[33m',\n cyan: '\\x1b[36m',\n gray: '\\x1b[90m',\n};\n\nconst noColor = process.env.NO_COLOR !== undefined || !process.stdout.isTTY;\nexport const c = noColor\n ? (Object.fromEntries(Object.keys(colors).map((k) => [k, ''])) as typeof colors)\n : colors;\n\n// Regex to strip ANSI escape codes\nconst ansiPattern = new RegExp(`${String.fromCharCode(27)}\\\\[[0-9;]*m`, 'g');\n\nexport function stripAnsi(str: string): string {\n return str.replace(ansiPattern, '');\n}\n\nexport function padRight(str: string, len: number): string {\n const plainLen = stripAnsi(str).length;\n return str + ' '.repeat(Math.max(0, len - plainLen));\n}\n\nexport function padLeft(str: string, len: number): string {\n const plainLen = stripAnsi(str).length;\n return ' '.repeat(Math.max(0, len - plainLen)) + str;\n}\n\n/**\n * A raw JSONL result record with snake_case keys as stored on disk.\n */\nexport interface RawResult {\n timestamp?: string;\n test_id?: string;\n eval_id?: string;\n dataset?: string;\n conversation_id?: string;\n score: number;\n assertions?: { text: string; passed: boolean; evidence?: string }[];\n target?: string;\n error?: string;\n scores?: RawEvaluatorScore[];\n trace?: RawTraceSummary;\n // Promoted execution metrics (snake_case from JSONL)\n token_usage?: { input: number; output: number; cached?: number };\n cost_usd?: number;\n duration_ms?: number;\n start_time?: string;\n end_time?: string;\n input?: unknown;\n output?: unknown;\n spans?: RawTraceSpan[];\n trials?: unknown[];\n aggregation?: unknown;\n file_changes?: string;\n}\n\nexport interface RawEvaluatorScore {\n name: string;\n type: string;\n score: number;\n assertions?: { text: string; passed: boolean; evidence?: string }[];\n weight?: number;\n}\n\nexport interface RawTraceSummary {\n event_count?: number;\n tool_calls?: Record<string, number>;\n error_count?: number;\n tool_durations?: Record<string, number[]>;\n llm_call_count?: number;\n // Execution metrics (present when trace includes provider metrics)\n token_usage?: { input: number; output: number; cached?: number };\n cost_usd?: number;\n duration_ms?: number;\n}\n\nexport interface RawTraceSpan {\n type?: 'tool' | 'llm' | string;\n name: string;\n duration_ms?: number;\n}\n\n/**\n * Load all result or trace records from a supported source.\n *\n * Supported sources:\n * - Run workspace directories / index.jsonl manifests\n * - Legacy simple trace JSONL files\n * - OTLP JSON trace files written via --otel-file\n */\nexport function loadResultFile(filePath: string): RawResult[] {\n const resolvedFilePath = resolveTraceResultPath(filePath);\n\n if (path.extname(resolvedFilePath) === '.json') {\n return loadOtlpTraceFile(resolvedFilePath);\n }\n\n if (path.basename(resolvedFilePath) === RESULT_INDEX_FILENAME) {\n return loadManifestAsRawResults(resolvedFilePath);\n }\n\n return loadJsonlRecords(resolvedFilePath);\n}\n\nfunction resolveTraceResultPath(filePath: string): string {\n return resolveWorkspaceOrFilePath(filePath);\n}\n\nfunction loadJsonlRecords(filePath: string): RawResult[] {\n const content = readFileSync(filePath, 'utf8');\n const lines = content\n .trim()\n .split('\\n')\n .filter((line) => line.trim());\n\n return lines.map((line, i) => {\n const record = JSON.parse(line) as RawResult;\n if (typeof record.score !== 'number') {\n throw new Error(`Missing or invalid score in result at line ${i + 1}: ${line.slice(0, 100)}`);\n }\n return record;\n });\n}\n\nfunction loadManifestAsRawResults(filePath: string): RawResult[] {\n return loadManifestResults(filePath).map(toRawResult);\n}\n\nfunction toRawResult(result: EvaluationResult): RawResult {\n return {\n timestamp: result.timestamp,\n test_id: result.testId,\n dataset: result.dataset,\n conversation_id: result.conversationId,\n score: result.score,\n assertions: result.assertions?.map((assertion) => ({\n text: assertion.text,\n passed: assertion.passed,\n evidence: assertion.evidence,\n })),\n target: result.target,\n error: result.error,\n scores: result.scores?.map((score) => ({\n name: score.name,\n type: score.type,\n score: score.score,\n assertions: score.assertions?.map((assertion) => ({\n text: assertion.text,\n passed: assertion.passed,\n evidence: assertion.evidence,\n })),\n weight: score.weight,\n })),\n token_usage: result.tokenUsage\n ? {\n input: result.tokenUsage.input,\n output: result.tokenUsage.output,\n cached: result.tokenUsage.cached,\n }\n : undefined,\n cost_usd: result.costUsd,\n duration_ms: result.durationMs,\n start_time: result.startTime,\n end_time: result.endTime,\n input: result.input,\n output: result.output,\n file_changes: result.fileChanges,\n };\n}\n\ntype OtlpAttributeValue =\n | { stringValue?: string; intValue?: number | string; doubleValue?: number; boolValue?: boolean }\n | { arrayValue?: { values?: OtlpAttributeValue[] } };\n\ninterface OtlpAttribute {\n key: string;\n value: OtlpAttributeValue;\n}\n\ninterface OtlpEvent {\n name?: string;\n attributes?: OtlpAttribute[];\n}\n\ninterface OtlpSpan {\n traceId?: string;\n spanId?: string;\n parentSpanId?: string;\n name?: string;\n startTimeUnixNano?: string;\n endTimeUnixNano?: string;\n attributes?: OtlpAttribute[];\n status?: { code?: number; message?: string };\n events?: OtlpEvent[];\n}\n\nfunction loadOtlpTraceFile(filePath: string): RawResult[] {\n const parsed = JSON.parse(readFileSync(filePath, 'utf8')) as {\n resourceSpans?: { scopeSpans?: { spans?: OtlpSpan[] }[] }[];\n };\n\n const spans = parsed.resourceSpans\n ?.flatMap((resource) => resource.scopeSpans ?? [])\n .flatMap((scope) => scope.spans ?? []);\n\n if (!spans || spans.length === 0) {\n return [];\n }\n\n const spanMap = new Map<string, OtlpSpan>();\n const childMap = new Map<string, OtlpSpan[]>();\n\n for (const span of spans) {\n if (!span.spanId) continue;\n spanMap.set(span.spanId, span);\n if (span.parentSpanId) {\n const siblings = childMap.get(span.parentSpanId) ?? [];\n siblings.push(span);\n childMap.set(span.parentSpanId, siblings);\n }\n }\n\n const roots = spans.filter((span) => !span.parentSpanId || !spanMap.has(span.parentSpanId));\n const supportedRoots = roots.filter(isAgentvEvalRoot);\n const candidateRoots = supportedRoots.length > 0 ? supportedRoots : roots;\n\n return candidateRoots.map((root, index) => {\n const descendants = collectChildSpans(root.spanId, childMap);\n const rootAttrs = parseOtlpAttributes(root.attributes);\n const parsedDescendants = descendants.map((span) => ({\n ...span,\n parsedAttributes: parseOtlpAttributes(span.attributes),\n }));\n const toolSpans = parsedDescendants.filter(\n (span) => typeof span.parsedAttributes.gen_ai_tool_name === 'string',\n );\n const llmSpans = parsedDescendants.filter(\n (span) =>\n span.parsedAttributes.gen_ai_operation_name === 'chat' ||\n (typeof span.name === 'string' && span.name.startsWith('chat ')),\n );\n const tokenUsage = descendants.reduce(\n (acc, span) => {\n const attrs = parseOtlpAttributes(span.attributes);\n acc.input += numberAttr(attrs.gen_ai_usage_input_tokens) ?? 0;\n acc.output += numberAttr(attrs.gen_ai_usage_output_tokens) ?? 0;\n const cached = numberAttr(attrs.gen_ai_usage_cache_read_input_tokens);\n if (cached !== undefined && cached > 0) {\n acc.cached = (acc.cached ?? 0) + cached;\n }\n return acc;\n },\n { input: 0, output: 0, cached: undefined as number | undefined },\n );\n\n const traceSummary = buildDerivedTraceSummary({\n trace: {\n event_count:\n numberAttr(rootAttrs.agentv_trace_event_count) ??\n (toolSpans.length > 0 ? toolSpans.length : undefined),\n tool_calls: countRawSpanNames(\n toolSpans.map((span) => ({\n type: 'tool',\n name: String(span.parsedAttributes.gen_ai_tool_name),\n })),\n ),\n error_count: descendants.filter((span) => span.status?.code === 2).length || undefined,\n llm_call_count:\n numberAttr(rootAttrs.agentv_trace_llm_call_count) ??\n (llmSpans.length > 0 ? llmSpans.length : undefined),\n },\n spans: [\n ...llmSpans.map((span) => ({\n type: 'llm' as const,\n name: span.name ?? 'chat',\n duration_ms: durationFromSpan(span),\n })),\n ...toolSpans.map((span) => ({\n type: 'tool' as const,\n name: String(span.parsedAttributes.gen_ai_tool_name),\n duration_ms: durationFromSpan(span),\n })),\n ],\n duration_ms: numberAttr(rootAttrs.agentv_trace_duration_ms) ?? durationFromSpan(root),\n cost_usd: numberAttr(rootAttrs.agentv_trace_cost_usd),\n token_usage:\n tokenUsage.input ||\n tokenUsage.output ||\n tokenUsage.cached ||\n numberAttr(rootAttrs.agentv_trace_token_input) ||\n numberAttr(rootAttrs.agentv_trace_token_output) ||\n numberAttr(rootAttrs.agentv_trace_token_cached)\n ? {\n input: tokenUsage.input || numberAttr(rootAttrs.agentv_trace_token_input) || 0,\n output: tokenUsage.output || numberAttr(rootAttrs.agentv_trace_token_output) || 0,\n ...(tokenUsage.cached || numberAttr(rootAttrs.agentv_trace_token_cached)\n ? {\n cached:\n tokenUsage.cached || numberAttr(rootAttrs.agentv_trace_token_cached) || 0,\n }\n : {}),\n }\n : undefined,\n });\n\n const score = numberAttr(rootAttrs.agentv_score);\n if (score === undefined) {\n throw new Error(\n `Unsupported OTLP trace root span at index ${index + 1}: missing agentv.score attribute`,\n );\n }\n\n return {\n test_id:\n stringAttr(rootAttrs.agentv_test_id) ??\n stringAttr(rootAttrs.agentv_eval_id) ??\n `trace-${index + 1}`,\n dataset: stringAttr(rootAttrs.agentv_dataset),\n target: stringAttr(rootAttrs.agentv_target),\n score,\n error: root.status?.code === 2 ? root.status.message : undefined,\n cost_usd: traceSummary?.cost_usd,\n duration_ms: traceSummary?.duration_ms,\n token_usage: traceSummary?.token_usage,\n trace: traceSummary\n ? {\n event_count: traceSummary.event_count,\n tool_calls: traceSummary.tool_calls,\n error_count: traceSummary.error_count,\n tool_durations: traceSummary.tool_durations,\n llm_call_count: traceSummary.llm_call_count,\n token_usage: traceSummary.token_usage,\n cost_usd: traceSummary.cost_usd,\n duration_ms: traceSummary.duration_ms,\n }\n : undefined,\n spans: traceSummary?.spans,\n output: stringAttr(rootAttrs.agentv_output_text),\n scores: root.events\n ?.filter(\n (event) =>\n event.name?.startsWith('agentv.grader.') || event.name?.startsWith('agentv.evaluator.'),\n )\n .map((event) => {\n const attrs = parseOtlpAttributes(event.attributes);\n const name =\n event.name?.replace(/^agentv\\.grader\\./, '').replace(/^agentv\\.evaluator\\./, '') ??\n 'unknown';\n return {\n name,\n type:\n stringAttr(attrs.agentv_grader_type) ??\n stringAttr(attrs.agentv_evaluator_type) ??\n 'unknown',\n score:\n numberAttr(attrs.agentv_grader_score) ??\n numberAttr(attrs.agentv_evaluator_score) ??\n 0,\n };\n }),\n } satisfies RawResult;\n });\n}\n\nfunction isAgentvEvalRoot(span: OtlpSpan): boolean {\n const attrs = parseOtlpAttributes(span.attributes);\n return (\n span.name === 'agentv.eval' ||\n numberAttr(attrs.agentv_score) !== undefined ||\n typeof stringAttr(attrs.agentv_test_id) === 'string'\n );\n}\n\nfunction collectChildSpans(\n spanId: string | undefined,\n childMap: Map<string, OtlpSpan[]>,\n): OtlpSpan[] {\n if (!spanId) return [];\n const direct = childMap.get(spanId) ?? [];\n const all = [...direct];\n for (const child of direct) {\n all.push(...collectChildSpans(child.spanId, childMap));\n }\n return all;\n}\n\nfunction parseOtlpAttributes(attributes: OtlpAttribute[] | undefined): Record<string, unknown> {\n const parsed: Record<string, unknown> = {};\n for (const attribute of attributes ?? []) {\n parsed[attribute.key.replace(/\\./g, '_')] = parseOtlpValue(attribute.value);\n }\n return parsed;\n}\n\nfunction parseOtlpValue(value: OtlpAttributeValue | undefined): unknown {\n if (!value) return undefined;\n if ('stringValue' in value && value.stringValue !== undefined) return value.stringValue;\n if ('intValue' in value && value.intValue !== undefined) return Number(value.intValue);\n if ('doubleValue' in value && value.doubleValue !== undefined) return value.doubleValue;\n if ('boolValue' in value && value.boolValue !== undefined) return value.boolValue;\n if ('arrayValue' in value)\n return (value.arrayValue?.values ?? []).map((entry) => parseOtlpValue(entry));\n return undefined;\n}\n\nfunction durationFromSpan(\n span: Pick<OtlpSpan, 'startTimeUnixNano' | 'endTimeUnixNano'>,\n): number | undefined {\n const start = Number(span.startTimeUnixNano);\n const end = Number(span.endTimeUnixNano);\n if (!Number.isFinite(start) || !Number.isFinite(end)) return undefined;\n return Math.round((end - start) / 1_000_000);\n}\n\nfunction stringAttr(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction numberAttr(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\ninterface DerivedTraceSummary extends RawTraceSummary {\n spans?: RawTraceSpan[];\n}\n\nexport function buildDerivedTraceSummary(result: {\n trace?: RawTraceSummary;\n spans?: RawTraceSpan[];\n token_usage?: RawResult['token_usage'];\n cost_usd?: number;\n duration_ms?: number;\n}): DerivedTraceSummary | undefined {\n const toolSpans = (result.spans ?? []).filter((span) => span.type === 'tool');\n const llmSpans = (result.spans ?? []).filter((span) => span.type === 'llm');\n const toolCalls = result.trace?.tool_calls ?? countRawSpanNames(toolSpans);\n const toolDurations = result.trace?.tool_durations ?? groupRawSpanDurations(toolSpans);\n const hasSpanData = (result.spans?.length ?? 0) > 0;\n const eventCount = result.trace?.event_count ?? (hasSpanData ? toolSpans.length : undefined);\n const llmCallCount = result.trace?.llm_call_count ?? (hasSpanData ? llmSpans.length : undefined);\n\n if (\n !result.trace &&\n !result.spans?.length &&\n result.token_usage === undefined &&\n result.cost_usd === undefined &&\n result.duration_ms === undefined\n ) {\n return undefined;\n }\n\n return {\n event_count: eventCount,\n tool_calls: toolCalls,\n error_count: result.trace?.error_count,\n tool_durations: toolDurations,\n llm_call_count: llmCallCount,\n token_usage: result.trace?.token_usage ?? result.token_usage,\n cost_usd: result.trace?.cost_usd ?? result.cost_usd,\n duration_ms: result.trace?.duration_ms ?? result.duration_ms,\n spans: result.spans,\n };\n}\n\nfunction countRawSpanNames(spans: RawTraceSpan[]): Record<string, number> | undefined {\n const counts: Record<string, number> = {};\n for (const span of spans) {\n counts[span.name] = (counts[span.name] ?? 0) + 1;\n }\n return Object.keys(counts).length > 0 ? counts : undefined;\n}\n\nfunction groupRawSpanDurations(spans: RawTraceSpan[]): Record<string, number[]> | undefined {\n const grouped: Record<string, number[]> = {};\n for (const span of spans) {\n if (span.duration_ms === undefined) continue;\n const existing = grouped[span.name] ?? [];\n existing.push(span.duration_ms);\n grouped[span.name] = existing;\n }\n return Object.keys(grouped).length > 0 ? grouped : undefined;\n}\n\nexport function getTraceSummary(result: RawResult): RawTraceSummary | undefined {\n const derived = buildDerivedTraceSummary(result);\n if (!derived) return undefined;\n const { spans: _spans, ...trace } = derived;\n return trace;\n}\n\nexport function getTraceSpans(result: RawResult): RawTraceSpan[] {\n return buildDerivedTraceSummary(result)?.spans ?? [];\n}\n\nexport function toTraceSummary(result: RawResult): TraceSummary | undefined {\n const rawTrace = getTraceSummary(result);\n if (!rawTrace) return undefined;\n return toCamelCaseDeep(rawTrace) as TraceSummary;\n}\n\n/**\n * Metadata about a result file for listing.\n */\nexport interface ResultFileMeta {\n path: string;\n filename: string;\n timestamp: string;\n testCount: number;\n passRate: number;\n avgScore: number;\n sizeBytes: number;\n}\n\n/**\n * Enumerate result files in the .agentv/results/ directory.\n * Scans runs/ for both directory-per-run layouts (index.jsonl preferred inside subdirs)\n * and legacy flat .jsonl files. Also scans the base directory for pre-runs/ files.\n */\nexport function listResultFiles(cwd: string, limit?: number): ResultFileMeta[] {\n const baseDir = path.join(cwd, '.agentv', 'results');\n const runsDir = path.join(baseDir, RESULT_RUNS_DIRNAME);\n\n const files: { filePath: string; displayName: string }[] = [];\n\n // Scan runs/ for both directory-based runs and flat JSONL files.\n // Process directories first so they take priority in dedup over flat files.\n try {\n const entries = readdirSync(runsDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const primaryPath = resolveExistingRunPrimaryPath(path.join(runsDir, entry.name));\n if (primaryPath) {\n files.push({ filePath: primaryPath, displayName: entry.name });\n }\n }\n }\n for (const entry of entries) {\n if (!entry.isDirectory() && entry.name.endsWith('.jsonl')) {\n files.push({ filePath: path.join(runsDir, entry.name), displayName: entry.name });\n }\n }\n } catch {\n // runs/ doesn't exist yet\n }\n\n // Also scan base directory for legacy files (backward compat)\n try {\n const entries = readdirSync(baseDir).filter((f) => f.endsWith('.jsonl'));\n for (const entry of entries) {\n files.push({ filePath: path.join(baseDir, entry), displayName: entry });\n }\n } catch {\n // Base directory doesn't exist yet\n }\n\n // Deduplicate by normalized name (strip .jsonl so dir \"eval_X\" matches file \"eval_X.jsonl\")\n const seen = new Set<string>();\n const uniqueFiles: { filePath: string; displayName: string }[] = [];\n for (const file of files) {\n const key = file.displayName.replace(/\\.jsonl$/, '');\n if (!seen.has(key)) {\n seen.add(key);\n uniqueFiles.push(file);\n }\n }\n\n // Sort by display name descending (most recent first)\n uniqueFiles.sort((a, b) => b.displayName.localeCompare(a.displayName));\n\n const limited = limit !== undefined && limit > 0 ? uniqueFiles.slice(0, limit) : uniqueFiles;\n\n const metas: ResultFileMeta[] = [];\n\n for (const { filePath, displayName } of limited) {\n try {\n const fileStat = statSync(filePath);\n const results = loadResultFile(filePath);\n\n const testCount = results.length;\n const passCount = results.filter((r) => r.score >= PASS_THRESHOLD).length;\n const passRate = testCount > 0 ? passCount / testCount : 0;\n const avgScore = testCount > 0 ? results.reduce((sum, r) => sum + r.score, 0) / testCount : 0;\n\n const filenameTimestamp = extractTimestampFromFilename(displayName);\n const timestamp = filenameTimestamp ?? results[0]?.timestamp ?? 'unknown';\n\n metas.push({\n path: filePath,\n filename: displayName,\n timestamp,\n testCount,\n passRate,\n avgScore,\n sizeBytes: fileStat.size,\n });\n } catch {\n // Skip unreadable files\n }\n }\n\n return metas;\n}\n\n/**\n * Extract ISO timestamp from eval filename like eval_2026-02-20T21-38-05-833Z.jsonl\n */\nexport function extractTimestampFromFilename(filename: string): string | undefined {\n const match = filename.match(/eval_(\\d{4}-\\d{2}-\\d{2}T[\\d-]+Z)/);\n if (!match) return undefined;\n // Re-convert dashes back to colons/dots for display\n return match[1].replace(/-(\\d{2})-(\\d{2})-(\\d{3})Z$/, ':$1:$2.$3Z');\n}\n\n/**\n * Format a number with commas for display.\n */\nexport function formatNumber(n: number): string {\n return n.toLocaleString();\n}\n\n/**\n * Format duration in ms to human-readable.\n */\nexport function formatDuration(ms: number): string {\n if (ms < 1000) return `${Math.round(ms)}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n const minutes = Math.floor(ms / 60000);\n const seconds = ((ms % 60000) / 1000).toFixed(0);\n return `${minutes}m${seconds}s`;\n}\n\n/**\n * Format cost in USD.\n */\nexport function formatCost(usd: number): string {\n if (usd < 0.01) return `$${usd.toFixed(4)}`;\n return `$${usd.toFixed(3)}`;\n}\n\n/**\n * Format file size for display.\n */\nexport function formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n\n/**\n * Format a score as percentage.\n */\nexport function formatScore(score: number): string {\n return `${(score * 100).toFixed(0)}%`;\n}\n","/**\n * `agentv results failures` — show only failed tests with assertion evidence.\n *\n * Filters results to score < 1.0 and outputs JSON with each failed test's\n * failed assertions with evidence text. Passing tests are omitted entirely.\n *\n * How to extend:\n * - To add new fields to failure output, update formatFailures and FailureEntry.\n */\n\nimport type { EvaluationResult } from '@agentv/core';\nimport { command, option, optional, string } from 'cmd-ts';\nimport { loadResults, sourceArg } from './shared.js';\n\n// ── Formatting ───────────────────────────────────────────────────────────\n\nexport interface FailureEntry {\n test_id: string;\n score: number;\n assertions: { text: string; passed: boolean; evidence?: string }[];\n}\n\nexport function formatFailures(results: EvaluationResult[]): FailureEntry[] {\n return results\n .filter((r) => r.score < 1.0)\n .map((r) => {\n let assertions = (r.assertions ?? []).map((a) => ({\n text: a.text,\n passed: a.passed,\n evidence: a.evidence,\n }));\n\n // Fall back to per-evaluator assertions\n if (assertions.length === 0 && r.scores) {\n assertions = r.scores.flatMap((s) =>\n (s.assertions ?? []).map((a) => ({\n text: a.text,\n passed: a.passed,\n evidence: a.evidence,\n })),\n );\n }\n\n return { test_id: r.testId, score: r.score, assertions } satisfies FailureEntry;\n });\n}\n\n// ── CLI command ──────────────────────────────────────────────────────────\n\nexport const resultsFailuresCommand = command({\n name: 'failures',\n description: 'Show only failed tests with assertion evidence',\n args: {\n source: sourceArg,\n dir: option({\n type: optional(string),\n long: 'dir',\n short: 'd',\n description: 'Working directory (default: current directory)',\n }),\n },\n handler: async ({ source, dir }) => {\n const cwd = dir ?? process.cwd();\n try {\n const { results } = await loadResults(source, cwd);\n console.log(JSON.stringify(formatFailures(results), null, 2));\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n },\n});\n","/**\n * `agentv results show` — full detail for a single test result.\n *\n * Displays JSON with input, score, duration, tokens, all assertions (pass + fail),\n * and the agent's response output for one test identified by --test-id.\n *\n * How to extend:\n * - To add new detail fields, update formatShow and the ShowJson interface.\n */\n\nimport type { EvaluationResult } from '@agentv/core';\nimport { command, option, optional, string } from 'cmd-ts';\nimport { loadResults, sourceArg } from './shared.js';\n\n// ── Helpers ──────────────────────────────────────────────────────────────\n\nexport function findResult(\n results: EvaluationResult[],\n testId: string,\n): EvaluationResult | undefined {\n return results.find((r) => r.testId === testId);\n}\n\nfunction formatInput(result: EvaluationResult): string {\n const input = (result as unknown as Record<string, unknown>).input;\n if (!input) return '(no input)';\n if (typeof input === 'string') return input;\n if (Array.isArray(input)) {\n return input\n .map((msg: unknown) => String((msg as Record<string, unknown>).content ?? ''))\n .join('\\n');\n }\n return '(no input)';\n}\n\nfunction formatOutput(result: EvaluationResult): string {\n if (!result.output || result.output.length === 0) return '(no output)';\n return result.output\n .map((msg) => String((msg as unknown as Record<string, unknown>).content ?? ''))\n .join('\\n');\n}\n\n// ── Formatting ───────────────────────────────────────────────────────────\n\nexport interface ShowJson {\n test_id: string;\n score: number;\n duration_ms?: number;\n total_tokens?: number;\n input: string;\n assertions: { text: string; passed: boolean; evidence?: string }[];\n response: string;\n}\n\nexport function formatShow(result: EvaluationResult): ShowJson {\n const usage = result.tokenUsage as { input?: number; output?: number } | undefined;\n let allAssertions = (result.assertions ?? []).map((a) => ({\n text: a.text,\n passed: a.passed,\n evidence: a.evidence,\n }));\n\n if (allAssertions.length === 0 && result.scores) {\n allAssertions = result.scores.flatMap((s) =>\n (s.assertions ?? []).map((a) => ({\n text: a.text,\n passed: a.passed,\n evidence: a.evidence,\n })),\n );\n }\n\n const totalTokens = usage ? (usage.input ?? 0) + (usage.output ?? 0) : undefined;\n\n return {\n test_id: result.testId,\n score: result.score,\n duration_ms: result.durationMs,\n total_tokens: totalTokens,\n input: formatInput(result),\n assertions: allAssertions,\n response: formatOutput(result),\n };\n}\n\n// ── CLI command ──────────────────────────────────────────────────────────\n\nexport const resultsShowCommand = command({\n name: 'show',\n description: 'Show full detail for a single test result',\n args: {\n source: sourceArg,\n testId: option({\n type: string,\n long: 'test-id',\n short: 't',\n description: 'Test ID to display',\n }),\n dir: option({\n type: optional(string),\n long: 'dir',\n short: 'd',\n description: 'Working directory (default: current directory)',\n }),\n },\n handler: async ({ source, testId, dir }) => {\n const cwd = dir ?? process.cwd();\n try {\n const { results } = await loadResults(source, cwd);\n const result = findResult(results, testId);\n\n if (!result) {\n const available = results.map((r) => r.testId).join(', ');\n console.error(`Error: Test ID \"${testId}\" not found.`);\n console.error(`Available test IDs: ${available}`);\n process.exit(1);\n }\n\n console.log(JSON.stringify(formatShow(result), null, 2));\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n },\n});\n","/**\n * `agentv results summary` — compact pass/fail summary of an eval run.\n *\n * Outputs JSON with:\n * - Total tests, passed, failed, pass rate\n * - Mean score, total duration, total tokens\n * - List of failed test IDs\n *\n * How to extend:\n * - To add new summary fields, update formatSummary and the SummaryJson interface.\n */\n\nimport { existsSync, readFileSync } from 'node:fs';\nimport type { EvaluationResult } from '@agentv/core';\nimport { command, option, optional, string } from 'cmd-ts';\nimport type { AggregateGradingArtifact } from '../eval/artifact-writer.js';\nimport { loadResults, sourceArg } from './shared.js';\n\n// ── Formatting ───────────────────────────────────────────────────────────\n\nexport interface SummaryJson {\n total: number;\n passed: number;\n failed: number;\n pass_rate: { mean: number };\n total_duration_ms: number;\n total_tokens: number;\n failed_test_ids: string[];\n}\n\nexport function formatSummary(\n results: EvaluationResult[],\n grading?: AggregateGradingArtifact,\n): SummaryJson {\n const total = results.length;\n\n let passed: number;\n let failed: number;\n let passRate: number;\n\n if (grading) {\n // Use pre-computed assertion-level counts from grading artifact\n passed = grading.summary.passed;\n failed = grading.summary.failed;\n passRate = grading.summary.pass_rate;\n } else {\n // Fall back to computing from per-test scores\n passed = results.filter((r) => r.score >= 1.0).length;\n failed = total - passed;\n passRate =\n total > 0 ? Math.round((results.reduce((s, r) => s + r.score, 0) / total) * 1000) / 1000 : 0;\n }\n\n let totalDurationMs = 0;\n let totalTokens = 0;\n for (const r of results) {\n if (r.durationMs != null) totalDurationMs += r.durationMs;\n const usage = r.tokenUsage as { input?: number; output?: number } | undefined;\n if (usage) totalTokens += (usage.input ?? 0) + (usage.output ?? 0);\n }\n\n const failedTestIds = results.filter((r) => r.score < 1.0).map((r) => r.testId);\n\n return {\n total,\n passed,\n failed,\n pass_rate: { mean: passRate },\n total_duration_ms: totalDurationMs,\n total_tokens: totalTokens,\n failed_test_ids: failedTestIds,\n };\n}\n\n// ── CLI command ──────────────────────────────────────────────────────────\n\nexport const resultsSummaryCommand = command({\n name: 'summary',\n description: 'Show compact pass/fail summary of eval results',\n args: {\n source: sourceArg,\n dir: option({\n type: optional(string),\n long: 'dir',\n short: 'd',\n description: 'Working directory (default: current directory)',\n }),\n },\n handler: async ({ source, dir }) => {\n const cwd = dir ?? process.cwd();\n try {\n const { results, sourceFile } = await loadResults(source, cwd);\n\n // Try to load companion grading.json\n let grading: AggregateGradingArtifact | undefined;\n const gradingPath = sourceFile.replace(/\\.jsonl$/, '.grading.json');\n if (existsSync(gradingPath)) {\n try {\n grading = JSON.parse(readFileSync(gradingPath, 'utf8'));\n } catch {\n // Fall back to JSONL-only computation\n }\n }\n\n console.log(JSON.stringify(formatSummary(results, grading), null, 2));\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n },\n});\n","/**\n * `agentv results validate` — Validate that a run directory contains well-formed\n * artifacts compatible with the AgentV dashboard and results commands.\n *\n * Checks:\n * 1. Directory follows the `runs/<timestamp>` naming convention\n * 2. index.jsonl exists and each line has required fields\n * 3. Per-test grading.json exists for every entry in the index\n * 4. Per-test timing.json exists (warning if missing)\n * 5. benchmark.json exists (warning if missing)\n * 6. Scores are within [0, 1]\n * 7. index.jsonl entries have `scores[]` array (warning if missing — dashboard needs it)\n *\n * Exit code 0 = valid, 1 = errors found.\n *\n * To extend: add new check functions to the `checks` array.\n */\nimport { existsSync, readFileSync, statSync } from 'node:fs';\nimport path from 'node:path';\n\nimport { command, positional, string } from 'cmd-ts';\n\n// ── Types ────────────────────────────────────────────────────────────────\n\ninterface Diagnostic {\n readonly severity: 'error' | 'warning';\n readonly message: string;\n}\n\ninterface IndexEntry {\n readonly timestamp?: string;\n readonly test_id?: string;\n readonly score?: number;\n readonly target?: string;\n readonly scores?: unknown[];\n readonly execution_status?: string;\n readonly grading_path?: string;\n readonly timing_path?: string;\n readonly [key: string]: unknown;\n}\n\n// ── Checks ───────────────────────────────────────────────────────────────\n\nfunction checkDirectoryNaming(runDir: string): Diagnostic[] {\n const dirName = path.basename(runDir);\n const parentName = path.basename(path.dirname(runDir));\n const diagnostics: Diagnostic[] = [];\n\n if (parentName !== 'runs') {\n diagnostics.push({\n severity: 'warning',\n message: `Directory is not under a 'runs/' parent (found '${parentName}/'). Expected: .agentv/results/runs/<run-dir>`,\n });\n }\n\n const isNewFormat = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}-\\d{2}-\\d{2}-\\d{3}Z$/.test(dirName);\n const isLegacyFormat = /^eval_\\d{4}-\\d{2}-\\d{2}T\\d{2}-\\d{2}-\\d{2}-\\d{3}Z$/.test(dirName);\n if (!isNewFormat && !isLegacyFormat) {\n diagnostics.push({\n severity: 'warning',\n message: `Directory name '${dirName}' does not match the expected pattern '<ISO-timestamp>'. Example: 2026-03-27T12-42-24-429Z`,\n });\n }\n\n return diagnostics;\n}\n\nfunction checkIndexJsonl(runDir: string): { diagnostics: Diagnostic[]; entries: IndexEntry[] } {\n const indexPath = path.join(runDir, 'index.jsonl');\n const diagnostics: Diagnostic[] = [];\n const entries: IndexEntry[] = [];\n\n if (!existsSync(indexPath)) {\n diagnostics.push({ severity: 'error', message: 'index.jsonl is missing' });\n return { diagnostics, entries };\n }\n\n const content = readFileSync(indexPath, 'utf8');\n const lines = content.split('\\n').filter((l) => l.trim().length > 0);\n\n if (lines.length === 0) {\n diagnostics.push({ severity: 'error', message: 'index.jsonl is empty' });\n return { diagnostics, entries };\n }\n\n for (let i = 0; i < lines.length; i++) {\n try {\n const entry: IndexEntry = JSON.parse(lines[i]);\n entries.push(entry);\n\n if (!entry.test_id) {\n diagnostics.push({\n severity: 'error',\n message: `index.jsonl line ${i + 1}: missing 'test_id'`,\n });\n }\n\n if (entry.score === undefined || entry.score === null) {\n diagnostics.push({\n severity: 'error',\n message: `index.jsonl line ${i + 1} (${entry.test_id ?? '?'}): missing 'score'`,\n });\n } else if (typeof entry.score !== 'number' || entry.score < 0 || entry.score > 1) {\n diagnostics.push({\n severity: 'error',\n message: `index.jsonl line ${i + 1} (${entry.test_id ?? '?'}): score ${entry.score} is outside [0, 1]`,\n });\n }\n\n if (!entry.target) {\n diagnostics.push({\n severity: 'error',\n message: `index.jsonl line ${i + 1} (${entry.test_id ?? '?'}): missing 'target'`,\n });\n }\n\n if (!entry.grading_path) {\n diagnostics.push({\n severity: 'warning',\n message: `index.jsonl line ${i + 1} (${entry.test_id ?? '?'}): missing 'grading_path'`,\n });\n }\n\n if (!entry.scores || !Array.isArray(entry.scores) || entry.scores.length === 0) {\n diagnostics.push({\n severity: 'warning',\n message: `index.jsonl line ${i + 1} (${entry.test_id ?? '?'}): missing 'scores[]' array — dashboard may not show per-evaluator breakdown`,\n });\n } else {\n for (let j = 0; j < entry.scores.length; j++) {\n const s = entry.scores[j] as Record<string, unknown> | null;\n if (!s || typeof s !== 'object') {\n diagnostics.push({\n severity: 'error',\n message: `index.jsonl line ${i + 1} (${entry.test_id ?? '?'}): scores[${j}] is not an object`,\n });\n continue;\n }\n const missing: string[] = [];\n if (typeof s.name !== 'string') missing.push('name');\n if (typeof s.type !== 'string') missing.push('type');\n if (typeof s.score !== 'number') missing.push('score');\n if (typeof s.verdict !== 'string') missing.push('verdict');\n if (missing.length > 0) {\n diagnostics.push({\n severity: 'warning',\n message: `index.jsonl line ${i + 1} (${entry.test_id ?? '?'}): scores[${j}] missing fields: ${missing.join(', ')}`,\n });\n }\n }\n }\n\n if (!entry.execution_status) {\n diagnostics.push({\n severity: 'warning',\n message: `index.jsonl line ${i + 1} (${entry.test_id ?? '?'}): missing 'execution_status'`,\n });\n } else if (!['ok', 'quality_failure', 'execution_error'].includes(entry.execution_status)) {\n diagnostics.push({\n severity: 'warning',\n message: `index.jsonl line ${i + 1} (${entry.test_id ?? '?'}): unknown execution_status '${entry.execution_status}' (expected: ok, quality_failure, execution_error)`,\n });\n }\n } catch {\n diagnostics.push({\n severity: 'error',\n message: `index.jsonl line ${i + 1}: invalid JSON`,\n });\n }\n }\n\n return { diagnostics, entries };\n}\n\nfunction checkArtifactFiles(runDir: string, entries: IndexEntry[]): Diagnostic[] {\n const diagnostics: Diagnostic[] = [];\n\n for (const entry of entries) {\n const testId = entry.test_id ?? '?';\n\n // Check grading.json\n if (entry.grading_path) {\n const gradingPath = path.join(runDir, entry.grading_path);\n if (!existsSync(gradingPath)) {\n diagnostics.push({\n severity: 'error',\n message: `${testId}: grading.json not found at '${entry.grading_path}'`,\n });\n } else {\n try {\n const grading = JSON.parse(readFileSync(gradingPath, 'utf8'));\n if (!grading.assertions || !Array.isArray(grading.assertions)) {\n diagnostics.push({\n severity: 'error',\n message: `${testId}: grading.json missing 'assertions' array`,\n });\n }\n if (!grading.summary) {\n diagnostics.push({\n severity: 'warning',\n message: `${testId}: grading.json missing 'summary' object`,\n });\n }\n } catch {\n diagnostics.push({\n severity: 'error',\n message: `${testId}: grading.json is not valid JSON`,\n });\n }\n }\n }\n\n // Check timing.json\n if (entry.timing_path) {\n const timingPath = path.join(runDir, entry.timing_path);\n if (!existsSync(timingPath)) {\n diagnostics.push({\n severity: 'warning',\n message: `${testId}: timing.json not found at '${entry.timing_path}'`,\n });\n }\n }\n }\n\n // Check benchmark.json\n const benchmarkPath = path.join(runDir, 'benchmark.json');\n if (!existsSync(benchmarkPath)) {\n diagnostics.push({ severity: 'warning', message: 'benchmark.json is missing' });\n }\n\n return diagnostics;\n}\n\n// ── Command ──────────────────────────────────────────────────────────────\n\nexport const resultsValidateCommand = command({\n name: 'validate',\n description: 'Validate that a run directory contains well-formed result artifacts',\n args: {\n runDir: positional({\n type: string,\n displayName: 'run-dir',\n description: 'Path to the run directory to validate',\n }),\n },\n handler: async ({ runDir }) => {\n const resolvedDir = path.resolve(runDir);\n\n if (!existsSync(resolvedDir) || !statSync(resolvedDir).isDirectory()) {\n console.error(`Error: '${runDir}' is not a directory`);\n process.exit(1);\n }\n\n const allDiagnostics: Diagnostic[] = [];\n\n // Run all checks\n allDiagnostics.push(...checkDirectoryNaming(resolvedDir));\n\n const { diagnostics: indexDiags, entries } = checkIndexJsonl(resolvedDir);\n allDiagnostics.push(...indexDiags);\n\n if (entries.length > 0) {\n allDiagnostics.push(...checkArtifactFiles(resolvedDir, entries));\n }\n\n // Report\n const errors = allDiagnostics.filter((d) => d.severity === 'error');\n const warnings = allDiagnostics.filter((d) => d.severity === 'warning');\n\n if (allDiagnostics.length === 0) {\n console.log(`✓ Valid run directory: ${entries.length} test(s), no issues found`);\n return;\n }\n\n for (const d of errors) {\n console.error(` ERROR: ${d.message}`);\n }\n for (const d of warnings) {\n console.warn(` WARN: ${d.message}`);\n }\n\n console.log(\n `\\n${entries.length} test(s), ${errors.length} error(s), ${warnings.length} warning(s)`,\n );\n\n if (errors.length > 0) {\n process.exit(1);\n }\n },\n});\n","import { subcommands } from 'cmd-ts';\n\nimport { resultsExportCommand } from './export.js';\nimport { resultsFailuresCommand } from './failures.js';\nimport { resultsShowCommand } from './show.js';\nimport { resultsSummaryCommand } from './summary.js';\nimport { resultsValidateCommand } from './validate.js';\n\nexport const resultsCommand = subcommands({\n name: 'results',\n description: 'Inspect, export, and manage evaluation results',\n cmds: {\n export: resultsExportCommand,\n summary: resultsSummaryCommand,\n failures: resultsFailuresCommand,\n show: resultsShowCommand,\n validate: resultsValidateCommand,\n },\n});\n","/**\n * `agentv studio` — starts the AgentV Studio server, a React SPA for\n * reviewing evaluation results.\n *\n * The server uses Hono for routing and @hono/node-server to listen.\n * The Studio SPA is served from a pre-built dist directory.\n *\n * API endpoints:\n * - GET / — Studio SPA (React app)\n * - GET /api/runs — list available result files with metadata\n * - GET /api/runs/:filename — load results from a specific run file\n * - GET /api/feedback — read feedback reviews\n * - POST /api/feedback — write feedback reviews\n * - GET /api/projects — list registered projects\n * - GET /api/projects/:projectId/runs — project-scoped run list\n *\n * All data routes (runs, datasets, categories, evals, experiments, targets)\n * exist in both unscoped (/api/...) and project-scoped (/api/projects/:projectId/...)\n * variants. They share handler functions via DataContext, differing only in\n * how searchDir is resolved.\n *\n * Exported functions (for testing):\n * - resolveSourceFile(source, cwd) — resolves JSONL path\n * - loadResults(content) — parses JSONL into EvaluationResult[]\n * - createApp(results, cwd) — Hono app factory\n */\n\nimport { existsSync, readFileSync, readdirSync, statSync, writeFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { command, flag, number, option, optional, positional, string } from 'cmd-ts';\n\nimport {\n DEFAULT_CATEGORY,\n type EvaluationResult,\n addProject,\n discoverProjects,\n getProject,\n loadProjectRegistry,\n removeProject,\n} from '@agentv/core';\nimport type { Context } from 'hono';\nimport { Hono } from 'hono';\n\nimport { parseJsonlResults } from '../eval/artifact-writer.js';\nimport { loadRunCache, resolveRunCacheFile } from '../eval/run-cache.js';\nimport { listResultFiles } from '../trace/utils.js';\nimport {\n loadLightweightResults,\n loadManifestResults,\n parseResultManifest,\n resolveResultSourcePath,\n} from './manifest.js';\nimport { patchTestIds } from './shared.js';\nimport { type StudioConfig, loadStudioConfig, saveStudioConfig } from './studio-config.js';\n\n// ── Source resolution ────────────────────────────────────────────────────\n\n/**\n * Resolve the JSONL result file path from an explicit source, run cache,\n * or directory scan. Throws if no file can be found.\n */\nexport async function resolveSourceFile(source: string | undefined, cwd: string): Promise<string> {\n if (source) {\n const resolved = resolveResultSourcePath(source, cwd);\n if (!existsSync(resolved)) {\n throw new Error(`Source file not found: ${resolved}`);\n }\n return resolved;\n }\n\n // Prefer cache pointer, fall back to directory scan\n const cache = await loadRunCache(cwd);\n const cachedFile = cache ? resolveRunCacheFile(cache) : '';\n if (cachedFile && existsSync(cachedFile)) {\n return cachedFile;\n }\n\n const metas = listResultFiles(cwd, 10);\n if (metas.length === 0) {\n throw new Error(\n 'No result files found in .agentv/results/\\nRun an evaluation first: agentv eval <eval-file>',\n );\n }\n if (metas.length > 1) {\n console.log('Available result files:');\n for (const m of metas) {\n console.log(` ${m.path}`);\n }\n console.log(`\\nServing most recent: ${metas[0].path}\\n`);\n }\n return metas[0].path;\n}\n\n// ── JSONL parsing ────────────────────────────────────────────────────────\n\n/**\n * Parse JSONL content into EvaluationResult[], with backward-compat\n * patching of eval_id → testId.\n */\nexport function loadResults(content: string): EvaluationResult[] {\n const results = parseJsonlResults(content);\n if (results.length === 0) {\n throw new Error('No valid results found in JSONL content');\n }\n\n return results.map((r) => {\n if (!r.testId && (r as unknown as Record<string, unknown>).evalId) {\n return { ...r, testId: String((r as unknown as Record<string, unknown>).evalId) };\n }\n return r;\n });\n}\n\n// ── Feedback persistence ─────────────────────────────────────────────────\n\ninterface FeedbackReview {\n test_id: string;\n comment: string;\n updated_at: string;\n}\n\ninterface FeedbackData {\n reviews: FeedbackReview[];\n}\n\nfunction feedbackPath(resultDir: string): string {\n return path.join(resultDir, 'feedback.json');\n}\n\nfunction readFeedback(cwd: string): FeedbackData {\n const fp = feedbackPath(cwd);\n if (!existsSync(fp)) {\n return { reviews: [] };\n }\n try {\n return JSON.parse(readFileSync(fp, 'utf8')) as FeedbackData;\n } catch (err) {\n console.error(`Warning: could not parse ${fp}, starting fresh: ${(err as Error).message}`);\n return { reviews: [] };\n }\n}\n\nfunction writeFeedback(cwd: string, data: FeedbackData): void {\n writeFileSync(feedbackPath(cwd), `${JSON.stringify(data, null, 2)}\\n`, 'utf8');\n}\n\n// ── Shared utilities (used by handler functions) ─────────────────────────\n\ninterface FileNode {\n name: string;\n path: string;\n type: 'file' | 'dir';\n children?: FileNode[];\n}\n\nfunction buildFileTree(dirPath: string, relativeTo: string): FileNode[] {\n if (!existsSync(dirPath) || !statSync(dirPath).isDirectory()) {\n return [];\n }\n const entries = readdirSync(dirPath, { withFileTypes: true });\n return entries\n .sort((a, b) => {\n if (a.isDirectory() !== b.isDirectory()) return a.isDirectory() ? -1 : 1;\n return a.name.localeCompare(b.name);\n })\n .map((entry) => {\n const fullPath = path.join(dirPath, entry.name);\n const relPath = path.relative(relativeTo, fullPath);\n if (entry.isDirectory()) {\n return {\n name: entry.name,\n path: relPath,\n type: 'dir' as const,\n children: buildFileTree(fullPath, relativeTo),\n };\n }\n return { name: entry.name, path: relPath, type: 'file' as const };\n });\n}\n\nfunction inferLanguage(filePath: string): string {\n const ext = path.extname(filePath).toLowerCase();\n const langMap: Record<string, string> = {\n '.json': 'json',\n '.jsonl': 'json',\n '.ts': 'typescript',\n '.tsx': 'typescript',\n '.js': 'javascript',\n '.jsx': 'javascript',\n '.md': 'markdown',\n '.yaml': 'yaml',\n '.yml': 'yaml',\n '.log': 'plaintext',\n '.txt': 'plaintext',\n '.py': 'python',\n '.sh': 'shell',\n '.bash': 'shell',\n '.css': 'css',\n '.html': 'html',\n '.xml': 'xml',\n '.svg': 'xml',\n '.toml': 'toml',\n '.diff': 'diff',\n '.patch': 'diff',\n };\n return langMap[ext] ?? 'plaintext';\n}\n\n/**\n * Strip heavy fields (requests, trace) from results for JSON API responses.\n */\nfunction stripHeavyFields(results: readonly EvaluationResult[]) {\n return results.map((r) => {\n const { requests, trace, ...rest } = r as EvaluationResult & Record<string, unknown>;\n const toolCalls =\n trace?.toolCalls && Object.keys(trace.toolCalls).length > 0 ? trace.toolCalls : undefined;\n const graderDurationMs = (r.scores ?? []).reduce((sum, s) => sum + (s.durationMs ?? 0), 0);\n return {\n ...rest,\n ...(toolCalls && { _toolCalls: toolCalls }),\n ...(graderDurationMs > 0 && { _graderDurationMs: graderDurationMs }),\n };\n });\n}\n\n// ── Shared data-route handlers ───────────────────────────────────────────\n//\n// Each handler takes a Hono Context and a DataContext (resolved directories).\n// Both unscoped and project-scoped routes call the same handler, differing\n// only in how the DataContext is constructed.\n\ninterface DataContext {\n searchDir: string;\n agentvDir: string;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Hono Context generic varies by route\ntype C = Context<any, any, any>;\n\nfunction handleRuns(c: C, { searchDir }: DataContext) {\n const metas = listResultFiles(searchDir);\n return c.json({\n runs: metas.map((m) => {\n let target: string | undefined;\n let experiment: string | undefined;\n try {\n const records = loadLightweightResults(m.path);\n if (records.length > 0) {\n target = records[0].target;\n experiment = records[0].experiment;\n }\n } catch {\n // ignore enrichment errors\n }\n return {\n filename: m.filename,\n path: m.path,\n timestamp: m.timestamp,\n test_count: m.testCount,\n pass_rate: m.passRate,\n avg_score: m.avgScore,\n size_bytes: m.sizeBytes,\n ...(target && { target }),\n ...(experiment && { experiment }),\n };\n }),\n });\n}\n\nfunction handleRunDetail(c: C, { searchDir }: DataContext) {\n const filename = c.req.param('filename');\n const meta = listResultFiles(searchDir).find((m) => m.filename === filename);\n if (!meta) return c.json({ error: 'Run not found' }, 404);\n try {\n const loaded = patchTestIds(loadManifestResults(meta.path));\n return c.json({ results: stripHeavyFields(loaded), source: meta.filename });\n } catch {\n return c.json({ error: 'Failed to load run' }, 500);\n }\n}\n\nfunction handleRunDatasets(c: C, { searchDir, agentvDir }: DataContext) {\n const filename = c.req.param('filename');\n const meta = listResultFiles(searchDir).find((m) => m.filename === filename);\n if (!meta) return c.json({ error: 'Run not found' }, 404);\n try {\n const loaded = patchTestIds(loadManifestResults(meta.path));\n const { pass_threshold } = loadStudioConfig(agentvDir);\n const datasetMap = new Map<string, { total: number; passed: number; scoreSum: number }>();\n for (const r of loaded) {\n const ds = r.dataset ?? r.target ?? 'default';\n const entry = datasetMap.get(ds) ?? { total: 0, passed: 0, scoreSum: 0 };\n entry.total++;\n if (r.score >= pass_threshold) entry.passed++;\n entry.scoreSum += r.score;\n datasetMap.set(ds, entry);\n }\n const datasets = [...datasetMap.entries()].map(([name, entry]) => ({\n name,\n total: entry.total,\n passed: entry.passed,\n failed: entry.total - entry.passed,\n avg_score: entry.total > 0 ? entry.scoreSum / entry.total : 0,\n }));\n return c.json({ datasets });\n } catch {\n return c.json({ error: 'Failed to load datasets' }, 500);\n }\n}\n\nfunction handleRunCategories(c: C, { searchDir, agentvDir }: DataContext) {\n const filename = c.req.param('filename');\n const meta = listResultFiles(searchDir).find((m) => m.filename === filename);\n if (!meta) return c.json({ error: 'Run not found' }, 404);\n try {\n const loaded = patchTestIds(loadManifestResults(meta.path));\n const { pass_threshold } = loadStudioConfig(agentvDir);\n const categoryMap = new Map<\n string,\n { total: number; passed: number; scoreSum: number; datasets: Set<string> }\n >();\n for (const r of loaded) {\n const cat = r.category ?? DEFAULT_CATEGORY;\n const entry = categoryMap.get(cat) ?? {\n total: 0,\n passed: 0,\n scoreSum: 0,\n datasets: new Set<string>(),\n };\n entry.total++;\n if (r.score >= pass_threshold) entry.passed++;\n entry.scoreSum += r.score;\n entry.datasets.add(r.dataset ?? r.target ?? 'default');\n categoryMap.set(cat, entry);\n }\n const categories = [...categoryMap.entries()].map(([name, entry]) => ({\n name,\n total: entry.total,\n passed: entry.passed,\n failed: entry.total - entry.passed,\n avg_score: entry.total > 0 ? entry.scoreSum / entry.total : 0,\n dataset_count: entry.datasets.size,\n }));\n return c.json({ categories });\n } catch {\n return c.json({ error: 'Failed to load categories' }, 500);\n }\n}\n\nfunction handleCategoryDatasets(c: C, { searchDir, agentvDir }: DataContext) {\n const filename = c.req.param('filename');\n const category = decodeURIComponent(c.req.param('category') ?? '');\n const meta = listResultFiles(searchDir).find((m) => m.filename === filename);\n if (!meta) return c.json({ error: 'Run not found' }, 404);\n try {\n const loaded = patchTestIds(loadManifestResults(meta.path));\n const { pass_threshold } = loadStudioConfig(agentvDir);\n const filtered = loaded.filter((r) => (r.category ?? DEFAULT_CATEGORY) === category);\n const datasetMap = new Map<string, { total: number; passed: number; scoreSum: number }>();\n for (const r of filtered) {\n const ds = r.dataset ?? r.target ?? 'default';\n const entry = datasetMap.get(ds) ?? { total: 0, passed: 0, scoreSum: 0 };\n entry.total++;\n if (r.score >= pass_threshold) entry.passed++;\n entry.scoreSum += r.score;\n datasetMap.set(ds, entry);\n }\n const datasets = [...datasetMap.entries()].map(([name, entry]) => ({\n name,\n total: entry.total,\n passed: entry.passed,\n failed: entry.total - entry.passed,\n avg_score: entry.total > 0 ? entry.scoreSum / entry.total : 0,\n }));\n return c.json({ datasets });\n } catch {\n return c.json({ error: 'Failed to load datasets' }, 500);\n }\n}\n\nfunction handleEvalDetail(c: C, { searchDir }: DataContext) {\n const filename = c.req.param('filename');\n const evalId = c.req.param('evalId');\n const meta = listResultFiles(searchDir).find((m) => m.filename === filename);\n if (!meta) return c.json({ error: 'Run not found' }, 404);\n try {\n const loaded = patchTestIds(loadManifestResults(meta.path));\n const result = loaded.find((r) => r.testId === evalId);\n if (!result) return c.json({ error: 'Eval not found' }, 404);\n return c.json({ eval: result });\n } catch {\n return c.json({ error: 'Failed to load eval' }, 500);\n }\n}\n\nfunction handleEvalFiles(c: C, { searchDir }: DataContext) {\n const filename = c.req.param('filename');\n const evalId = c.req.param('evalId');\n const meta = listResultFiles(searchDir).find((m) => m.filename === filename);\n if (!meta) return c.json({ error: 'Run not found' }, 404);\n try {\n const content = readFileSync(meta.path, 'utf8');\n const records = parseResultManifest(content);\n const record = records.find((r) => (r.test_id ?? r.eval_id) === evalId);\n if (!record) return c.json({ error: 'Eval not found' }, 404);\n\n const baseDir = path.dirname(meta.path);\n const knownPaths = [\n record.grading_path,\n record.timing_path,\n record.input_path,\n record.output_path,\n record.response_path,\n ].filter((p): p is string => !!p);\n\n if (knownPaths.length === 0) return c.json({ files: [] });\n\n const artifactDirs = knownPaths.map((p) => path.dirname(p));\n let commonDir = artifactDirs[0];\n for (const dir of artifactDirs) {\n while (!dir.startsWith(commonDir)) {\n commonDir = path.dirname(commonDir);\n }\n }\n\n const artifactAbsDir = path.join(baseDir, commonDir);\n const files = buildFileTree(artifactAbsDir, baseDir);\n return c.json({ files });\n } catch {\n return c.json({ error: 'Failed to load file tree' }, 500);\n }\n}\n\nfunction handleEvalFileContent(c: C, { searchDir }: DataContext) {\n const filename = c.req.param('filename');\n const evalId = c.req.param('evalId');\n const meta = listResultFiles(searchDir).find((m) => m.filename === filename);\n if (!meta) return c.json({ error: 'Run not found' }, 404);\n\n // Extract file path from wildcard using a mount-agnostic marker\n const marker = `/runs/${filename}/evals/${evalId}/files/`;\n const markerIdx = c.req.path.indexOf(marker);\n const filePath = markerIdx >= 0 ? c.req.path.slice(markerIdx + marker.length) : '';\n\n if (!filePath) return c.json({ error: 'No file path specified' }, 400);\n\n const baseDir = path.dirname(meta.path);\n const absolutePath = path.resolve(baseDir, filePath);\n\n // Security: prevent path traversal — resolved path must be inside baseDir\n if (\n !absolutePath.startsWith(path.resolve(baseDir) + path.sep) &&\n absolutePath !== path.resolve(baseDir)\n ) {\n return c.json({ error: 'Path traversal not allowed' }, 403);\n }\n\n if (!existsSync(absolutePath) || !statSync(absolutePath).isFile()) {\n return c.json({ error: 'File not found' }, 404);\n }\n\n try {\n const fileContent = readFileSync(absolutePath, 'utf8');\n const language = inferLanguage(absolutePath);\n return c.json({ content: fileContent, language });\n } catch {\n return c.json({ error: 'Failed to read file' }, 500);\n }\n}\n\nfunction handleExperiments(c: C, { searchDir, agentvDir }: DataContext) {\n const metas = listResultFiles(searchDir);\n const { pass_threshold } = loadStudioConfig(agentvDir);\n const experimentMap = new Map<\n string,\n {\n targets: Set<string>;\n runFilenames: Set<string>;\n evalCount: number;\n passedCount: number;\n lastTimestamp: string;\n }\n >();\n\n for (const m of metas) {\n try {\n const records = loadLightweightResults(m.path);\n for (const r of records) {\n const experiment = r.experiment ?? 'default';\n const entry = experimentMap.get(experiment) ?? {\n targets: new Set<string>(),\n runFilenames: new Set<string>(),\n evalCount: 0,\n passedCount: 0,\n lastTimestamp: '',\n };\n entry.runFilenames.add(m.filename);\n if (r.target) entry.targets.add(r.target);\n entry.evalCount++;\n if (r.score >= pass_threshold) entry.passedCount++;\n if (r.timestamp && r.timestamp > entry.lastTimestamp) {\n entry.lastTimestamp = r.timestamp;\n }\n experimentMap.set(experiment, entry);\n }\n } catch {\n // skip runs that fail to load\n }\n }\n\n const experiments = [...experimentMap.entries()].map(([name, entry]) => ({\n name,\n run_count: entry.runFilenames.size,\n target_count: entry.targets.size,\n eval_count: entry.evalCount,\n passed_count: entry.passedCount,\n pass_rate: entry.evalCount > 0 ? entry.passedCount / entry.evalCount : 0,\n last_run: entry.lastTimestamp || null,\n }));\n\n return c.json({ experiments });\n}\n\nfunction handleTargets(c: C, { searchDir, agentvDir }: DataContext) {\n const metas = listResultFiles(searchDir);\n const { pass_threshold } = loadStudioConfig(agentvDir);\n const targetMap = new Map<\n string,\n {\n experiments: Set<string>;\n runFilenames: Set<string>;\n evalCount: number;\n passedCount: number;\n }\n >();\n\n for (const m of metas) {\n try {\n const records = loadLightweightResults(m.path);\n for (const r of records) {\n const target = r.target ?? 'default';\n const entry = targetMap.get(target) ?? {\n experiments: new Set<string>(),\n runFilenames: new Set<string>(),\n evalCount: 0,\n passedCount: 0,\n };\n entry.runFilenames.add(m.filename);\n if (r.experiment) entry.experiments.add(r.experiment);\n entry.evalCount++;\n if (r.score >= pass_threshold) entry.passedCount++;\n targetMap.set(target, entry);\n }\n } catch {\n // skip runs that fail to load\n }\n }\n\n const targets = [...targetMap.entries()].map(([name, entry]) => ({\n name,\n run_count: entry.runFilenames.size,\n experiment_count: entry.experiments.size,\n eval_count: entry.evalCount,\n passed_count: entry.passedCount,\n pass_rate: entry.evalCount > 0 ? entry.passedCount / entry.evalCount : 0,\n }));\n\n return c.json({ targets });\n}\n\nfunction handleConfig(c: C, { agentvDir }: DataContext) {\n return c.json(loadStudioConfig(agentvDir));\n}\n\nfunction handleFeedbackRead(c: C, { searchDir }: DataContext) {\n const resultsDir = path.join(searchDir, '.agentv', 'results');\n return c.json(readFeedback(existsSync(resultsDir) ? resultsDir : searchDir));\n}\n\n// ── Hono app factory ─────────────────────────────────────────────────────\n\n/**\n * Create a Hono app with dashboard, result picker, and feedback API routes.\n * Accepts an empty results array for the empty-state dashboard.\n */\nexport function createApp(\n results: EvaluationResult[],\n resultDir: string,\n cwd?: string,\n sourceFile?: string,\n options?: { studioDir?: string },\n): Hono {\n const searchDir = cwd ?? resultDir;\n const agentvDir = path.join(searchDir, '.agentv');\n const defaultCtx: DataContext = { searchDir, agentvDir };\n const app = new Hono();\n\n // ── Project resolution wrapper ────────────────────────────────────────\n // Resolves projectId → DataContext, returning 404 if not found.\n function withProject(\n c: C,\n handler: (c: C, ctx: DataContext) => Response | Promise<Response>,\n ): Response | Promise<Response> {\n const project = getProject(c.req.param('projectId') ?? '');\n if (!project || !existsSync(project.path)) {\n return c.json({ error: 'Project not found' }, 404);\n }\n return handler(c, {\n searchDir: project.path,\n agentvDir: path.join(project.path, '.agentv'),\n });\n }\n\n // ── Studio configuration ──────────────────────────────────────────────\n\n app.post('/api/config', async (c) => {\n try {\n const body = await c.req.json<Partial<StudioConfig>>();\n const current = loadStudioConfig(agentvDir);\n const updated = { ...current, ...body };\n if (typeof updated.pass_threshold === 'number') {\n updated.pass_threshold = Math.min(1, Math.max(0, updated.pass_threshold));\n }\n saveStudioConfig(agentvDir, updated);\n return c.json(updated);\n } catch {\n return c.json({ error: 'Failed to save config' }, 500);\n }\n });\n\n // ── Project management endpoints ─────────────────────────────────────\n\n /** Convert a ProjectEntry to snake_case wire format. */\n function projectEntryToWire(entry: {\n id: string;\n name: string;\n path: string;\n addedAt: string;\n lastOpenedAt: string;\n }) {\n return {\n id: entry.id,\n name: entry.name,\n path: entry.path,\n added_at: entry.addedAt,\n last_opened_at: entry.lastOpenedAt,\n };\n }\n\n app.get('/api/projects', (c) => {\n const registry = loadProjectRegistry();\n const projects = registry.projects.map((p) => {\n let runCount = 0;\n let passRate = 0;\n let lastRun: string | null = null;\n try {\n const metas = listResultFiles(p.path);\n runCount = metas.length;\n if (metas.length > 0) {\n const totalPassRate = metas.reduce((sum, m) => sum + m.passRate, 0);\n passRate = totalPassRate / metas.length;\n lastRun = metas[0].timestamp;\n }\n } catch {\n // Project path may be missing or inaccessible\n }\n return {\n ...projectEntryToWire(p),\n run_count: runCount,\n pass_rate: passRate,\n last_run: lastRun,\n };\n });\n return c.json({ projects });\n });\n\n app.post('/api/projects', async (c) => {\n try {\n const body = await c.req.json<{ path: string }>();\n if (!body.path) return c.json({ error: 'Missing path' }, 400);\n const entry = addProject(body.path);\n return c.json(projectEntryToWire(entry), 201);\n } catch (err) {\n return c.json({ error: (err as Error).message }, 400);\n }\n });\n\n app.delete('/api/projects/:projectId', (c) => {\n const removed = removeProject(c.req.param('projectId') ?? '');\n if (!removed) return c.json({ error: 'Project not found' }, 404);\n return c.json({ ok: true });\n });\n\n app.get('/api/projects/:projectId/summary', (c) => {\n const project = getProject(c.req.param('projectId') ?? '');\n if (!project) return c.json({ error: 'Project not found' }, 404);\n try {\n const metas = listResultFiles(project.path);\n const runCount = metas.length;\n const passRate = runCount > 0 ? metas.reduce((s, m) => s + m.passRate, 0) / runCount : 0;\n const lastRun = metas.length > 0 ? metas[0].timestamp : null;\n return c.json({\n id: project.id,\n name: project.name,\n path: project.path,\n run_count: runCount,\n pass_rate: passRate,\n last_run: lastRun,\n });\n } catch {\n return c.json({ error: 'Failed to read project' }, 500);\n }\n });\n\n app.post('/api/projects/discover', async (c) => {\n try {\n const body = await c.req.json<{ path: string }>();\n if (!body.path) return c.json({ error: 'Missing path' }, 400);\n const discovered = discoverProjects(body.path);\n const registered = discovered.map((p) => projectEntryToWire(addProject(p)));\n return c.json({ discovered: registered });\n } catch (err) {\n return c.json({ error: (err as Error).message }, 400);\n }\n });\n\n /** Aggregate runs from all registered projects, sorted by timestamp descending. */\n app.get('/api/projects/all-runs', (c) => {\n const registry = loadProjectRegistry();\n const allRuns: Array<{\n filename: string;\n path: string;\n timestamp: string;\n test_count: number;\n pass_rate: number;\n avg_score: number;\n size_bytes: number;\n target?: string;\n experiment?: string;\n project_id: string;\n project_name: string;\n }> = [];\n\n for (const p of registry.projects) {\n try {\n const metas = listResultFiles(p.path);\n for (const m of metas) {\n let target: string | undefined;\n let experiment: string | undefined;\n try {\n const records = loadLightweightResults(m.path);\n if (records.length > 0) {\n target = records[0].target;\n experiment = records[0].experiment;\n }\n } catch {\n // ignore enrichment errors\n }\n allRuns.push({\n filename: m.filename,\n path: m.path,\n timestamp: m.timestamp,\n test_count: m.testCount,\n pass_rate: m.passRate,\n avg_score: m.avgScore,\n size_bytes: m.sizeBytes,\n ...(target && { target }),\n ...(experiment && { experiment }),\n project_id: p.id,\n project_name: p.name,\n });\n }\n } catch {\n // skip inaccessible projects\n }\n }\n\n allRuns.sort((a, b) => b.timestamp.localeCompare(a.timestamp));\n return c.json({ runs: allRuns });\n });\n\n // ── Data routes (unscoped) ────────────────────────────────────────────\n\n app.get('/api/config', (c) => handleConfig(c, defaultCtx));\n app.get('/api/runs', (c) => handleRuns(c, defaultCtx));\n app.get('/api/runs/:filename', (c) => handleRunDetail(c, defaultCtx));\n app.get('/api/runs/:filename/datasets', (c) => handleRunDatasets(c, defaultCtx));\n app.get('/api/runs/:filename/categories', (c) => handleRunCategories(c, defaultCtx));\n app.get('/api/runs/:filename/categories/:category/datasets', (c) =>\n handleCategoryDatasets(c, defaultCtx),\n );\n app.get('/api/runs/:filename/evals/:evalId', (c) => handleEvalDetail(c, defaultCtx));\n app.get('/api/runs/:filename/evals/:evalId/files', (c) => handleEvalFiles(c, defaultCtx));\n app.get('/api/runs/:filename/evals/:evalId/files/*', (c) => handleEvalFileContent(c, defaultCtx));\n app.get('/api/experiments', (c) => handleExperiments(c, defaultCtx));\n app.get('/api/targets', (c) => handleTargets(c, defaultCtx));\n\n // Feedback (unscoped — read uses defaultCtx.searchDir as resultDir)\n app.get('/api/feedback', (c) => {\n const data = readFeedback(resultDir);\n return c.json(data);\n });\n\n app.post('/api/feedback', async (c) => {\n let body: unknown;\n try {\n body = await c.req.json();\n } catch {\n return c.json({ error: 'Invalid JSON' }, 400);\n }\n\n if (!body || typeof body !== 'object') {\n return c.json({ error: 'Invalid payload' }, 400);\n }\n\n const payload = body as Record<string, unknown>;\n if (!Array.isArray(payload.reviews)) {\n return c.json({ error: 'Missing reviews array' }, 400);\n }\n\n const incoming = payload.reviews as Record<string, unknown>[];\n for (const review of incoming) {\n if (typeof review.test_id !== 'string' || typeof review.comment !== 'string') {\n return c.json({ error: 'Each review must have test_id and comment strings' }, 400);\n }\n }\n\n const existing = readFeedback(resultDir);\n const now = new Date().toISOString();\n\n for (const review of incoming) {\n const newReview: FeedbackReview = {\n test_id: review.test_id as string,\n comment: review.comment as string,\n updated_at: now,\n };\n\n const idx = existing.reviews.findIndex((r) => r.test_id === newReview.test_id);\n if (idx >= 0) {\n existing.reviews[idx] = newReview;\n } else {\n existing.reviews.push(newReview);\n }\n }\n\n writeFeedback(resultDir, existing);\n return c.json(existing);\n });\n\n // Aggregated index (unscoped only)\n app.get('/api/index', (c) => {\n const metas = listResultFiles(searchDir);\n const entries = metas.map((m) => {\n let totalCostUsd = 0;\n try {\n const loaded = patchTestIds(loadManifestResults(m.path));\n totalCostUsd = loaded.reduce((sum, r) => sum + (r.costUsd ?? 0), 0);\n } catch {\n // ignore load errors for aggregate\n }\n return {\n run_filename: m.filename,\n test_count: m.testCount,\n pass_rate: m.passRate,\n avg_score: m.avgScore,\n total_cost_usd: totalCostUsd,\n timestamp: m.timestamp,\n };\n });\n return c.json({ entries });\n });\n\n // ── Data routes (project-scoped) ──────────────────────────────────────\n // Same handlers as above, with project-resolved DataContext via withProject.\n\n app.get('/api/projects/:projectId/config', (c) => withProject(c, handleConfig));\n app.get('/api/projects/:projectId/runs', (c) => withProject(c, handleRuns));\n app.get('/api/projects/:projectId/runs/:filename', (c) => withProject(c, handleRunDetail));\n app.get('/api/projects/:projectId/runs/:filename/datasets', (c) =>\n withProject(c, handleRunDatasets),\n );\n app.get('/api/projects/:projectId/runs/:filename/categories', (c) =>\n withProject(c, handleRunCategories),\n );\n app.get('/api/projects/:projectId/runs/:filename/categories/:category/datasets', (c) =>\n withProject(c, handleCategoryDatasets),\n );\n app.get('/api/projects/:projectId/runs/:filename/evals/:evalId', (c) =>\n withProject(c, handleEvalDetail),\n );\n app.get('/api/projects/:projectId/runs/:filename/evals/:evalId/files', (c) =>\n withProject(c, handleEvalFiles),\n );\n app.get('/api/projects/:projectId/runs/:filename/evals/:evalId/files/*', (c) =>\n withProject(c, handleEvalFileContent),\n );\n app.get('/api/projects/:projectId/experiments', (c) => withProject(c, handleExperiments));\n app.get('/api/projects/:projectId/targets', (c) => withProject(c, handleTargets));\n app.get('/api/projects/:projectId/feedback', (c) => withProject(c, handleFeedbackRead));\n\n // ── Static file serving for Studio SPA ────────────────────────────────\n\n const studioDistPath = options?.studioDir ?? resolveStudioDistDir();\n if (!studioDistPath || !existsSync(path.join(studioDistPath, 'index.html'))) {\n throw new Error('Studio dist not found. Run \"bun run build\" in apps/studio/ to build the SPA.');\n }\n\n app.get('/', (c) => {\n const indexPath = path.join(studioDistPath, 'index.html');\n if (existsSync(indexPath)) return c.html(readFileSync(indexPath, 'utf8'));\n return c.notFound();\n });\n\n app.get('/assets/*', (c) => {\n const assetPath = c.req.path;\n const filePath = path.join(studioDistPath, assetPath);\n if (!existsSync(filePath)) return c.notFound();\n const content = readFileSync(filePath);\n const ext = path.extname(filePath);\n const mimeTypes: Record<string, string> = {\n '.js': 'application/javascript',\n '.css': 'text/css',\n '.html': 'text/html',\n '.json': 'application/json',\n '.svg': 'image/svg+xml',\n '.png': 'image/png',\n '.woff2': 'font/woff2',\n '.woff': 'font/woff',\n };\n const contentType = mimeTypes[ext] ?? 'application/octet-stream';\n return new Response(content, {\n headers: {\n 'Content-Type': contentType,\n 'Cache-Control': 'public, max-age=31536000, immutable',\n },\n });\n });\n\n // SPA fallback: serve index.html for any non-API route that isn't matched\n app.get('*', (c) => {\n if (c.req.path.startsWith('/api/')) return c.json({ error: 'Not found' }, 404);\n const indexPath = path.join(studioDistPath, 'index.html');\n if (existsSync(indexPath)) return c.html(readFileSync(indexPath, 'utf8'));\n return c.notFound();\n });\n\n return app;\n}\n\n/**\n * Resolve the path to the studio dist directory.\n *\n * Searches several candidate locations covering:\n * - Running from TypeScript source (`bun apps/cli/src/cli.ts`)\n * - Running from built dist (`bun apps/cli/dist/cli.js`)\n * - Published npm package (studio bundled inside `dist/studio/`)\n */\nfunction resolveStudioDistDir(): string | undefined {\n const currentDir =\n typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));\n const candidates = [\n // From src/commands/results/ → sibling apps/studio/dist\n path.resolve(currentDir, '../../../../studio/dist'),\n // From dist/ → sibling apps/studio/dist (monorepo dev)\n path.resolve(currentDir, '../../studio/dist'),\n // Bundled inside CLI dist (published package: dist/studio/)\n path.resolve(currentDir, 'studio'),\n // From dist/ in monorepo root context\n path.resolve(currentDir, '../../../apps/studio/dist'),\n ];\n for (const candidate of candidates) {\n if (existsSync(candidate) && existsSync(path.join(candidate, 'index.html'))) {\n return candidate;\n }\n }\n return undefined;\n}\n\n// ── CLI command ──────────────────────────────────────────────────────────\n\nexport const resultsServeCommand = command({\n name: 'studio',\n description: 'Start AgentV Studio — a local dashboard for reviewing evaluation results',\n args: {\n source: positional({\n type: optional(string),\n displayName: 'source',\n description: 'JSONL result file to serve (defaults to most recent in .agentv/results/)',\n }),\n port: option({\n type: optional(number),\n long: 'port',\n short: 'p',\n description: 'Port to listen on (flag → PORT env var → 3117)',\n }),\n dir: option({\n type: optional(string),\n long: 'dir',\n short: 'd',\n description: 'Working directory (default: current directory)',\n }),\n multi: flag({\n long: 'multi',\n description: 'Launch in multi-project dashboard mode',\n }),\n add: option({\n type: optional(string),\n long: 'add',\n description: 'Register a project by path',\n }),\n remove: option({\n type: optional(string),\n long: 'remove',\n description: 'Unregister a project by ID',\n }),\n discover: option({\n type: optional(string),\n long: 'discover',\n description: 'Scan a directory tree for repos with .agentv/',\n }),\n },\n handler: async ({ source, port, dir, multi, add, remove, discover }) => {\n const cwd = dir ?? process.cwd();\n const listenPort = port ?? (process.env.PORT ? Number(process.env.PORT) : 3117);\n\n // ── Project management commands (non-server) ─────────────────────\n if (add) {\n try {\n const entry = addProject(add);\n console.log(`Registered project: ${entry.name} (${entry.id}) at ${entry.path}`);\n } catch (err) {\n console.error(`Error: ${(err as Error).message}`);\n process.exit(1);\n }\n return;\n }\n\n if (remove) {\n const removed = removeProject(remove);\n if (removed) {\n console.log(`Unregistered project: ${remove}`);\n } else {\n console.error(`Project not found: ${remove}`);\n process.exit(1);\n }\n return;\n }\n\n if (discover) {\n const discovered = discoverProjects(discover);\n if (discovered.length === 0) {\n console.log(`No projects with .agentv/ found under ${discover}`);\n return;\n }\n for (const p of discovered) {\n const entry = addProject(p);\n console.log(`Registered: ${entry.name} (${entry.id}) at ${entry.path}`);\n }\n console.log(`\\nDiscovered ${discovered.length} project(s).`);\n return;\n }\n\n // ── Determine multi-project mode ────────────────────────────────\n const registry = loadProjectRegistry();\n const isMultiProject = multi || registry.projects.length > 0;\n\n try {\n let results: EvaluationResult[] = [];\n let sourceFile: string | undefined;\n\n // When a source is explicitly provided, it must exist.\n // Otherwise, try to auto-discover results; start empty if none found.\n if (source) {\n const resolved = resolveResultSourcePath(source, cwd);\n if (!existsSync(resolved)) {\n console.error(`Error: Source file not found: ${resolved}`);\n process.exit(1);\n }\n sourceFile = resolved;\n results = patchTestIds(loadManifestResults(resolved));\n } else {\n // Auto-discover: run cache -> directory scan -> empty state\n const cache = await loadRunCache(cwd);\n const cachedFile = cache ? resolveRunCacheFile(cache) : '';\n if (cachedFile && existsSync(cachedFile)) {\n sourceFile = cachedFile;\n results = patchTestIds(loadManifestResults(cachedFile));\n } else {\n const metas = listResultFiles(cwd, 1);\n if (metas.length > 0) {\n sourceFile = metas[0].path;\n results = patchTestIds(loadManifestResults(metas[0].path));\n }\n // If no metas, results stays empty — dashboard shows welcome state\n }\n }\n\n // Use the run directory for feedback storage (matches #764 behavior)\n const resultDir = sourceFile ? path.dirname(path.resolve(sourceFile)) : cwd;\n const app = createApp(results, resultDir, cwd, sourceFile);\n\n if (isMultiProject) {\n console.log(`Multi-project mode: ${registry.projects.length} project(s) registered`);\n } else if (results.length > 0 && sourceFile) {\n console.log(`Serving ${results.length} result(s) from ${sourceFile}`);\n } else {\n console.log('No results found. Dashboard will show an empty state.');\n console.log('Run an evaluation to see results: agentv eval <eval-file>');\n }\n console.log(`Dashboard: http://localhost:${listenPort}`);\n console.log(`Projects API: http://localhost:${listenPort}/api/projects`);\n console.log('Press Ctrl+C to stop');\n\n const { serve: startServer } = await import('@hono/node-server');\n startServer({\n fetch: app.fetch,\n port: listenPort,\n });\n await new Promise(() => {});\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n },\n});\n","/**\n * Studio configuration loader.\n *\n * Reads studio-specific settings from the `studio:` section of\n * `.agentv/config.yaml`. Preserves all other fields (required_version,\n * eval_patterns, execution, etc.) when saving.\n *\n * Location: `.agentv/config.yaml`\n *\n * config.yaml format:\n * required_version: \">=4.2.0\"\n * studio:\n * pass_threshold: 0.8 # score >= this value is considered \"pass\"\n *\n * Backward compat: reads root-level `pass_threshold` if `studio:` section\n * is absent (legacy format). On save, always writes under `studio:`.\n *\n * If no config.yaml exists, defaults are used.\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport path from 'node:path';\n\nimport { PASS_THRESHOLD } from '@agentv/core';\nimport { parse as parseYaml, stringify as stringifyYaml } from 'yaml';\n\nexport interface StudioConfig {\n pass_threshold: number;\n}\n\nconst DEFAULTS: StudioConfig = {\n pass_threshold: PASS_THRESHOLD,\n};\n\n/**\n * Load studio config from `config.yaml` in the given `.agentv/` directory.\n * Reads from `studio.pass_threshold`, falling back to root-level\n * `pass_threshold` for backward compatibility.\n * Returns defaults when the file does not exist or is empty.\n * Clamps `pass_threshold` to [0, 1].\n */\nexport function loadStudioConfig(agentvDir: string): StudioConfig {\n const configPath = path.join(agentvDir, 'config.yaml');\n\n if (!existsSync(configPath)) {\n return { ...DEFAULTS };\n }\n\n const raw = readFileSync(configPath, 'utf-8');\n const parsed = parseYaml(raw);\n\n if (!parsed || typeof parsed !== 'object') {\n return { ...DEFAULTS };\n }\n\n // Prefer studio.pass_threshold, fall back to root-level pass_threshold (legacy)\n const studio = (parsed as Record<string, unknown>).studio;\n let threshold = DEFAULTS.pass_threshold;\n if (studio && typeof studio === 'object' && !Array.isArray(studio)) {\n const studioThreshold = (studio as Record<string, unknown>).pass_threshold;\n if (typeof studioThreshold === 'number') {\n threshold = studioThreshold;\n }\n } else if (typeof (parsed as Record<string, unknown>).pass_threshold === 'number') {\n threshold = (parsed as Record<string, unknown>).pass_threshold as number;\n }\n\n return {\n pass_threshold: Math.min(1, Math.max(0, threshold)),\n };\n}\n\n/**\n * Save studio config to `config.yaml` in the given `.agentv/` directory.\n * Merges into the existing file, preserving all non-studio fields\n * (required_version, eval_patterns, execution, etc.).\n * Writes studio settings under the `studio:` key.\n * Creates the directory if it does not exist.\n */\nexport function saveStudioConfig(agentvDir: string, config: StudioConfig): void {\n if (!existsSync(agentvDir)) {\n mkdirSync(agentvDir, { recursive: true });\n }\n const configPath = path.join(agentvDir, 'config.yaml');\n\n // Read existing config to preserve non-studio fields\n let existing: Record<string, unknown> = {};\n if (existsSync(configPath)) {\n const raw = readFileSync(configPath, 'utf-8');\n const parsed = parseYaml(raw);\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n existing = parsed as Record<string, unknown>;\n }\n }\n\n // Remove legacy root-level pass_threshold\n const { pass_threshold: _, ...rest } = existing;\n existing = rest;\n\n // Merge studio section\n existing.studio = { ...config };\n\n const yamlStr = stringifyYaml(existing);\n writeFileSync(configPath, yamlStr, 'utf-8');\n}\n","import { spawn } from 'node:child_process';\nimport { command, flag, subcommands } from 'cmd-ts';\nimport packageJson from '../../../package.json' with { type: 'json' };\n\n/**\n * Detect package manager from the script path.\n * If the path contains '.bun', it was installed via bun; otherwise assume npm.\n */\nexport function detectPackageManagerFromPath(scriptPath: string): 'bun' | 'npm' {\n if (scriptPath.includes('.bun')) {\n return 'bun';\n }\n return 'npm';\n}\n\nfunction detectPackageManager(): 'bun' | 'npm' {\n return detectPackageManagerFromPath(process.argv[1] ?? '');\n}\n\nfunction runCommand(cmd: string, args: string[]): Promise<{ exitCode: number; stdout: string }> {\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, { stdio: ['inherit', 'pipe', 'inherit'], shell: true });\n let stdout = '';\n child.stdout?.on('data', (data: Buffer) => {\n process.stdout.write(data);\n stdout += data.toString();\n });\n child.on('error', reject);\n child.on('close', (code) => resolve({ exitCode: code ?? 1, stdout }));\n });\n}\n\nconst updateCommand = command({\n name: 'update',\n description: 'Update agentv to the latest version',\n args: {\n npm: flag({ long: 'npm', description: 'Force update using npm' }),\n bun: flag({ long: 'bun', description: 'Force update using bun' }),\n },\n handler: async ({ npm, bun }) => {\n if (npm && bun) {\n console.error('Error: Cannot specify both --npm and --bun');\n process.exit(1);\n }\n\n let pm: 'bun' | 'npm';\n if (npm) {\n pm = 'npm';\n } else if (bun) {\n pm = 'bun';\n } else {\n pm = detectPackageManager();\n }\n\n const currentVersion = packageJson.version;\n console.log(`Current version: ${currentVersion}`);\n console.log(`Updating agentv using ${pm}...\\n`);\n\n const args = pm === 'npm' ? ['install', '-g', 'agentv@latest'] : ['add', '-g', 'agentv@latest'];\n\n try {\n const result = await runCommand(pm, args);\n\n if (result.exitCode !== 0) {\n console.error('\\nUpdate failed.');\n process.exit(1);\n }\n\n // Get new version\n let newVersion: string | undefined;\n try {\n const versionResult = await runCommand('agentv', ['--version']);\n newVersion = versionResult.stdout.trim();\n } catch {\n // Ignore - version check is best-effort\n }\n\n if (newVersion) {\n console.log(`\\nUpdate complete: ${currentVersion} → ${newVersion}`);\n } else {\n console.log('\\nUpdate complete.');\n }\n } catch (error) {\n if (error instanceof Error) {\n if (error.message.includes('ENOENT') || error.message.includes('not found')) {\n const alternative = pm === 'npm' ? 'bun' : 'npm';\n console.error(`Error: ${pm} not found. Try using --${alternative} flag.`);\n } else {\n console.error(`Error: ${error.message}`);\n }\n process.exit(1);\n }\n throw error;\n }\n },\n});\n\nexport const selfCommand = subcommands({\n name: 'self',\n description: 'Manage the agentv installation',\n cmds: {\n update: updateCommand,\n },\n});\n","import { command, number, oneOf, option, optional, string } from 'cmd-ts';\nimport { toSnakeCaseDeep } from '../../utils/case-conversion.js';\nimport {\n type ResultFileMeta,\n c,\n formatScore,\n formatSize,\n listResultFiles,\n padLeft,\n padRight,\n} from './utils.js';\n\nfunction formatListTable(metas: ResultFileMeta[]): string {\n const lines: string[] = [];\n\n if (metas.length === 0) {\n lines.push(`${c.yellow}No result files found in .agentv/results/${c.reset}`);\n lines.push(`${c.dim}Run an evaluation first: agentv run <eval-file>${c.reset}`);\n return lines.join('\\n');\n }\n\n lines.push('');\n lines.push(`${c.bold}Evaluation Results${c.reset} ${c.dim}(.agentv/results/)${c.reset}`);\n lines.push('');\n\n // Column widths\n const maxFileLen = Math.max(4, ...metas.map((m) => m.filename.length));\n\n // Header\n const header = ` ${padRight('File', maxFileLen)} ${padLeft('Tests', 5)} ${padLeft('Pass', 5)} ${padLeft('Score', 6)} ${padLeft('Size', 7)} Timestamp`;\n lines.push(`${c.dim}${header}${c.reset}`);\n lines.push(\n `${c.dim} ${'─'.repeat(maxFileLen)} ${'─'.repeat(5)} ${'─'.repeat(5)} ${'─'.repeat(6)} ${'─'.repeat(7)} ${'─'.repeat(24)}${c.reset}`,\n );\n\n for (const meta of metas) {\n const passColor = meta.passRate >= 1.0 ? c.green : meta.passRate >= 0.5 ? c.yellow : c.red;\n const scoreColor = meta.avgScore >= 0.9 ? c.green : meta.avgScore >= 0.5 ? c.yellow : c.red;\n\n const row = ` ${padRight(meta.filename, maxFileLen)} ${padLeft(String(meta.testCount), 5)} ${padLeft(`${passColor}${formatScore(meta.passRate)}${c.reset}`, 5)} ${padLeft(`${scoreColor}${formatScore(meta.avgScore)}${c.reset}`, 6)} ${padLeft(formatSize(meta.sizeBytes), 7)} ${c.dim}${meta.timestamp}${c.reset}`;\n lines.push(row);\n }\n\n lines.push('');\n lines.push(`${c.dim}${metas.length} result file${metas.length !== 1 ? 's' : ''} found${c.reset}`);\n lines.push('');\n\n return lines.join('\\n');\n}\n\nexport const traceListCommand = command({\n name: 'list',\n description: 'List recent evaluation result files from .agentv/results/',\n args: {\n limit: option({\n type: optional(number),\n long: 'limit',\n short: 'n',\n description: 'Maximum number of results to show (default: all)',\n }),\n format: option({\n type: optional(oneOf(['table', 'json'])),\n long: 'format',\n short: 'f',\n description: 'Output format: table (default) or json',\n }),\n dir: option({\n type: optional(string),\n long: 'dir',\n short: 'd',\n description: 'Working directory (default: current directory)',\n }),\n },\n handler: async ({ limit, format, dir }) => {\n const cwd = dir ?? process.cwd();\n const outputFormat = format ?? 'table';\n\n try {\n const metas = listResultFiles(cwd, limit);\n\n if (outputFormat === 'json') {\n console.log(JSON.stringify(toSnakeCaseDeep(metas), null, 2));\n } else {\n console.log(formatListTable(metas));\n }\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n },\n});\n","import {\n type EvalTest,\n type EvaluationContext,\n type EvaluationScore,\n type Evaluator,\n type EvaluatorConfig,\n type EvaluatorDispatchContext,\n type Message,\n type Provider,\n type ProviderRequest,\n type ProviderResponse,\n createBuiltinRegistry,\n toCamelCaseDeep,\n} from '@agentv/core';\nimport { command, oneOf, option, optional, positional, string } from 'cmd-ts';\nimport {\n type RawResult,\n c,\n formatScore,\n loadResultFile,\n padLeft,\n padRight,\n toTraceSummary,\n} from './utils.js';\n\n/**\n * Evaluator types that work without an LLM provider.\n */\nconst SUPPORTED_TYPES = [\n 'contains',\n 'regex',\n 'is-json',\n 'equals',\n 'latency',\n 'cost',\n 'token-usage',\n 'execution-metrics',\n] as const;\n\n/**\n * Parse key=value pairs from a string like \"max_tool_calls=10,max_tokens=2000\"\n */\nfunction parseKeyValues(s: string): Record<string, string> {\n const result: Record<string, string> = {};\n if (!s) return result;\n for (const pair of s.split(',')) {\n const eqIdx = pair.indexOf('=');\n if (eqIdx === -1) continue;\n result[pair.slice(0, eqIdx).trim()] = pair.slice(eqIdx + 1).trim();\n }\n return result;\n}\n\n/**\n * Parse an inline evaluator spec string into an EvaluatorConfig.\n *\n * Supported formats:\n * contains:value\n * regex:pattern\n * is-json\n * equals:value\n * latency:<threshold_ms>\n * cost:<budget_usd>\n * token-usage:max_total=N,max_input=N,max_output=N\n * execution-metrics:max_tool_calls=N,max_tokens=N,max_llm_calls=N,...\n */\nexport function parseAssertSpec(spec: string): EvaluatorConfig {\n const colonIdx = spec.indexOf(':');\n // Normalize snake_case to kebab-case for backward compat\n const type = (colonIdx === -1 ? spec : spec.slice(0, colonIdx)).replace(/_/g, '-');\n const params = colonIdx === -1 ? '' : spec.slice(colonIdx + 1);\n\n switch (type) {\n case 'contains':\n if (!params) throw new Error('contains requires a value: contains:<value>');\n return { name: 'contains', type: 'contains', value: params } as EvaluatorConfig;\n\n case 'regex':\n if (!params) throw new Error('regex requires a pattern: regex:<pattern>');\n return { name: 'regex', type: 'regex', value: params } as EvaluatorConfig;\n\n case 'is-json':\n return { name: 'is-json', type: 'is-json' } as EvaluatorConfig;\n\n case 'equals':\n if (!params) throw new Error('equals requires a value: equals:<value>');\n return { name: 'equals', type: 'equals', value: params } as EvaluatorConfig;\n\n case 'latency': {\n const threshold = Number(params);\n if (!params || Number.isNaN(threshold))\n throw new Error('latency requires a threshold in ms: latency:<ms>');\n return { name: 'latency', type: 'latency', threshold } as EvaluatorConfig;\n }\n\n case 'cost': {\n const budget = Number(params);\n if (!params || Number.isNaN(budget))\n throw new Error('cost requires a budget in USD: cost:<usd>');\n return { name: 'cost', type: 'cost', budget } as EvaluatorConfig;\n }\n\n case 'token-usage': {\n const kv = parseKeyValues(params);\n const config: Record<string, unknown> = { name: 'token-usage', type: 'token-usage' };\n if (kv.max_total) config.max_total = Number(kv.max_total);\n if (kv.max_input) config.max_input = Number(kv.max_input);\n if (kv.max_output) config.max_output = Number(kv.max_output);\n return config as EvaluatorConfig;\n }\n\n case 'execution-metrics': {\n const kv = parseKeyValues(params);\n const config: Record<string, unknown> = {\n name: 'execution-metrics',\n type: 'execution-metrics',\n };\n if (kv.max_tool_calls) config.max_tool_calls = Number(kv.max_tool_calls);\n if (kv.max_llm_calls) config.max_llm_calls = Number(kv.max_llm_calls);\n if (kv.max_tokens) config.max_tokens = Number(kv.max_tokens);\n if (kv.max_cost_usd) config.max_cost_usd = Number(kv.max_cost_usd);\n if (kv.max_duration_ms) config.max_duration_ms = Number(kv.max_duration_ms);\n return config as EvaluatorConfig;\n }\n\n default:\n throw new Error(\n `Unsupported evaluator type: \"${type}\". Supported: ${SUPPORTED_TYPES.join(', ')}`,\n );\n }\n}\n\n/**\n * Extract candidate answer from a result record.\n */\nfunction extractCandidate(raw: RawResult): string {\n if (raw.output !== undefined)\n return typeof raw.output === 'string' ? raw.output : JSON.stringify(raw.output);\n return '';\n}\n\n/**\n * Build a minimal EvalTest stub from a result record.\n * Only used to satisfy the EvaluationContext interface — deterministic and\n * trace-based evaluators don't access these fields.\n */\nfunction buildEvalTest(raw: RawResult): EvalTest {\n return {\n id: raw.test_id ?? 'unknown',\n question: '',\n input: [],\n expected_output: [],\n\n file_paths: [],\n criteria: '',\n };\n}\n\n/**\n * A no-op provider stub for evaluators that don't call LLM providers.\n */\nconst stubProvider: Provider = {\n id: 'trace-score-stub',\n kind: 'mock',\n targetName: 'trace-score-stub',\n invoke(_request: ProviderRequest): Promise<ProviderResponse> {\n throw new Error('trace score does not support LLM-based evaluators');\n },\n};\n\n/**\n * A no-op evaluator stub used as the required llmGrader in the dispatch context.\n */\nconst stubLlmGrader: Evaluator = {\n kind: 'llm-grader',\n evaluate(): EvaluationScore {\n throw new Error('trace score does not support LLM-based evaluators');\n },\n};\n\ninterface ScoreResult {\n testId: string;\n candidate: string;\n originalScore: number;\n newScore: number;\n verdict: string;\n assertions: readonly { text: string; passed: boolean; evidence?: string }[];\n}\n\nasync function runScore(\n results: RawResult[],\n evaluatorConfig: EvaluatorConfig,\n testIdFilter?: string,\n): Promise<ScoreResult[]> {\n const registry = createBuiltinRegistry();\n\n const dispatchContext: EvaluatorDispatchContext = {\n llmGrader: stubLlmGrader,\n registry,\n };\n\n const evaluator = await registry.create(evaluatorConfig, dispatchContext);\n const scored: ScoreResult[] = [];\n\n for (const raw of results) {\n if (testIdFilter && raw.test_id !== testIdFilter) continue;\n\n const trace = toTraceSummary(raw);\n const candidate = extractCandidate(raw);\n const output = raw.output as readonly Message[] | undefined;\n\n const evalContext: EvaluationContext = {\n evalCase: buildEvalTest(raw),\n candidate,\n target: { kind: 'custom' as const, name: raw.target ?? 'unknown', config: {} } as never,\n provider: stubProvider,\n attempt: 1,\n promptInputs: { question: '' },\n now: new Date(),\n output: Array.isArray(output) ? output : undefined,\n trace,\n tokenUsage: raw.token_usage\n ? (toCamelCaseDeep(raw.token_usage) as EvaluationContext['tokenUsage'])\n : undefined,\n costUsd: raw.cost_usd,\n durationMs: raw.duration_ms,\n startTime: raw.start_time,\n endTime: raw.end_time,\n };\n\n const score = await evaluator.evaluate(evalContext);\n scored.push({\n testId: raw.test_id ?? 'unknown',\n candidate: candidate.slice(0, 80),\n originalScore: raw.score,\n newScore: score.score,\n verdict: score.verdict,\n assertions: score.assertions,\n });\n }\n\n return scored;\n}\n\nfunction renderTable(scored: ScoreResult[], assertSpec: string): string {\n const lines: string[] = [];\n\n // Header\n const cols = [\n { header: 'Test ID', width: 24 },\n { header: 'Orig', width: 6 },\n { header: 'New', width: 6 },\n { header: 'Verdict', width: 8 },\n { header: 'Detail', width: 50 },\n ];\n\n const headerLine = cols\n .map((col) => padRight(`${c.bold}${col.header}${c.reset}`, col.width))\n .join(' ');\n lines.push(headerLine);\n lines.push(cols.map((col) => '─'.repeat(col.width)).join('──'));\n\n for (const r of scored) {\n const verdictColor = r.verdict === 'pass' ? c.green : c.red;\n const failed = r.assertions.filter((a) => !a.passed);\n const passed = r.assertions.filter((a) => a.passed);\n const detail =\n failed.length > 0\n ? failed[0].text.slice(0, 48)\n : passed.length > 0\n ? passed[0].text.slice(0, 48)\n : '';\n\n const row = [\n padRight(r.testId.slice(0, 24), cols[0].width),\n padLeft(formatScore(r.originalScore), cols[1].width),\n padLeft(`${verdictColor}${formatScore(r.newScore)}${c.reset}`, cols[2].width),\n padRight(`${verdictColor}${r.verdict.toUpperCase()}${c.reset}`, cols[3].width),\n detail.slice(0, cols[4].width),\n ].join(' ');\n lines.push(row);\n }\n\n // Summary\n const passCount = scored.filter((r) => r.verdict === 'pass').length;\n const total = scored.length;\n const meanScore = total > 0 ? scored.reduce((sum, r) => sum + r.newScore, 0) / total : 0;\n lines.push('');\n lines.push(\n `${c.bold}Assert:${c.reset} ${assertSpec} ${c.bold}Results:${c.reset} ${passCount}/${total} passed (${formatScore(passCount / (total || 1))}) ${c.bold}Mean:${c.reset} ${formatScore(meanScore)}`,\n );\n\n return lines.join('\\n');\n}\n\nexport const traceScoreCommand = command({\n name: 'score',\n description: 'Run evaluators against existing result files post-hoc',\n args: {\n file: positional({\n type: string,\n displayName: 'trace-source',\n description:\n 'Path to a run workspace, result manifest, simple trace JSONL, or OTLP JSON file',\n }),\n assert: option({\n type: string,\n long: 'assert',\n short: 'a',\n description:\n 'Evaluator spec: contains:<val>, regex:<pat>, is-json, equals:<val>, latency:<ms>, cost:<usd>, token-usage:<params>, execution-metrics:<params>',\n }),\n testId: option({\n type: optional(string),\n long: 'test-id',\n description: 'Filter to a specific test ID',\n }),\n format: option({\n type: optional(oneOf(['json', 'table'])),\n long: 'format',\n short: 'f',\n description: 'Output format (default: table)',\n }),\n },\n handler: async ({ file, assert: assertSpec, testId, format }) => {\n // Parse the evaluator spec\n let evaluatorConfig: EvaluatorConfig;\n try {\n evaluatorConfig = parseAssertSpec(assertSpec);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(`${c.red}Error:${c.reset} ${msg}`);\n process.exit(1);\n }\n\n // Load results\n let results: RawResult[];\n try {\n results = loadResultFile(file);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(`${c.red}Error:${c.reset} Could not load result file: ${msg}`);\n process.exit(1);\n }\n\n if (results.length === 0) {\n console.error(`${c.yellow}Warning:${c.reset} No results found in ${file}`);\n process.exit(0);\n }\n\n // Check for trace data if evaluator needs it\n const traceRequired = ['latency', 'cost', 'token-usage', 'execution-metrics'].includes(\n evaluatorConfig.type,\n );\n if (traceRequired) {\n const hasTrace = results.some(\n (r) =>\n toTraceSummary(r) ||\n r.cost_usd !== undefined ||\n r.duration_ms !== undefined ||\n r.token_usage !== undefined,\n );\n if (!hasTrace) {\n console.error(\n `${c.red}Error:${c.reset} Source lacks trace metrics. Use an OTLP trace export via ${c.bold}--otel-file${c.reset} or a run manifest with summary metrics in ${c.bold}index.jsonl${c.reset}.`,\n );\n process.exit(1);\n }\n }\n\n // Run scoring\n let scored: ScoreResult[];\n try {\n scored = await runScore(results, evaluatorConfig, testId);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(`${c.red}Error:${c.reset} Scoring failed: ${msg}`);\n process.exit(1);\n }\n\n if (scored.length === 0) {\n console.error(\n `${c.yellow}Warning:${c.reset} No results matched${testId ? ` test ID \"${testId}\"` : ''}`,\n );\n process.exit(0);\n }\n\n // Output\n if (format === 'json') {\n console.log(JSON.stringify(scored, null, 2));\n } else {\n console.log(renderTable(scored, assertSpec));\n }\n\n // Exit with non-zero if any failed\n const hasFailures = scored.some((r) => r.verdict !== 'pass');\n if (hasFailures) {\n process.exit(1);\n }\n },\n});\n","import { command, flag, oneOf, option, optional, positional, string } from 'cmd-ts';\nimport {\n type RawResult,\n c,\n formatCost,\n formatDuration,\n formatNumber,\n formatScore,\n getTraceSpans,\n getTraceSummary,\n loadResultFile,\n} from './utils.js';\n\n/**\n * Render flat trace summary line (fallback when full output messages not available).\n */\nfunction renderFlatTrace(result: RawResult): string {\n const trace = getTraceSummary(result);\n const parts: string[] = [];\n\n if (trace?.tool_calls && Object.keys(trace.tool_calls).length > 0) {\n const toolParts = Object.entries(trace.tool_calls).map(([name, count]) => {\n return count > 1 ? `${name} ×${count}` : name;\n });\n parts.push(`Tools: ${toolParts.join(', ')}`);\n }\n\n if (result.duration_ms !== undefined) {\n parts.push(`Duration: ${formatDuration(result.duration_ms)}`);\n }\n\n if (result.token_usage) {\n const total = result.token_usage.input + result.token_usage.output;\n parts.push(`Tokens: ${formatNumber(total)}`);\n }\n\n if (result.cost_usd !== undefined) {\n parts.push(`Cost: ${formatCost(result.cost_usd)}`);\n }\n\n if (trace?.llm_call_count !== undefined) {\n parts.push(`LLM calls: ${trace.llm_call_count}`);\n }\n\n return parts.join(' | ');\n}\n\n/**\n * Render per-evaluator scores inline.\n */\nfunction renderScores(scores: { name: string; score: number; type: string }[]): string {\n return scores\n .map((s) => {\n const scoreColor = s.score >= 0.9 ? c.green : s.score >= 0.5 ? c.yellow : c.red;\n return `${s.name} ${scoreColor}${formatScore(s.score)}${c.reset}`;\n })\n .join(' | ');\n}\n\n// Raw output message shape (snake_case from JSONL)\ninterface RawMessage {\n role?: string;\n content?: unknown;\n tool_calls?: RawToolCall[];\n start_time?: string;\n end_time?: string;\n duration_ms?: number;\n token_usage?: { input: number; output: number; cached?: number };\n}\n\ninterface RawToolCall {\n tool: string;\n input?: unknown;\n output?: unknown;\n start_time?: string;\n end_time?: string;\n duration_ms?: number;\n}\n\n/**\n * Render tree view from output messages.\n * Shows a hierarchical trace: LLM calls → tool calls.\n */\nfunction renderTree(result: RawResult): string {\n const messages = result.output as RawMessage[] | undefined;\n const spans = getTraceSpans(result);\n\n if (!messages || messages.length === 0) {\n if (spans.length > 0) {\n return renderSpanTree(result, spans);\n }\n // Fallback to flat summary\n if (\n getTraceSummary(result) ||\n result.duration_ms !== undefined ||\n result.cost_usd !== undefined\n ) {\n return renderFlatTrace(result);\n }\n return `${c.dim}No trace data available${c.reset}`;\n }\n\n const lines: string[] = [];\n const testId = result.test_id ?? result.eval_id ?? 'unknown';\n\n // Root node: test execution\n const totalDuration = result.duration_ms;\n const totalTokens = result.token_usage\n ? result.token_usage.input + result.token_usage.output\n : undefined;\n const rootParts: string[] = [testId];\n if (totalDuration !== undefined) rootParts.push(formatDuration(totalDuration));\n if (totalTokens !== undefined) rootParts.push(`${formatNumber(totalTokens)} tok`);\n if (result.cost_usd !== undefined) rootParts.push(formatCost(result.cost_usd));\n lines.push(`${c.bold}${rootParts.join(', ')}${c.reset}`);\n\n // Filter to meaningful messages (assistant with tool calls, or assistant responses)\n const steps: { type: 'llm' | 'tools'; msg: RawMessage; index: number }[] = [];\n for (let i = 0; i < messages.length; i++) {\n const msg = messages[i];\n if (msg.role === 'assistant') {\n if (msg.tool_calls && msg.tool_calls.length > 0) {\n steps.push({ type: 'tools', msg, index: i });\n } else {\n steps.push({ type: 'llm', msg, index: i });\n }\n }\n }\n\n for (let si = 0; si < steps.length; si++) {\n const step = steps[si];\n const isLast = si === steps.length - 1;\n const connector = isLast ? '└─' : '├─';\n const childPrefix = isLast ? ' ' : '│ ';\n\n if (step.type === 'llm') {\n // LLM response without tool calls\n const parts: string[] = [`${c.cyan}model${c.reset}`];\n if (step.msg.duration_ms !== undefined) parts.push(formatDuration(step.msg.duration_ms));\n if (step.msg.token_usage) {\n const tok = step.msg.token_usage.input + step.msg.token_usage.output;\n parts.push(`${formatNumber(tok)} tok`);\n }\n lines.push(`${connector} ${parts.join(', ')}`);\n } else {\n // Tool calls\n const toolCalls = step.msg.tool_calls ?? [];\n\n if (toolCalls.length === 1) {\n // Single tool call — inline\n const tc = toolCalls[0];\n const parts: string[] = [`${c.yellow}${tc.tool}${c.reset}`];\n if (tc.duration_ms !== undefined) parts.push(formatDuration(tc.duration_ms));\n lines.push(`${connector} ${parts.join(', ')}`);\n } else {\n // Multiple tool calls — expand\n const parts: string[] = [`${c.dim}tools${c.reset}`];\n if (step.msg.duration_ms !== undefined) parts.push(formatDuration(step.msg.duration_ms));\n lines.push(`${connector} ${parts.join(', ')}`);\n\n for (let ti = 0; ti < toolCalls.length; ti++) {\n const tc = toolCalls[ti];\n const isLastTool = ti === toolCalls.length - 1;\n const toolConnector = isLastTool ? '└─' : '├─';\n const tcParts: string[] = [`${c.yellow}${tc.tool}${c.reset}`];\n if (tc.duration_ms !== undefined) tcParts.push(formatDuration(tc.duration_ms));\n lines.push(`${childPrefix}${toolConnector} ${tcParts.join(', ')}`);\n }\n }\n }\n }\n\n // Scores line\n if (result.scores && result.scores.length > 0) {\n lines.push('');\n lines.push(`${c.dim}Scores:${c.reset} ${renderScores(result.scores)}`);\n }\n\n return lines.join('\\n');\n}\n\nfunction renderSpanTree(result: RawResult, spans: ReturnType<typeof getTraceSpans>): string {\n const lines: string[] = [];\n const testId = result.test_id ?? result.eval_id ?? 'unknown';\n const totalTokens = result.token_usage\n ? result.token_usage.input + result.token_usage.output\n : undefined;\n const rootParts: string[] = [testId];\n if (result.duration_ms !== undefined) rootParts.push(formatDuration(result.duration_ms));\n if (totalTokens !== undefined) rootParts.push(`${formatNumber(totalTokens)} tok`);\n if (result.cost_usd !== undefined) rootParts.push(formatCost(result.cost_usd));\n lines.push(`${c.bold}${rootParts.join(', ')}${c.reset}`);\n\n spans.forEach((span, index) => {\n const connector = index === spans.length - 1 ? '└─' : '├─';\n const color = span.type === 'llm' ? c.cyan : c.yellow;\n const parts = [`${color}${span.name}${c.reset}`];\n if (span.duration_ms !== undefined) {\n parts.push(formatDuration(span.duration_ms));\n }\n lines.push(`${connector} ${parts.join(', ')}`);\n });\n\n if (result.scores && result.scores.length > 0) {\n lines.push('');\n lines.push(`${c.dim}Scores:${c.reset} ${renderScores(result.scores)}`);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format a single result for table display.\n */\nfunction formatResultDetail(result: RawResult, index: number, tree: boolean): string {\n const lines: string[] = [];\n const testId = result.test_id ?? result.eval_id ?? `result-${index}`;\n\n if (tree) {\n // Tree view\n lines.push(renderTree(result));\n return lines.join('\\n');\n }\n\n // Standard flat view\n const scoreColor = result.score >= 0.9 ? c.green : result.score >= 0.5 ? c.yellow : c.red;\n lines.push(\n `${c.bold}${testId}${c.reset} ${scoreColor}${formatScore(result.score)}${c.reset}${result.target ? ` ${c.dim}target: ${result.target}${c.reset}` : ''}${result.dataset ? ` ${c.dim}dataset: ${result.dataset}${c.reset}` : ''}`,\n );\n\n if (result.error) {\n lines.push(` ${c.red}Error: ${result.error}${c.reset}`);\n }\n\n if (result.assertions && result.assertions.length > 0) {\n const passed = result.assertions.filter((a: { passed: boolean }) => a.passed);\n const failed = result.assertions.filter((a: { passed: boolean }) => !a.passed);\n if (passed.length > 0)\n lines.push(\n ` ${c.green}✓ Passed:${c.reset} ${passed.map((a: { text: string }) => a.text).join(', ')}`,\n );\n if (failed.length > 0)\n lines.push(\n ` ${c.red}✗ Failed:${c.reset} ${failed.map((a: { text: string }) => a.text).join(', ')}`,\n );\n }\n\n if (result.scores && result.scores.length > 0) {\n lines.push(` ${c.dim}Scores:${c.reset} ${renderScores(result.scores)}`);\n }\n\n if (result.trace || result.duration_ms !== undefined || result.cost_usd !== undefined) {\n lines.push(` ${c.dim}Trace:${c.reset} ${renderFlatTrace(result)}`);\n }\n\n if (result.assertions && result.assertions.length > 0) {\n const withEvidence = result.assertions.filter((a: { evidence?: string }) => a.evidence);\n if (withEvidence.length > 0) {\n const maxLen = 200;\n const evidence = (withEvidence[0] as { evidence: string }).evidence;\n const truncated = evidence.length > maxLen ? `${evidence.slice(0, maxLen)}...` : evidence;\n lines.push(` ${c.dim}Evidence: ${truncated}${c.reset}`);\n }\n }\n\n return lines.join('\\n');\n}\n\nfunction formatShowTable(\n results: RawResult[],\n filePath: string,\n testIdFilter?: string,\n tree?: boolean,\n): string {\n const lines: string[] = [];\n\n let filtered = results;\n if (testIdFilter) {\n filtered = results.filter((r) => (r.test_id ?? r.eval_id) === testIdFilter);\n if (filtered.length === 0) {\n lines.push(`${c.yellow}No results found with test ID \"${testIdFilter}\"${c.reset}`);\n lines.push('');\n lines.push(`${c.dim}Available test IDs:${c.reset}`);\n for (const r of results) {\n lines.push(` ${r.test_id ?? r.eval_id ?? '(unnamed)'}`);\n }\n return lines.join('\\n');\n }\n }\n\n lines.push('');\n lines.push(`${c.bold}Results:${c.reset} ${c.cyan}${filePath}${c.reset}`);\n\n const totalTests = filtered.length;\n const passCount = filtered.filter((r) => r.score >= 1.0).length;\n const failCount = totalTests - passCount;\n const avgScore = totalTests > 0 ? filtered.reduce((sum, r) => sum + r.score, 0) / totalTests : 0;\n\n lines.push(\n `${c.dim}${totalTests} test${totalTests !== 1 ? 's' : ''} | ${c.green}${passCount} passed${c.reset}${c.dim}${failCount > 0 ? ` | ${c.red}${failCount} failed${c.reset}${c.dim}` : ''} | avg score: ${formatScore(avgScore)}${c.reset}`,\n );\n lines.push('');\n\n for (let i = 0; i < filtered.length; i++) {\n lines.push(formatResultDetail(filtered[i], i, tree ?? false));\n if (i < filtered.length - 1) {\n lines.push(`${c.dim}${'─'.repeat(60)}${c.reset}`);\n }\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n\nexport const traceShowCommand = command({\n name: 'show',\n description: 'Show evaluation results with trace details from a result file',\n args: {\n file: positional({\n type: string,\n displayName: 'trace-source',\n description:\n 'Path to a run workspace, result manifest, simple trace JSONL, or OTLP JSON file',\n }),\n testId: option({\n type: optional(string),\n long: 'test-id',\n description: 'Filter to a specific test ID',\n }),\n tree: flag({\n long: 'tree',\n description: 'Show hierarchical trace tree from output messages or exported trace spans',\n }),\n format: option({\n type: optional(oneOf(['table', 'json'])),\n long: 'format',\n short: 'f',\n description: 'Output format: table (default) or json',\n }),\n },\n handler: async ({ file, testId, tree, format }) => {\n const outputFormat = format ?? 'table';\n\n try {\n const results = loadResultFile(file);\n\n let filtered = results;\n if (testId) {\n filtered = results.filter((r) => (r.test_id ?? r.eval_id) === testId);\n }\n\n if (outputFormat === 'json') {\n console.log(JSON.stringify(filtered, null, 2));\n } else {\n console.log(formatShowTable(results, file, testId, tree));\n }\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n },\n});\n","import { command, oneOf, option, optional, positional, string } from 'cmd-ts';\nimport { toSnakeCaseDeep } from '../../utils/case-conversion.js';\nimport {\n type RawResult,\n c,\n formatCost,\n formatNumber,\n getTraceSummary,\n loadResultFile,\n padLeft,\n padRight,\n} from './utils.js';\n\n/**\n * Compute percentiles from a sorted array of numbers.\n */\nexport function percentile(sorted: number[], p: number): number {\n if (sorted.length === 0) return 0;\n const index = (p / 100) * (sorted.length - 1);\n const lower = Math.floor(index);\n const upper = Math.ceil(index);\n if (lower === upper) return sorted[lower];\n return sorted[lower] + (sorted[upper] - sorted[lower]) * (index - lower);\n}\n\nfunction mean(values: number[]): number {\n if (values.length === 0) return 0;\n return values.reduce((sum, v) => sum + v, 0) / values.length;\n}\n\ninterface MetricRow {\n name: string;\n values: number[];\n formatter: (n: number) => string;\n}\n\nfunction collectMetrics(results: RawResult[]): MetricRow[] {\n const rows: MetricRow[] = [];\n\n // Score\n const scores = results.map((r) => r.score);\n if (scores.length > 0) {\n rows.push({ name: 'score', values: scores, formatter: (n) => n.toFixed(2) });\n }\n\n // Latency\n const latencies = results.map((r) => r.duration_ms).filter((v): v is number => v !== undefined);\n if (latencies.length > 0) {\n rows.push({\n name: 'latency_s',\n values: latencies.map((ms) => ms / 1000),\n formatter: (n) => n.toFixed(1),\n });\n }\n\n // Cost\n const costs = results.map((r) => r.cost_usd).filter((v): v is number => v !== undefined);\n if (costs.length > 0) {\n rows.push({ name: 'cost_usd', values: costs, formatter: (n) => formatCost(n) });\n }\n\n // Total tokens\n const tokens = results\n .map((r) => {\n if (!r.token_usage) return undefined;\n return r.token_usage.input + r.token_usage.output;\n })\n .filter((v): v is number => v !== undefined);\n if (tokens.length > 0) {\n rows.push({\n name: 'tokens_total',\n values: tokens,\n formatter: (n) => formatNumber(Math.round(n)),\n });\n }\n\n // Tool calls\n const toolCalls = results\n .map((r) => getTraceSummary(r)?.event_count)\n .filter((v): v is number => v !== undefined);\n if (toolCalls.length > 0) {\n rows.push({ name: 'tool_calls', values: toolCalls, formatter: (n) => String(Math.round(n)) });\n }\n\n // LLM calls\n const llmCalls = results\n .map((r) => getTraceSummary(r)?.llm_call_count)\n .filter((v): v is number => v !== undefined);\n if (llmCalls.length > 0) {\n rows.push({ name: 'llm_calls', values: llmCalls, formatter: (n) => String(Math.round(n)) });\n }\n\n return rows;\n}\n\ninterface GroupedResults {\n label: string;\n results: RawResult[];\n}\n\nfunction groupResults(results: RawResult[], groupBy?: string): GroupedResults[] {\n if (!groupBy) return [{ label: 'all', results }];\n\n const groups = new Map<string, RawResult[]>();\n\n for (const result of results) {\n let key: string;\n switch (groupBy) {\n case 'target':\n key = result.target ?? 'unknown';\n break;\n case 'dataset':\n key = result.dataset ?? 'unknown';\n break;\n case 'test-id':\n key = result.test_id ?? result.eval_id ?? 'unknown';\n break;\n default:\n key = 'all';\n }\n if (!groups.has(key)) groups.set(key, []);\n groups.get(key)?.push(result);\n }\n\n return [...groups.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([label, results]) => ({ label, results }));\n}\n\nfunction formatStatsTable(groups: GroupedResults[], filePath: string): string {\n const lines: string[] = [];\n\n lines.push('');\n lines.push(`${c.bold}Statistics:${c.reset} ${c.cyan}${filePath}${c.reset}`);\n\n for (const group of groups) {\n if (groups.length > 1 || group.label !== 'all') {\n lines.push('');\n lines.push(\n `${c.bold}Group: ${group.label}${c.reset} ${c.dim}(${group.results.length} tests)${c.reset}`,\n );\n } else {\n lines.push(`${c.dim}${group.results.length} tests${c.reset}`);\n }\n lines.push('');\n\n const metrics = collectMetrics(group.results);\n\n if (metrics.length === 0) {\n lines.push(`${c.yellow}No trace metrics available${c.reset}`);\n continue;\n }\n\n // Column headers\n const nameWidth = Math.max(12, ...metrics.map((m) => m.name.length));\n const colWidth = 10;\n\n const header = ` ${padRight('Metric', nameWidth)} ${padLeft('Mean', colWidth)} ${padLeft('P50', colWidth)} ${padLeft('P90', colWidth)} ${padLeft('P95', colWidth)} ${padLeft('P99', colWidth)}`;\n lines.push(`${c.dim}${header}${c.reset}`);\n lines.push(\n `${c.dim} ${'─'.repeat(nameWidth)} ${'─'.repeat(colWidth)} ${'─'.repeat(colWidth)} ${'─'.repeat(colWidth)} ${'─'.repeat(colWidth)} ${'─'.repeat(colWidth)}${c.reset}`,\n );\n\n for (const metric of metrics) {\n const sorted = [...metric.values].sort((a, b) => a - b);\n const row = ` ${padRight(metric.name, nameWidth)} ${padLeft(metric.formatter(mean(sorted)), colWidth)} ${padLeft(metric.formatter(percentile(sorted, 50)), colWidth)} ${padLeft(metric.formatter(percentile(sorted, 90)), colWidth)} ${padLeft(metric.formatter(percentile(sorted, 95)), colWidth)} ${padLeft(metric.formatter(percentile(sorted, 99)), colWidth)}`;\n lines.push(row);\n }\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n\ninterface StatsJson {\n file: string;\n groups: {\n label: string;\n count: number;\n metrics: Record<string, { mean: number; p50: number; p90: number; p95: number; p99: number }>;\n }[];\n}\n\nfunction computeStatsJson(groups: GroupedResults[], filePath: string): StatsJson {\n return {\n file: filePath,\n groups: groups.map((group) => {\n const metrics = collectMetrics(group.results);\n const metricsObj: Record<\n string,\n { mean: number; p50: number; p90: number; p95: number; p99: number }\n > = {};\n\n for (const metric of metrics) {\n const sorted = [...metric.values].sort((a, b) => a - b);\n metricsObj[metric.name] = {\n mean: Number(mean(sorted).toFixed(4)),\n p50: Number(percentile(sorted, 50).toFixed(4)),\n p90: Number(percentile(sorted, 90).toFixed(4)),\n p95: Number(percentile(sorted, 95).toFixed(4)),\n p99: Number(percentile(sorted, 99).toFixed(4)),\n };\n }\n\n return {\n label: group.label,\n count: group.results.length,\n metrics: metricsObj,\n };\n }),\n };\n}\n\nexport const traceStatsCommand = command({\n name: 'stats',\n description: 'Compute summary statistics (percentiles) across evaluation results',\n args: {\n file: positional({\n type: string,\n displayName: 'trace-source',\n description:\n 'Path to a run workspace, result manifest, simple trace JSONL, or OTLP JSON file',\n }),\n groupBy: option({\n type: optional(oneOf(['target', 'eval-set', 'test-id'])),\n long: 'group-by',\n short: 'g',\n description: 'Group statistics by: target, eval-set, or test-id',\n }),\n format: option({\n type: optional(oneOf(['table', 'json'])),\n long: 'format',\n short: 'f',\n description: 'Output format: table (default) or json',\n }),\n },\n handler: async ({ file, groupBy, format }) => {\n const outputFormat = format ?? 'table';\n\n try {\n const results = loadResultFile(file);\n\n if (results.length === 0) {\n console.error('Error: Result file is empty');\n process.exit(1);\n }\n\n const groups = groupResults(results, groupBy);\n\n if (outputFormat === 'json') {\n const statsJson = computeStatsJson(groups, file);\n console.log(JSON.stringify(toSnakeCaseDeep(statsJson), null, 2));\n } else {\n console.log(formatStatsTable(groups, file));\n }\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n },\n});\n","import { subcommands } from 'cmd-ts';\n\nimport { traceListCommand } from './list.js';\nimport { traceScoreCommand } from './score.js';\nimport { traceShowCommand } from './show.js';\nimport { traceStatsCommand } from './stats.js';\n\nexport const traceCommand = subcommands({\n name: 'trace',\n description: 'Inspect and analyze evaluation traces and results',\n cmds: {\n list: traceListCommand,\n score: traceScoreCommand,\n show: traceShowCommand,\n stats: traceStatsCommand,\n },\n});\n","import { writeFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { command, flag, option, optional, positional, string } from 'cmd-ts';\n\nimport { getOutputFilenames, transpileEvalYamlFile } from '@agentv/core';\n\nexport const transpileCommand = command({\n name: 'transpile',\n description: 'Convert an EVAL.yaml file to Agent Skills evals.json format',\n args: {\n input: positional({\n type: string,\n displayName: 'input',\n description: 'Path to EVAL.yaml file',\n }),\n outDir: option({\n type: optional(string),\n long: 'out-dir',\n short: 'd',\n description: 'Output directory (defaults to directory of input file)',\n }),\n stdout: flag({\n long: 'stdout',\n description: 'Write to stdout instead of file(s) (only valid for single-skill output)',\n }),\n },\n handler: async ({ input, outDir, stdout }) => {\n let result: ReturnType<typeof transpileEvalYamlFile>;\n try {\n result = transpileEvalYamlFile(path.resolve(input));\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n\n // Print warnings\n for (const warning of result.warnings) {\n console.warn(`Warning: ${warning}`);\n }\n\n if (result.files.size === 0) {\n console.error('Error: No output produced (no tests found)');\n process.exit(1);\n }\n\n if (stdout) {\n if (result.files.size > 1) {\n console.error(\n 'Error: --stdout is only valid when input produces a single evals.json (multi-skill input produces multiple files)',\n );\n process.exit(1);\n }\n const [file] = result.files.values();\n process.stdout.write(JSON.stringify(file, null, 2));\n process.stdout.write('\\n');\n return;\n }\n\n const outputDir = outDir ? path.resolve(outDir) : path.dirname(path.resolve(input));\n const fileNames = getOutputFilenames(result);\n\n for (const [skill, evalsJson] of result.files) {\n const fileName = fileNames.get(skill) ?? 'evals.json';\n const outputPath = path.join(outputDir, fileName);\n writeFileSync(outputPath, `${JSON.stringify(evalsJson, null, 2)}\\n`);\n console.log(`Transpiled to ${outputPath}`);\n }\n },\n});\n","import { readFileSync, writeFileSync } from 'node:fs';\nimport { toCamelCaseDeep, toSnakeCaseDeep, trimBaselineResult } from '@agentv/core';\nimport type { EvaluationResult } from '@agentv/core';\nimport { command, option, optional, positional, string } from 'cmd-ts';\n\n/**\n * Trims a JSONL file of EvaluationResults, stripping debug/audit fields\n * that are unnecessary for baseline comparisons.\n */\nexport const trimCommand = command({\n name: 'trim',\n description: 'Trim evaluation results for baseline storage (strips debug/audit fields)',\n args: {\n input: positional({\n type: string,\n displayName: 'input',\n description: 'Path to input JSONL result file',\n }),\n out: option({\n type: optional(string),\n long: 'out',\n short: 'o',\n description: 'Path to output JSONL file (defaults to stdout)',\n }),\n },\n handler: async ({ input, out }) => {\n try {\n const content = readFileSync(input, 'utf8');\n const lines = content\n .trim()\n .split('\\n')\n .filter((line) => line.trim());\n\n const trimmedLines = lines.map((line) => {\n const record = JSON.parse(line);\n // Records on disk are snake_case; convert to camelCase for trimming, then back\n const camel = toCamelCaseDeep(record) as EvaluationResult;\n const trimmed = trimBaselineResult(camel);\n const snake = toSnakeCaseDeep(trimmed);\n return JSON.stringify(snake);\n });\n\n const output = `${trimmedLines.join('\\n')}\\n`;\n\n if (out) {\n writeFileSync(out, output, 'utf8');\n console.error(`Trimmed ${lines.length} record(s) → ${out}`);\n } else {\n process.stdout.write(output);\n }\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n },\n});\n","import type {\n ValidationError,\n ValidationResult,\n ValidationSummary,\n} from '@agentv/core/evaluation/validation';\n\nconst ANSI_RED = '\\u001b[31m';\nconst ANSI_YELLOW = '\\u001b[33m';\nconst ANSI_GREEN = '\\u001b[32m';\nconst ANSI_CYAN = '\\u001b[36m';\nconst ANSI_BOLD = '\\u001b[1m';\nconst ANSI_RESET = '\\u001b[0m';\n\n/**\n * Format validation summary for console output.\n */\nexport function formatSummary(summary: ValidationSummary, useColors: boolean): string {\n const lines: string[] = [];\n\n // Header\n lines.push('');\n lines.push(formatHeader('Validation Summary', useColors));\n lines.push('');\n\n // Results for each file\n for (const result of summary.results) {\n lines.push(formatFileResult(result, useColors));\n }\n\n // Summary statistics\n lines.push('');\n lines.push(formatStats(summary, useColors));\n lines.push('');\n\n return lines.join('\\n');\n}\n\nfunction formatHeader(text: string, useColors: boolean): string {\n if (useColors) {\n return `${ANSI_BOLD}${ANSI_CYAN}${text}${ANSI_RESET}`;\n }\n return text;\n}\n\nfunction formatFileResult(result: ValidationResult, useColors: boolean): string {\n const lines: string[] = [];\n\n const status = result.valid ? '✓' : '✗';\n const statusColor = result.valid ? ANSI_GREEN : ANSI_RED;\n const statusText = useColors ? `${statusColor}${status}${ANSI_RESET}` : status;\n\n const fileName = result.filePath;\n lines.push(`${statusText} ${fileName}`);\n\n // Show errors and warnings\n if (result.errors.length > 0) {\n for (const error of result.errors) {\n lines.push(formatError(error, useColors));\n }\n }\n\n return lines.join('\\n');\n}\n\nfunction formatError(error: ValidationError, useColors: boolean): string {\n const prefix = error.severity === 'error' ? ' ✗' : ' ⚠';\n const color = error.severity === 'error' ? ANSI_RED : ANSI_YELLOW;\n const coloredPrefix = useColors ? `${color}${prefix}${ANSI_RESET}` : prefix;\n\n const location = error.location ? ` [${error.location}]` : '';\n return `${coloredPrefix}${location} ${error.message}`;\n}\n\nfunction formatStats(summary: ValidationSummary, useColors: boolean): string {\n const lines: string[] = [];\n\n const totalText = `Total files: ${summary.totalFiles}`;\n const validText = `Valid: ${summary.validFiles}`;\n const invalidText = `Invalid: ${summary.invalidFiles}`;\n\n // Count files with warnings\n const filesWithWarnings = summary.results.filter((r) =>\n r.errors.some((e) => e.severity === 'warning'),\n ).length;\n\n if (useColors) {\n lines.push(`${ANSI_BOLD}${totalText}${ANSI_RESET}`);\n lines.push(`${ANSI_GREEN}${validText}${ANSI_RESET}`);\n if (summary.invalidFiles > 0) {\n lines.push(`${ANSI_RED}${invalidText}${ANSI_RESET}`);\n } else {\n lines.push(invalidText);\n }\n if (filesWithWarnings > 0) {\n lines.push(`${ANSI_YELLOW}Files with warnings: ${filesWithWarnings}${ANSI_RESET}`);\n }\n } else {\n lines.push(totalText);\n lines.push(validText);\n lines.push(invalidText);\n if (filesWithWarnings > 0) {\n lines.push(`Files with warnings: ${filesWithWarnings}`);\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Check if stdout is a TTY (supports colors).\n */\nexport function isTTY(): boolean {\n return process.stdout.isTTY ?? false;\n}\n","import { constants } from 'node:fs';\nimport { access, readdir, stat } from 'node:fs/promises';\nimport path from 'node:path';\nimport {\n type ValidationResult,\n type ValidationSummary,\n detectFileType,\n validateConfigFile,\n validateEvalFile,\n validateFileReferences,\n validateTargetsFile,\n} from '@agentv/core/evaluation/validation';\nimport fg from 'fast-glob';\n\n/**\n * Validate YAML files for AgentV schema compliance.\n */\nexport async function validateFiles(paths: readonly string[]): Promise<ValidationSummary> {\n const filePaths = await expandPaths(paths);\n const results: ValidationResult[] = [];\n\n for (const filePath of filePaths) {\n const result = await validateSingleFile(filePath);\n results.push(result);\n }\n\n const validFiles = results.filter((r) => r.valid).length;\n const invalidFiles = results.filter((r) => !r.valid).length;\n\n return {\n totalFiles: results.length,\n validFiles,\n invalidFiles,\n results,\n };\n}\n\nasync function validateSingleFile(filePath: string): Promise<ValidationResult> {\n const absolutePath = path.resolve(filePath);\n\n // Detect file type (now infers from path if $schema is missing)\n const fileType = await detectFileType(absolutePath);\n\n // Validate based on file type\n let result: ValidationResult;\n\n if (fileType === 'eval') {\n result = await validateEvalFile(absolutePath);\n\n // Also validate file references for eval files\n if (result.valid || result.errors.filter((e) => e.severity === 'error').length === 0) {\n const fileRefErrors = await validateFileReferences(absolutePath);\n if (fileRefErrors.length > 0) {\n result = {\n ...result,\n errors: [...result.errors, ...fileRefErrors],\n valid: result.valid && fileRefErrors.filter((e) => e.severity === 'error').length === 0,\n };\n }\n }\n } else if (fileType === 'targets') {\n result = await validateTargetsFile(absolutePath);\n } else {\n result = await validateConfigFile(absolutePath);\n }\n\n return result;\n}\n\nasync function expandPaths(paths: readonly string[]): Promise<readonly string[]> {\n const expanded = new Set<string>();\n\n for (const inputPath of paths) {\n const absolutePath = path.resolve(inputPath);\n\n // Try as literal file or directory first\n try {\n await access(absolutePath, constants.F_OK);\n const stats = await stat(absolutePath);\n\n if (stats.isFile()) {\n if (isYamlFile(absolutePath)) expanded.add(absolutePath);\n continue;\n }\n if (stats.isDirectory()) {\n const yamlFiles = await findYamlFiles(absolutePath);\n for (const f of yamlFiles) expanded.add(f);\n continue;\n }\n } catch {\n // Not a literal path — fall through to glob matching\n }\n\n // Treat as glob pattern\n const globPattern = inputPath.includes('\\\\') ? inputPath.replace(/\\\\/g, '/') : inputPath;\n const matches = await fg(globPattern, {\n cwd: process.cwd(),\n absolute: true,\n onlyFiles: true,\n unique: true,\n dot: false,\n followSymbolicLinks: true,\n });\n\n const yamlMatches = matches.filter((f) => isYamlFile(f));\n if (yamlMatches.length === 0) {\n console.warn(`Warning: No YAML files matched pattern: ${inputPath}`);\n }\n for (const f of yamlMatches) expanded.add(path.normalize(f));\n }\n\n const sorted = Array.from(expanded);\n sorted.sort();\n return sorted;\n}\n\nasync function findYamlFiles(dirPath: string): Promise<readonly string[]> {\n const results: string[] = [];\n\n try {\n const entries = await readdir(dirPath, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dirPath, entry.name);\n\n if (entry.isDirectory()) {\n // Skip node_modules and hidden directories\n if (entry.name === 'node_modules' || entry.name.startsWith('.')) {\n continue;\n }\n const subFiles = await findYamlFiles(fullPath);\n results.push(...subFiles);\n } else if (entry.isFile() && isYamlFile(entry.name)) {\n results.push(fullPath);\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dirPath}: ${(error as Error).message}`);\n }\n\n return results;\n}\n\nfunction isYamlFile(filePath: string): boolean {\n const ext = path.extname(filePath).toLowerCase();\n return ext === '.yaml' || ext === '.yml';\n}\n","import { command, number, option, optional, restPositionals, string } from 'cmd-ts';\n\nimport { formatSummary, isTTY } from './format-output.js';\nimport { validateFiles } from './validate-files.js';\n\nasync function runValidateCommand(\n paths: readonly string[],\n maxWarnings: number | undefined,\n): Promise<void> {\n if (paths.length === 0) {\n console.error('Error: No paths specified. Usage: agentv validate <paths...>');\n process.exit(1);\n }\n\n const summary = await validateFiles(paths);\n\n // Output results\n const useColors = isTTY();\n console.log(formatSummary(summary, useColors));\n\n // Exit with appropriate code\n if (summary.invalidFiles > 0) {\n process.exit(1);\n }\n\n // Fail if warning count exceeds --max-warnings threshold\n if (maxWarnings !== undefined) {\n const warningCount = summary.results.reduce(\n (count, r) => count + r.errors.filter((e) => e.severity === 'warning').length,\n 0,\n );\n if (warningCount > maxWarnings) {\n console.error(\n `Found ${warningCount} warning${warningCount === 1 ? '' : 's'} (max allowed: ${maxWarnings})`,\n );\n process.exit(1);\n }\n }\n}\n\nexport const validateCommand = command({\n name: 'validate',\n description: 'Validate AgentV eval and targets YAML files',\n args: {\n paths: restPositionals({\n type: string,\n displayName: 'paths',\n description: 'Files or directories to validate',\n }),\n maxWarnings: option({\n type: optional(number),\n long: 'max-warnings',\n description: 'Maximum number of warnings allowed before failing (e.g., --max-warnings 0)',\n }),\n },\n handler: async ({ paths, maxWarnings }) => {\n try {\n await runValidateCommand(paths, maxWarnings);\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`);\n process.exit(1);\n }\n },\n});\n","import { existsSync } from 'node:fs';\nimport { readFile, readdir, rm } from 'node:fs/promises';\nimport path from 'node:path';\nimport { command, flag, option, optional, string } from 'cmd-ts';\n\nimport { getWorkspacePoolRoot } from '@agentv/core';\n\ninterface PoolMetadata {\n fingerprint: string;\n templatePath: string | null;\n repos: readonly { path: string; source: { type: string; url?: string; path?: string } }[];\n createdAt: string;\n}\n\nasync function confirm(message: string): Promise<boolean> {\n const readline = await import('node:readline');\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n const answer = await new Promise<string>((resolve) => {\n rl.question(`${message} [y/N] `, resolve);\n });\n rl.close();\n return answer.toLowerCase() === 'y';\n}\n\nexport const cleanCommand = command({\n name: 'clean',\n description: 'Remove workspace pool entries',\n args: {\n repo: option({\n type: optional(string),\n long: 'repo',\n description: 'Only remove pools containing this repo URL',\n }),\n force: flag({\n long: 'force',\n short: 'f',\n description: 'Skip confirmation prompt',\n }),\n },\n handler: async ({ repo, force }) => {\n const poolRoot = getWorkspacePoolRoot();\n\n if (!existsSync(poolRoot)) {\n console.log('No workspace pool entries found.');\n return;\n }\n\n if (repo) {\n // Remove only pool entries matching the repo URL\n const entries = await readdir(poolRoot, { withFileTypes: true });\n const poolDirs = entries.filter((e) => e.isDirectory());\n const matchingDirs: string[] = [];\n\n for (const dir of poolDirs) {\n const poolDir = path.join(poolRoot, dir.name);\n const metadataPath = path.join(poolDir, 'metadata.json');\n\n try {\n const raw = await readFile(metadataPath, 'utf-8');\n const metadata = JSON.parse(raw) as PoolMetadata;\n\n const hasRepo = metadata.repos?.some((r) => {\n if (r.source.type === 'git' && r.source.url) {\n return r.source.url.toLowerCase().includes(repo.toLowerCase());\n }\n return false;\n });\n\n if (hasRepo) {\n matchingDirs.push(poolDir);\n }\n } catch {\n // Skip entries without valid metadata\n }\n }\n\n if (matchingDirs.length === 0) {\n console.log(`No workspace pool entries found matching repo \"${repo}\".`);\n return;\n }\n\n if (!force) {\n const confirmed = await confirm(\n `Remove ${matchingDirs.length} pool entry(s) matching repo \"${repo}\"?`,\n );\n if (!confirmed) {\n console.log('Cancelled.');\n return;\n }\n }\n\n for (const dir of matchingDirs) {\n await rm(dir, { recursive: true, force: true });\n console.log(`Removed: ${path.basename(dir).slice(0, 12)}...`);\n }\n console.log('Done.');\n } else {\n // Remove entire pool root\n if (!force) {\n const confirmed = await confirm(`Remove all workspace pool entries from ${poolRoot}?`);\n if (!confirmed) {\n console.log('Cancelled.');\n return;\n }\n }\n\n await rm(poolRoot, { recursive: true, force: true });\n console.log('Workspace pool cleaned.');\n }\n },\n});\n","import { existsSync } from 'node:fs';\nimport { readFile, readdir, stat } from 'node:fs/promises';\nimport path from 'node:path';\nimport { command } from 'cmd-ts';\n\nimport { getWorkspacePoolRoot } from '@agentv/core';\n\ninterface PoolMetadata {\n fingerprint: string;\n templatePath: string | null;\n repos: readonly { path: string; source: { type: string; url?: string; path?: string } }[];\n createdAt: string;\n}\n\nasync function getDirectorySize(dirPath: string): Promise<number> {\n let totalSize = 0;\n try {\n const entries = await readdir(dirPath, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(dirPath, entry.name);\n if (entry.isDirectory()) {\n totalSize += await getDirectorySize(fullPath);\n } else {\n const stats = await stat(fullPath);\n totalSize += stats.size;\n }\n }\n } catch {\n // Directory might not be readable\n }\n return totalSize;\n}\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n}\n\nexport const listCommand = command({\n name: 'list',\n description: 'List workspace pool entries',\n args: {},\n handler: async () => {\n const poolRoot = getWorkspacePoolRoot();\n\n if (!existsSync(poolRoot)) {\n console.log('No workspace pool entries found.');\n return;\n }\n\n const entries = await readdir(poolRoot, { withFileTypes: true });\n const poolDirs = entries.filter((e) => e.isDirectory());\n\n if (poolDirs.length === 0) {\n console.log('No workspace pool entries found.');\n return;\n }\n\n for (const dir of poolDirs) {\n const poolDir = path.join(poolRoot, dir.name);\n const fingerprint = dir.name;\n\n // Count slots\n const poolEntries = await readdir(poolDir, { withFileTypes: true });\n const slots = poolEntries.filter((e) => e.isDirectory() && e.name.startsWith('slot-'));\n\n // Read metadata\n const metadataPath = path.join(poolDir, 'metadata.json');\n let metadata: PoolMetadata | null = null;\n try {\n const raw = await readFile(metadataPath, 'utf-8');\n metadata = JSON.parse(raw) as PoolMetadata;\n } catch {\n // metadata.json might not exist\n }\n\n // Compute disk size\n const size = await getDirectorySize(poolDir);\n\n console.log(` ${fingerprint.slice(0, 12)}...`);\n console.log(` Slots: ${slots.length}`);\n console.log(` Size: ${formatSize(size)}`);\n if (metadata) {\n if (metadata.templatePath) {\n console.log(` Template: ${metadata.templatePath}`);\n }\n if (metadata.repos && metadata.repos.length > 0) {\n const repoSources = metadata.repos.map((r) =>\n r.source.type === 'git' ? r.source.url : r.source.path,\n );\n console.log(` Repos: ${repoSources.join(', ')}`);\n }\n console.log(` Created: ${metadata.createdAt}`);\n }\n console.log();\n }\n },\n});\n","import { subcommands } from 'cmd-ts';\n\nimport { cleanCommand } from './clean.js';\nimport { listCommand } from './list.js';\n\nexport const workspaceCommand = subcommands({\n name: 'workspace',\n description: 'Manage workspace pool',\n cmds: {\n list: listCommand,\n clean: cleanCommand,\n },\n});\n","import { spawn } from 'node:child_process';\nimport { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { getAgentvHome } from '@agentv/core';\n\nconst CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours\nconst AGENTV_DIR = getAgentvHome();\nconst CACHE_FILE = 'version-check.json';\nconst NPM_REGISTRY_URL = 'https://registry.npmjs.org/agentv/latest';\n\nexport interface UpdateCache {\n latestVersion: string;\n lastCheckedAt: string; // ISO 8601\n}\n\n/**\n * Read the cached update info from disk. Returns null if missing or malformed.\n */\nexport async function getCachedUpdateInfo(path?: string): Promise<UpdateCache | null> {\n const filePath = path ?? join(AGENTV_DIR, CACHE_FILE);\n try {\n const raw = await readFile(filePath, 'utf-8');\n const data = JSON.parse(raw);\n if (typeof data.latestVersion === 'string' && typeof data.lastCheckedAt === 'string') {\n return data as UpdateCache;\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Decide whether a fresh check is needed based on the cache.\n */\nexport function shouldCheck(cache: UpdateCache | null): boolean {\n if (!cache) return true;\n const elapsed = Date.now() - new Date(cache.lastCheckedAt).getTime();\n return elapsed > CHECK_INTERVAL_MS;\n}\n\n/**\n * Compare two semver strings. Returns true if a > b.\n */\nfunction isNewer(a: string, b: string): boolean {\n const pa = a.split('.').map((s) => Number(s.replace(/-.*$/, '')));\n const pb = b.split('.').map((s) => Number(s.replace(/-.*$/, '')));\n for (let i = 0; i < 3; i++) {\n if ((pa[i] ?? 0) > (pb[i] ?? 0)) return true;\n if ((pa[i] ?? 0) < (pb[i] ?? 0)) return false;\n }\n return false;\n}\n\n/**\n * Build a human-readable update notice, or null if no update available.\n */\nexport function buildNotice(currentVersion: string, latestVersion: string | null): string | null {\n if (!latestVersion) return null;\n if (!isNewer(latestVersion, currentVersion)) return null;\n return ` Update available: ${currentVersion} → ${latestVersion}\\n Run \\`agentv self update\\` to upgrade.`;\n}\n\n/**\n * Fire-and-forget background check. Spawns a detached child process that\n * fetches latest version from npm and updates the cache file. The child\n * survives even if the parent calls process.exit().\n */\nexport function backgroundUpdateCheck(): void {\n const dir = AGENTV_DIR;\n const filePath = join(dir, CACHE_FILE);\n\n const script = `\n const https = require('https');\n const fs = require('fs');\n const dir = ${JSON.stringify(dir)};\n const filePath = ${JSON.stringify(filePath)};\n https.get(${JSON.stringify(NPM_REGISTRY_URL)}, { timeout: 5000 }, (res) => {\n if (res.statusCode !== 200) { res.resume(); process.exit(); }\n let body = '';\n res.on('data', (c) => body += c);\n res.on('end', () => {\n try {\n const v = JSON.parse(body).version;\n if (typeof v === 'string') {\n fs.mkdirSync(dir, { recursive: true });\n fs.writeFileSync(filePath, JSON.stringify({ latestVersion: v, lastCheckedAt: new Date().toISOString() }, null, 2));\n }\n } catch {}\n process.exit();\n });\n }).on('error', () => process.exit()).on('timeout', function() { this.destroy(); process.exit(); });\n `;\n\n try {\n const child = spawn(process.execPath, ['-e', script], {\n detached: true,\n stdio: 'ignore',\n windowsHide: true,\n });\n child.unref();\n } catch {}\n}\n\n/**\n * Get the update notice to display, or null. Kicks off a background\n * refresh if the cache is stale. Never blocks startup.\n */\nexport async function getUpdateNotice(currentVersion: string): Promise<string | null> {\n if (process.env.AGENTV_NO_UPDATE_CHECK === '1' || process.env.CI === 'true') {\n return null;\n }\n const cache = await getCachedUpdateInfo();\n if (shouldCheck(cache)) {\n backgroundUpdateCheck();\n }\n return buildNotice(currentVersion, cache?.latestVersion ?? null);\n}\n","import { binary, run, subcommands } from 'cmd-ts';\n\nimport packageJson from '../package.json' with { type: 'json' };\nimport { compareCommand } from './commands/compare/index.js';\nimport { convertCommand } from './commands/convert/index.js';\nimport { createCommand } from './commands/create/index.js';\nimport { evalCommand } from './commands/eval/index.js';\nimport { importCommand } from './commands/import/index.js';\nimport { initCmdTsCommand } from './commands/init/index.js';\nimport { pipelineCommand } from './commands/pipeline/index.js';\nimport { resultsCommand } from './commands/results/index.js';\nimport { resultsServeCommand } from './commands/results/serve.js';\nimport { selfCommand } from './commands/self/index.js';\nimport { traceCommand } from './commands/trace/index.js';\nimport { transpileCommand } from './commands/transpile/index.js';\nimport { trimCommand } from './commands/trim/index.js';\nimport { validateCommand } from './commands/validate/index.js';\nimport { workspaceCommand } from './commands/workspace/index.js';\nimport { getUpdateNotice } from './update-check.js';\n\nexport const app = subcommands({\n name: 'agentv',\n description: 'AgentV CLI',\n version: packageJson.version,\n cmds: {\n eval: evalCommand,\n import: importCommand,\n compare: compareCommand,\n convert: convertCommand,\n create: createCommand,\n init: initCmdTsCommand,\n pipeline: pipelineCommand,\n results: resultsCommand,\n self: selfCommand,\n serve: resultsServeCommand,\n studio: resultsServeCommand,\n trace: traceCommand,\n transpile: transpileCommand,\n trim: trimCommand,\n validate: validateCommand,\n workspace: workspaceCommand,\n },\n});\n\n/**\n * Known eval subcommand names — used to decide whether to inject the\n * implicit `run` subcommand for backward-compatible `agentv eval <paths>`.\n */\nconst EVAL_SUBCOMMANDS = new Set(['run', 'assert']);\n\n/**\n * Top-level CLI command names (excluding `eval` itself).\n * Used to ensure `eval` is the top-level subcommand, not nested.\n */\nconst TOP_LEVEL_COMMANDS = new Set([\n 'import',\n 'compare',\n 'convert',\n 'create',\n 'init',\n 'pipeline',\n 'results',\n 'self',\n 'serve',\n 'studio',\n 'trace',\n 'transpile',\n 'trim',\n 'validate',\n 'workspace',\n]);\n\n/**\n * Preprocess argv for convenience aliases:\n * - `--eval-id` → `--test-id`\n * - `agentv eval <non-subcommand>` → `agentv eval run <non-subcommand>`\n * (backward compat: `eval` used to be a direct command, now it's a group)\n */\nexport function preprocessArgv(argv: string[]): string[] {\n const result = [...argv];\n\n // Rewrite --eval-id → --test-id (convenience alias)\n for (let i = 0; i < result.length; i++) {\n if (result[i] === '--eval-id') {\n result[i] = '--test-id';\n } else if (result[i].startsWith('--eval-id=')) {\n result[i] = `--test-id=${result[i].slice('--eval-id='.length)}`;\n }\n }\n\n // Implicit `run` subcommand: `agentv eval <arg>` → `agentv eval run <arg>`\n // when the first arg after `eval` is not a known eval subcommand.\n // This preserves backward compatibility now that `eval` is a subcommands group.\n // Only applies when `eval` is the top-level subcommand.\n // Exception: `--help` / `-h` should show the eval group help, not run's help.\n const evalIdx = result.indexOf('eval');\n if (evalIdx !== -1) {\n // Ensure no top-level command appears before `eval` in the argv —\n // if one does, `eval` is a nested subcommand.\n const isTopLevel = !result.slice(0, evalIdx).some((arg) => TOP_LEVEL_COMMANDS.has(arg));\n if (isTopLevel) {\n const nextArg = result[evalIdx + 1];\n if (\n nextArg !== undefined &&\n !EVAL_SUBCOMMANDS.has(nextArg) &&\n nextArg !== '--help' &&\n nextArg !== '-h'\n ) {\n result.splice(evalIdx + 1, 0, 'run');\n }\n }\n }\n\n return result;\n}\n\nexport async function runCli(argv: string[] = process.argv): Promise<void> {\n // Kick off update check: reads from local cache (fast), spawns a detached\n // child to refresh if stale. The notice is printed on process exit so it\n // appears after command output, even if the command calls process.exit().\n let updateNotice: string | null = null;\n process.on('exit', () => {\n if (updateNotice) process.stderr.write(`\\n${updateNotice}\\n`);\n });\n getUpdateNotice(packageJson.version).then((n) => {\n updateNotice = n;\n });\n\n const processedArgv = preprocessArgv(argv);\n await run(binary(app), processedArgv);\n}\n"],"mappings":"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","names":["didYouMean","parse","env","debug","c","flag","os","tty","hasFlag","env","translateLevel","supportsColor","tty","supportsColor","useColors","c","debug","process","flag","string","styles","chalk","styles","string","option","boolean","env","_a","_a","_b","_c","positional","cmd","didYouMean","option","array","string","flatMap","flatMap","option","_a","env","option","option","number","createDebugger","string","positional","option","stripAnsi","outputPath","path","path","readFileSync","path","readFileSync","path","mkdir","writeFile","path","path","mkdir","writeFile","writeFileSync","path","readFileSync","path","entries","stat","path","writeFileSync","existsSync","writeFile","writeFile","existsSync","mean","mkdir","readFile","readdir","writeFile","join","readFile","join","writeFile","readdir","mkdir","readFile","mkdir","writeFile","join","join","mkdir","writeFile","readFile","existsSync","readFileSync","mkdir","readFile","readdir","writeFile","dirname","join","relative","resolve","extractInputText","resolve","join","existsSync","env","readFileSync","dirname","evalRunCommand","relative","mkdir","writeJson","writeFile","writeGraderConfigs","readFile","readdir","evalRunCommand","path","existsSync","readFileSync","readdirSync","statSync","path","colors","noColor","c","ansiPattern","stripAnsi","padRight","padLeft","path","readFileSync","entries","readdirSync","statSync","existsSync","path","existsSync","readFileSync","existsSync","readFileSync","existsSync","readFileSync","statSync","path","path","entries","existsSync","readFileSync","statSync","existsSync","readFileSync","readdirSync","statSync","writeFileSync","path","fileURLToPath","existsSync","mkdirSync","readFileSync","writeFileSync","path","stringifyYaml","path","existsSync","readFileSync","mkdirSync","writeFileSync","path","existsSync","readFileSync","err","writeFileSync","statSync","entries","readdirSync","c","app","fileURLToPath","resolve","c","padRight","padLeft","padRight","c","padLeft","err","c","groupBy","results","c","padRight","padLeft","writeFileSync","path","path","writeFileSync","readFileSync","writeFileSync","readFileSync","toSnakeCaseDeep","writeFileSync","formatSummary","readdir","path","fg","path","entries","readdir","formatSummary","existsSync","readFile","readdir","path","readline","resolve","existsSync","entries","readdir","path","readFile","existsSync","readFile","readdir","stat","path","entries","readdir","path","stat","formatSize","existsSync","readFile","spawn","readFile","join","path","join","readFile","spawn"]}
|