@wix/evalforge-evaluator 0.182.0 → 0.184.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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../node_modules/tslib/tslib.es6.mjs", "../../../node_modules/@wix/http-client/src/constants.ts", "../../../node_modules/@wix/headers/src/globals.ts", "../../../node_modules/@wix/headers/src/cookies.ts", "../../../node_modules/@wix/headers/src/headers/csrf.ts", "../../../node_modules/@wix/headers/src/headers/x-wix-brand.ts", "../../../node_modules/@wix/headers/src/headers/consent-policy.ts", "../../../node_modules/@wix/headers/src/headers/authorization.ts", "../../../node_modules/@wix/headers/src/utils.ts", "../../../node_modules/@wix/headers/src/headers/artifact-id.ts", "../../../node_modules/@wix/headers/src/headers/common-config.ts", "../../../node_modules/@babel/runtime/helpers/interopRequireDefault.js", "../../../node_modules/base-64/base64.js", "../../../node_modules/@wix/headers/src/headers/linguist.ts", "../../../node_modules/@wix/headers/src/domain.ts", "../../../node_modules/@wix/headers/src/errors.ts", "../../../node_modules/@wix/headers/src/assert.ts", "../../../node_modules/@wix/headers/src/index.ts", "../../../node_modules/@wix/http-client/src/env-util.ts", "../../../node_modules/@wix/http-client/src/utils.ts", "../../../node_modules/@wix/http-client/dist/src/whitelist.json", "../../../node_modules/@wix/http-client/src/headers.ts", "../../../node_modules/@wix/http-client/src/error.ts", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/bind.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/utils.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/enhanceError.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/createError.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/settle.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/isAbsoluteURL.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/combineURLs.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/buildFullPath.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/buildURL.js", "../../../node_modules/ms/index.js", "../../../node_modules/debug/src/common.js", "../../../node_modules/debug/src/browser.js", "../../../node_modules/supports-color/node_modules/has-flag/index.js", "../../../node_modules/supports-color/index.js", "../../../node_modules/debug/src/node.js", "../../../node_modules/debug/src/index.js", "../../../node_modules/follow-redirects/debug.js", "../../../node_modules/follow-redirects/index.js", "../../../node_modules/@wix/http-client/node_modules/axios/package.json", "../../../node_modules/@wix/http-client/node_modules/axios/lib/adapters/http.js", "../../../node_modules/agent-base/src/helpers.ts", "../../../node_modules/agent-base/src/index.ts", "../../../node_modules/http-proxy-agent/src/index.ts", "../../../node_modules/https-proxy-agent/src/parse-proxy-response.ts", "../../../node_modules/https-proxy-agent/src/index.ts", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/InterceptorManager.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/normalizeHeaderName.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/cookies.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/parseHeaders.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/isURLSameOrigin.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/adapters/xhr.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/defaults.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/transformData.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/cancel/isCancel.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/dispatchRequest.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/mergeConfig.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/validator.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/Axios.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/cancel/Cancel.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/cancel/CancelToken.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/spread.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/isAxiosError.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/axios.js", "../../../node_modules/@wix/http-client/node_modules/axios/index.js", "../../../node_modules/@wix/http-client/src/options.ts", "../../../node_modules/@wix/http-client/src/http-client.ts", "../../../node_modules/@wix/http-client/src/http-client-node.ts", "../../../node_modules/@wix/http-client/dist/src/types.js", "../../../node_modules/@wix/http-client/src/index-node.ts", "../src/index.ts", "../src/config.ts", "../src/api-client.ts", "../../../node_modules/@wix/metro-runtime/src/serialization/utils.ts", "../../../node_modules/@wix/metro-runtime/src/utils.ts", "../../../node_modules/@wix/metro-runtime/src/url-resolver.ts", "../../../node_modules/js-base64/base64.mjs", "../../../node_modules/@wix/metro-runtime/src/flatten-params.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/domain.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/serializer.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/protobuf-converters/timestamp.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/protobuf-converters/field-mask.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/protobuf-converters/bytes.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/protobuf-converters/duration.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/protobuf-converters/float.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/protobuf-converters/converters.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/utils.ts", "../../../node_modules/@wix/metro-runtime/src/ambassador-index.ts", "../../../node_modules/@wix/ambassador-evalforge-v1-test-scenario/http.impl.ts", "../../../node_modules/@wix/ambassador-evalforge-v1-eval-run/http.impl.ts", "../../../node_modules/@wix/ambassador-evalforge-v1-agent/http.impl.ts", "../../../node_modules/@wix/ambassador-evalforge-v1-project/http.impl.ts", "../../../node_modules/@wix/ambassador-evalforge-v1-preset/http.impl.ts", "../../../node_modules/@wix/ambassador-evalforge-v1-capability/http.impl.ts", "../src/ambassador-converters.ts", "../src/fetch-evaluation-data.ts", "../src/resolve-placeholders.ts", "../src/run-scenario/index.ts", "../src/run-scenario/environment.ts", "../src/run-scenario/utils/write-files.ts", "../src/run-scenario/install-dependencies.ts", "../src/run-scenario/run-agent-with-context.ts", "../src/run-scenario/agents/registry.ts", "../src/run-scenario/agents/claude-code/claude-code-adapter.ts", "../src/run-scenario/agents/claude-code/execute.ts", "../src/run-scenario/agents/claude-code/write-skills.ts", "../src/run-scenario/agents/timeout.ts", "../src/run-scenario/agents/claude-code/write-mcp.ts", "../src/run-scenario/agents/shared/resolve-mcp-placeholders.ts", "../src/run-scenario/agents/claude-code/write-sub-agents.ts", "../src/run-scenario/agents/claude-code/write-rules.ts", "../src/run-scenario/agents/claude-code/build-conversation.ts", "../src/run-scenario/agents/shared/trace-emit.ts", "../src/run-scenario/agents/claude-code/index.ts", "../src/run-scenario/agents/opencode/opencode-adapter.ts", "../src/run-scenario/agents/opencode/execute.ts", "../src/run-scenario/agents/opencode/types.ts", "../src/run-scenario/agents/opencode/write-skills.ts", "../src/run-scenario/agents/opencode/write-sub-agents.ts", "../src/run-scenario/agents/opencode/config.ts", "../src/run-scenario/agents/opencode/build-trace.ts", "../src/run-scenario/agents/opencode/build-conversation.ts", "../src/run-scenario/agents/opencode/index.ts", "../src/run-scenario/agents/simple-agent/execute.ts", "../src/run-scenario/agents/simple-agent/mcp-tools.ts", "../src/run-scenario/agents/shared/detect-tool-error.ts", "../src/run-scenario/agents/simple-agent/cost-calculation.ts", "../src/run-scenario/agents/simple-agent/build-conversation.ts", "../src/run-scenario/agents/simple-agent/simple-agent-adapter.ts", "../src/run-scenario/agents/simple-agent/index.ts", "../src/run-scenario/file-diff.ts", "../../../node_modules/diff/lib/index.mjs", "../src/substitute-variables.ts", "../src/evaluation-loop.ts", "../src/error-reporter.ts"],
4
- "sourcesContent": ["/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n", null, "export function maybeGetDocument() {\n if (typeof document === 'object') {\n return document;\n }\n\n return undefined;\n}\n\nexport function maybeGetGlobal(): any {\n if (typeof self === 'object') {\n return self;\n } else {\n return global;\n }\n}\n", "import { maybeGetDocument } from './globals';\n\nexport function readCookie(name: string): string {\n const cookieValue = getCookieByName(name);\n\n if (cookieValue) {\n return cookieValue.split('=')[1];\n }\n\n return '';\n}\n\nfunction loadCookies(): string[] {\n const documentObj = maybeGetDocument();\n\n if (documentObj && documentObj.cookie) {\n return decodeURIComponent(documentObj.cookie).split(';');\n }\n\n return [];\n}\n\nfunction getCookieByName(name: string): string {\n return loadCookies().filter(\n (cookie) => name === cookie.split('=')[0].trim(),\n )[0];\n}\n", "import { readCookie } from '../cookies';\n\nexport const XSRF_TOKEN_COOKIE_NAME = 'XSRF-TOKEN';\nexport const XSRF_HEADER_NAME = 'x-xsrf-token';\n\nexport function csrf() {\n const value = readCookie(XSRF_TOKEN_COOKIE_NAME);\n return { [XSRF_HEADER_NAME]: value };\n}\n", "import { maybeGetGlobal } from '../globals';\n\nconst X_WIX_BRAND_NAME = 'x-wix-brand';\n\nexport function xWixBrand() {\n const value = extractBrand();\n\n return { [X_WIX_BRAND_NAME]: value };\n}\n\nfunction extractBrand(): string {\n const globalObj = maybeGetGlobal();\n\n if (\n globalObj &&\n globalObj.commonConfig &&\n typeof globalObj.commonConfig.brand === 'string'\n ) {\n return globalObj.commonConfig.brand;\n }\n\n return '';\n}\n", "import { maybeGetGlobal } from '../globals';\n\nexport function consentPolicy() {\n return tryResolveNativeAPI() || tryResolveJsSDK() || none();\n}\n\nfunction tryResolveJsSDK() {\n const globalObj = maybeGetGlobal();\n\n if (\n globalObj &&\n globalObj.Wix &&\n globalObj.Wix.Utils &&\n typeof globalObj.Wix.Utils._getConsentPolicyHeader === 'function'\n ) {\n return globalObj.Wix.Utils._getConsentPolicyHeader();\n }\n\n return undefined;\n}\n\nfunction tryResolveNativeAPI() {\n const globalObj = maybeGetGlobal();\n\n if (\n globalObj &&\n globalObj.consentPolicyManager &&\n typeof globalObj.consentPolicyManager._getConsentPolicyHeader === 'function'\n ) {\n return globalObj.consentPolicyManager._getConsentPolicyHeader();\n }\n\n return undefined;\n}\n\nfunction none() {\n return {};\n}\n", "export function authorization(signedInstance?: string) {\n return { authorization: signedInstance };\n}\n", "export function isCI() {\n if (isNode()) {\n return !!process.env.TEAMCITY_VERSION || !!process.env.BUILDKITE;\n }\n\n return false;\n}\n\nexport function isNode() {\n // todo: need to add a browser test\n return typeof process !== 'undefined' && process.versions?.node != null;\n}\n", "import { isCI, isNode } from '../utils';\n\nexport function artifactId(override?: string) {\n const artifactIdToUse = isNode()\n ? process.env.ARTIFACT_ID ?? process.env.APP_NAME ?? ''\n : '';\n\n return {\n 'X-Wix-Client-Artifact-Id': override ?? (!isCI() ? artifactIdToUse : ''),\n };\n}\n", "import { maybeGetGlobal } from '../globals';\nimport { CommonConfigServer } from '../domain';\n\nconst IGNORE_KEYS = ['consentPolicy', 'consentPolicyHeader'];\nconst COMMON_CONFIG_NAME = 'commonConfig';\nconst MAP_KEYS = {\n bsi: 'BSI',\n};\n\nfunction extractCommonConfigValues(): CommonConfigServer | null {\n const globalObj = maybeGetGlobal();\n const commonConfigObj = globalObj?.commonConfig;\n\n if (!commonConfigObj) {\n return null;\n }\n\n const res: any = {};\n let addedKeys = false;\n Object.keys(commonConfigObj).forEach((key) => {\n // @ts-expect-error\n const newKey: string | undefined = MAP_KEYS[key];\n if (newKey) {\n res[newKey] = commonConfigObj[key];\n addedKeys = true;\n } else if (\n IGNORE_KEYS.indexOf(key) < 0 &&\n typeof commonConfigObj[key] !== 'function'\n ) {\n res[key] = commonConfigObj[key];\n addedKeys = true;\n }\n });\n\n return addedKeys ? (res as CommonConfigServer) : null;\n}\n\nexport const commonConfig = () => {\n const commonConfigValues = extractCommonConfigValues();\n const value = commonConfigValues ? JSON.stringify(commonConfigValues) : '';\n\n return { [COMMON_CONFIG_NAME]: encodeURIComponent(value) };\n};\n", "function _interopRequireDefault(e) {\n return e && e.__esModule ? e : {\n \"default\": e\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;", "/*! https://mths.be/base64 v1.0.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk\u2019s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters\u2026\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// \u2026convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '1.0.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n", "import base64 from 'base-64';\nimport { MultilingualOptions, Headers } from '../domain';\n\nconst LINGUIST_HEADER_KEY = 'x-wix-linguist';\n\nexport function linguistHeader({\n lang,\n locale,\n isPrimaryLanguage,\n signedInstance,\n}: MultilingualOptions & { signedInstance?: string }): Headers {\n // Validate all parameters exists in order to create the linguist header.\n if (isMultilingualOptionsAreValid({ lang, locale, isPrimaryLanguage })) {\n const instanceId = getInstanceIdFromSignedInstance(signedInstance);\n\n if (instanceId !== undefined) {\n return {\n [LINGUIST_HEADER_KEY]: [\n lang,\n locale,\n isPrimaryLanguage?.toString(),\n instanceId,\n ].join('|'),\n };\n }\n }\n\n return {};\n}\n\nfunction isMultilingualOptionsAreValid({\n lang,\n locale,\n isPrimaryLanguage,\n}: MultilingualOptions) {\n return (\n lang && locale && /^(true|false)$/.test(isPrimaryLanguage?.toString() || '')\n );\n}\n\nfunction getInstanceIdFromSignedInstance(signedInstance?: string) {\n try {\n const encodedInstance = signedInstance?.startsWith('wixcode')\n ? signedInstance?.split('.')[2]\n : signedInstance?.split('.')[1];\n\n if (encodedInstance) {\n return JSON.parse(base64.decode(encodedInstance)).instanceId;\n }\n } catch (e) {}\n}\n", "import type proto from '@wix/fed-infra-protos/dist/proto-generated';\n\nexport type CommonConfigServerProto = proto.wix.fedinfra.commons.CommonConfig;\n\nexport enum Brand {\n wix = 0,\n editorx = 1,\n dayful = 2,\n studio = 3,\n}\n\nexport interface CommonConfigServer\n extends Omit<CommonConfigServerProto, 'brand'> {\n brand?: 'wix' | 'editorx' | 'dayful' | 'studio';\n}\n\nexport interface CommonConfig extends Omit<CommonConfigServer, 'BSI'> {\n bsi?: string | null;\n}\n\nexport interface ConsentPolicyManager {\n _getConsentPolicyHeader(): Headers;\n}\n\nexport interface Wix {\n Utils: {\n _getConsentPolicyHeader(): Headers;\n };\n}\n\nexport type Headers = { [header: string]: string | undefined };\n\nexport type WixHeaders = {\n 'x-wix-brand'?: string;\n 'x-xsrf-token'?: string;\n authorization?: string;\n 'X-Wix-Client-Artifact-Id'?: string;\n commonConfig?: string;\n 'x-wix-linguist'?: string;\n};\n\nexport interface MultilingualOptions {\n lang?: string;\n locale?: string;\n isPrimaryLanguage?: string | boolean;\n}\n", "export class WixHeadersParsingError extends Error {\n constructor(header: string, value: any) {\n super(\n `WixHeadersParsingError: ${header} evaluated with ${JSON.stringify(\n value,\n )} but should be a string!`,\n );\n }\n}\n\nexport class WixHeadersValidationError extends Error {\n constructor(type: string, key: string, value: any) {\n super(\n `WixHeadersValidationError: expected ${key} to be ${type} but got ${JSON.stringify(\n value,\n )}`,\n );\n }\n}\n", "import { WixHeadersValidationError } from './errors';\n\nexport function assertBoolean(key: string, value: any) {\n if (typeof value !== 'boolean') {\n throw new WixHeadersValidationError('boolean', key, value);\n }\n}\n\nexport function assertString(key: string, value: any) {\n if (typeof value !== 'string') {\n throw new WixHeadersValidationError('string', key, value);\n }\n}\n", "import { csrf } from './headers/csrf';\nimport { xWixBrand } from './headers/x-wix-brand';\nimport { consentPolicy } from './headers/consent-policy';\nimport { authorization } from './headers/authorization';\nimport { artifactId } from './headers/artifact-id';\nimport { commonConfig } from './headers/common-config';\nimport { linguistHeader } from './headers/linguist';\nimport { MultilingualOptions, WixHeaders, Headers } from './domain';\nimport { assertBoolean, assertString } from './assert';\n\nexport { MultilingualOptions };\n\nexport type WixHeadersOpts = {\n csrf?: boolean;\n signedInstance?: string;\n artifactId?: string;\n multilingualOptions?: MultilingualOptions;\n};\n\nexport function createHeaders(opts: WixHeadersOpts = {}): WixHeaders {\n opts = { csrf: true, signedInstance: '', ...opts };\n\n verifyOptsOrThrow(opts);\n\n const headers: Headers[] = [\n xWixBrand(),\n consentPolicy(),\n authorization(opts.signedInstance),\n artifactId(opts.artifactId),\n commonConfig(),\n linguistHeader({\n signedInstance: opts.signedInstance,\n ...opts.multilingualOptions,\n }),\n ];\n\n if (opts.csrf) {\n headers.push(csrf());\n }\n\n return headers\n .filter((hdrs) => Object.values(hdrs).every((v) => v))\n .reduce(\n (result, hdrs) => ({\n ...result,\n ...hdrs,\n }),\n {} as WixHeaders,\n );\n}\n\nfunction verifyOptsOrThrow(opts: WixHeadersOpts) {\n assertBoolean('opts.csrf', opts.csrf);\n assertString('opts.signedInstance', opts.signedInstance);\n}\n", null, null, "[\n \"wix.com\",\n \"editorx.com\",\n \"wix-code.com\",\n \"wixapps.net\",\n \"wixprod.net\"\n]\n", null, null, "'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n", "'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n", "'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n", "'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n", "'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n", "'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n", "'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n", "'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n", "'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\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';\nmodule.exports = (flag, argv) => {\n\targv = argv || process.argv;\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst pos = argv.indexOf(prefix + flag);\n\tconst terminatorPos = argv.indexOf('--');\n\treturn pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);\n};\n", "'use strict';\nconst os = require('os');\nconst hasFlag = require('has-flag');\n\nconst env = process.env;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false')) {\n\tforceColor = false;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = true;\n}\nif ('FORCE_COLOR' in env) {\n\tforceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0;\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(stream) {\n\tif (forceColor === false) {\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 (stream && !stream.isTTY && forceColor !== true) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor ? 1 : 0;\n\n\tif (process.platform === 'win32') {\n\t\t// Node.js 7.5.0 is the first version of Node.js to include a patch to\n\t\t// libuv that enables 256 color output on Windows. Anything earlier and it\n\t\t// won't work. However, here we target Node.js 8 at minimum as it is an LTS\n\t\t// release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows\n\t\t// release that supports 256 colors. Windows 10 build 14931 is the first release\n\t\t// that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(process.versions.node.split('.')[0]) >= 8 &&\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'].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\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: getSupportLevel(process.stdout),\n\tstderr: getSupportLevel(process.stderr)\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", "var debug;\n\nmodule.exports = function () {\n if (!debug) {\n try {\n /* eslint global-require: off */\n debug = require(\"debug\")(\"follow-redirects\");\n }\n catch (error) { /* */ }\n if (typeof debug !== \"function\") {\n debug = function () { /* */ };\n }\n }\n debug.apply(null, arguments);\n};\n", "var url = require(\"url\");\nvar URL = url.URL;\nvar http = require(\"http\");\nvar https = require(\"https\");\nvar Writable = require(\"stream\").Writable;\nvar assert = require(\"assert\");\nvar debug = require(\"./debug\");\n\n// Preventive platform detection\n// istanbul ignore next\n(function detectUnsupportedEnvironment() {\n var looksLikeNode = typeof process !== \"undefined\";\n var looksLikeBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n var looksLikeV8 = isFunction(Error.captureStackTrace);\n if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) {\n console.warn(\"The follow-redirects package should be excluded from browser builds.\");\n }\n}());\n\n// Whether to use the native URL object or the legacy url module\nvar useNativeURL = false;\ntry {\n assert(new URL(\"\"));\n}\ncatch (error) {\n useNativeURL = error.code === \"ERR_INVALID_URL\";\n}\n\n// URL fields to preserve in copy operations\nvar preservedUrlFields = [\n \"auth\",\n \"host\",\n \"hostname\",\n \"href\",\n \"path\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"query\",\n \"search\",\n \"hash\",\n];\n\n// Create handlers that pass events from native requests\nvar events = [\"abort\", \"aborted\", \"connect\", \"error\", \"socket\", \"timeout\"];\nvar eventHandlers = Object.create(null);\nevents.forEach(function (event) {\n eventHandlers[event] = function (arg1, arg2, arg3) {\n this._redirectable.emit(event, arg1, arg2, arg3);\n };\n});\n\n// Error types with codes\nvar InvalidUrlError = createErrorType(\n \"ERR_INVALID_URL\",\n \"Invalid URL\",\n TypeError\n);\nvar RedirectionError = createErrorType(\n \"ERR_FR_REDIRECTION_FAILURE\",\n \"Redirected request failed\"\n);\nvar TooManyRedirectsError = createErrorType(\n \"ERR_FR_TOO_MANY_REDIRECTS\",\n \"Maximum number of redirects exceeded\",\n RedirectionError\n);\nvar MaxBodyLengthExceededError = createErrorType(\n \"ERR_FR_MAX_BODY_LENGTH_EXCEEDED\",\n \"Request body larger than maxBodyLength limit\"\n);\nvar WriteAfterEndError = createErrorType(\n \"ERR_STREAM_WRITE_AFTER_END\",\n \"write after end\"\n);\n\n// istanbul ignore next\nvar destroy = Writable.prototype.destroy || noop;\n\n// An HTTP(S) request that can be redirected\nfunction RedirectableRequest(options, responseCallback) {\n // Initialize the request\n Writable.call(this);\n this._sanitizeOptions(options);\n this._options = options;\n this._ended = false;\n this._ending = false;\n this._redirectCount = 0;\n this._redirects = [];\n this._requestBodyLength = 0;\n this._requestBodyBuffers = [];\n\n // Attach a callback if passed\n if (responseCallback) {\n this.on(\"response\", responseCallback);\n }\n\n // React to responses of native requests\n var self = this;\n this._onNativeResponse = function (response) {\n try {\n self._processResponse(response);\n }\n catch (cause) {\n self.emit(\"error\", cause instanceof RedirectionError ?\n cause : new RedirectionError({ cause: cause }));\n }\n };\n\n // Perform the first request\n this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\nRedirectableRequest.prototype.abort = function () {\n destroyRequest(this._currentRequest);\n this._currentRequest.abort();\n this.emit(\"abort\");\n};\n\nRedirectableRequest.prototype.destroy = function (error) {\n destroyRequest(this._currentRequest, error);\n destroy.call(this, error);\n return this;\n};\n\n// Writes buffered data to the current native request\nRedirectableRequest.prototype.write = function (data, encoding, callback) {\n // Writing is not allowed if end has been called\n if (this._ending) {\n throw new WriteAfterEndError();\n }\n\n // Validate input and shift parameters if necessary\n if (!isString(data) && !isBuffer(data)) {\n throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n }\n if (isFunction(encoding)) {\n callback = encoding;\n encoding = null;\n }\n\n // Ignore empty buffers, since writing them doesn't invoke the callback\n // https://github.com/nodejs/node/issues/22066\n if (data.length === 0) {\n if (callback) {\n callback();\n }\n return;\n }\n // Only write when we don't exceed the maximum body length\n if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n this._requestBodyLength += data.length;\n this._requestBodyBuffers.push({ data: data, encoding: encoding });\n this._currentRequest.write(data, encoding, callback);\n }\n // Error when we exceed the maximum body length\n else {\n this.emit(\"error\", new MaxBodyLengthExceededError());\n this.abort();\n }\n};\n\n// Ends the current native request\nRedirectableRequest.prototype.end = function (data, encoding, callback) {\n // Shift parameters if necessary\n if (isFunction(data)) {\n callback = data;\n data = encoding = null;\n }\n else if (isFunction(encoding)) {\n callback = encoding;\n encoding = null;\n }\n\n // Write data if needed and end\n if (!data) {\n this._ended = this._ending = true;\n this._currentRequest.end(null, null, callback);\n }\n else {\n var self = this;\n var currentRequest = this._currentRequest;\n this.write(data, encoding, function () {\n self._ended = true;\n currentRequest.end(null, null, callback);\n });\n this._ending = true;\n }\n};\n\n// Sets a header value on the current native request\nRedirectableRequest.prototype.setHeader = function (name, value) {\n this._options.headers[name] = value;\n this._currentRequest.setHeader(name, value);\n};\n\n// Clears a header value on the current native request\nRedirectableRequest.prototype.removeHeader = function (name) {\n delete this._options.headers[name];\n this._currentRequest.removeHeader(name);\n};\n\n// Global timeout for all underlying requests\nRedirectableRequest.prototype.setTimeout = function (msecs, callback) {\n var self = this;\n\n // Destroys the socket on timeout\n function destroyOnTimeout(socket) {\n socket.setTimeout(msecs);\n socket.removeListener(\"timeout\", socket.destroy);\n socket.addListener(\"timeout\", socket.destroy);\n }\n\n // Sets up a timer to trigger a timeout event\n function startTimer(socket) {\n if (self._timeout) {\n clearTimeout(self._timeout);\n }\n self._timeout = setTimeout(function () {\n self.emit(\"timeout\");\n clearTimer();\n }, msecs);\n destroyOnTimeout(socket);\n }\n\n // Stops a timeout from triggering\n function clearTimer() {\n // Clear the timeout\n if (self._timeout) {\n clearTimeout(self._timeout);\n self._timeout = null;\n }\n\n // Clean up all attached listeners\n self.removeListener(\"abort\", clearTimer);\n self.removeListener(\"error\", clearTimer);\n self.removeListener(\"response\", clearTimer);\n self.removeListener(\"close\", clearTimer);\n if (callback) {\n self.removeListener(\"timeout\", callback);\n }\n if (!self.socket) {\n self._currentRequest.removeListener(\"socket\", startTimer);\n }\n }\n\n // Attach callback if passed\n if (callback) {\n this.on(\"timeout\", callback);\n }\n\n // Start the timer if or when the socket is opened\n if (this.socket) {\n startTimer(this.socket);\n }\n else {\n this._currentRequest.once(\"socket\", startTimer);\n }\n\n // Clean up on events\n this.on(\"socket\", destroyOnTimeout);\n this.on(\"abort\", clearTimer);\n this.on(\"error\", clearTimer);\n this.on(\"response\", clearTimer);\n this.on(\"close\", clearTimer);\n\n return this;\n};\n\n// Proxy all other public ClientRequest methods\n[\n \"flushHeaders\", \"getHeader\",\n \"setNoDelay\", \"setSocketKeepAlive\",\n].forEach(function (method) {\n RedirectableRequest.prototype[method] = function (a, b) {\n return this._currentRequest[method](a, b);\n };\n});\n\n// Proxy all public ClientRequest properties\n[\"aborted\", \"connection\", \"socket\"].forEach(function (property) {\n Object.defineProperty(RedirectableRequest.prototype, property, {\n get: function () { return this._currentRequest[property]; },\n });\n});\n\nRedirectableRequest.prototype._sanitizeOptions = function (options) {\n // Ensure headers are always present\n if (!options.headers) {\n options.headers = {};\n }\n\n // Since http.request treats host as an alias of hostname,\n // but the url module interprets host as hostname plus port,\n // eliminate the host property to avoid confusion.\n if (options.host) {\n // Use hostname if set, because it has precedence\n if (!options.hostname) {\n options.hostname = options.host;\n }\n delete options.host;\n }\n\n // Complete the URL object when necessary\n if (!options.pathname && options.path) {\n var searchPos = options.path.indexOf(\"?\");\n if (searchPos < 0) {\n options.pathname = options.path;\n }\n else {\n options.pathname = options.path.substring(0, searchPos);\n options.search = options.path.substring(searchPos);\n }\n }\n};\n\n\n// Executes the next native request (initial or redirect)\nRedirectableRequest.prototype._performRequest = function () {\n // Load the native protocol\n var protocol = this._options.protocol;\n var nativeProtocol = this._options.nativeProtocols[protocol];\n if (!nativeProtocol) {\n throw new TypeError(\"Unsupported protocol \" + protocol);\n }\n\n // If specified, use the agent corresponding to the protocol\n // (HTTP and HTTPS use different types of agents)\n if (this._options.agents) {\n var scheme = protocol.slice(0, -1);\n this._options.agent = this._options.agents[scheme];\n }\n\n // Create the native request and set up its event handlers\n var request = this._currentRequest =\n nativeProtocol.request(this._options, this._onNativeResponse);\n request._redirectable = this;\n for (var event of events) {\n request.on(event, eventHandlers[event]);\n }\n\n // RFC7230\u00A75.3.1: When making a request directly to an origin server, [\u2026]\n // a client MUST send only the absolute path [\u2026] as the request-target.\n this._currentUrl = /^\\//.test(this._options.path) ?\n url.format(this._options) :\n // When making a request to a proxy, [\u2026]\n // a client MUST send the target URI in absolute-form [\u2026].\n this._options.path;\n\n // End a redirected request\n // (The first request must be ended explicitly with RedirectableRequest#end)\n if (this._isRedirect) {\n // Write the request entity and end\n var i = 0;\n var self = this;\n var buffers = this._requestBodyBuffers;\n (function writeNext(error) {\n // Only write if this request has not been redirected yet\n // istanbul ignore else\n if (request === self._currentRequest) {\n // Report any write errors\n // istanbul ignore if\n if (error) {\n self.emit(\"error\", error);\n }\n // Write the next buffer if there are still left\n else if (i < buffers.length) {\n var buffer = buffers[i++];\n // istanbul ignore else\n if (!request.finished) {\n request.write(buffer.data, buffer.encoding, writeNext);\n }\n }\n // End the request if `end` has been called on us\n else if (self._ended) {\n request.end();\n }\n }\n }());\n }\n};\n\n// Processes a response from the current native request\nRedirectableRequest.prototype._processResponse = function (response) {\n // Store the redirected response\n var statusCode = response.statusCode;\n if (this._options.trackRedirects) {\n this._redirects.push({\n url: this._currentUrl,\n headers: response.headers,\n statusCode: statusCode,\n });\n }\n\n // RFC7231\u00A76.4: The 3xx (Redirection) class of status code indicates\n // that further action needs to be taken by the user agent in order to\n // fulfill the request. If a Location header field is provided,\n // the user agent MAY automatically redirect its request to the URI\n // referenced by the Location field value,\n // even if the specific status code is not understood.\n\n // If the response is not a redirect; return it as-is\n var location = response.headers.location;\n if (!location || this._options.followRedirects === false ||\n statusCode < 300 || statusCode >= 400) {\n response.responseUrl = this._currentUrl;\n response.redirects = this._redirects;\n this.emit(\"response\", response);\n\n // Clean up\n this._requestBodyBuffers = [];\n return;\n }\n\n // The response is a redirect, so abort the current request\n destroyRequest(this._currentRequest);\n // Discard the remainder of the response to avoid waiting for data\n response.destroy();\n\n // RFC7231\u00A76.4: A client SHOULD detect and intervene\n // in cyclical redirections (i.e., \"infinite\" redirection loops).\n if (++this._redirectCount > this._options.maxRedirects) {\n throw new TooManyRedirectsError();\n }\n\n // Store the request headers if applicable\n var requestHeaders;\n var beforeRedirect = this._options.beforeRedirect;\n if (beforeRedirect) {\n requestHeaders = Object.assign({\n // The Host header was set by nativeProtocol.request\n Host: response.req.getHeader(\"host\"),\n }, this._options.headers);\n }\n\n // RFC7231\u00A76.4: Automatic redirection needs to done with\n // care for methods not known to be safe, [\u2026]\n // RFC7231\u00A76.4.2\u20133: For historical reasons, a user agent MAY change\n // the request method from POST to GET for the subsequent request.\n var method = this._options.method;\n if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" ||\n // RFC7231\u00A76.4.4: The 303 (See Other) status code indicates that\n // the server is redirecting the user agent to a different resource [\u2026]\n // A user agent can perform a retrieval request targeting that URI\n // (a GET or HEAD request if using HTTP) [\u2026]\n (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {\n this._options.method = \"GET\";\n // Drop a possible entity and headers related to it\n this._requestBodyBuffers = [];\n removeMatchingHeaders(/^content-/i, this._options.headers);\n }\n\n // Drop the Host header, as the redirect might lead to a different host\n var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);\n\n // If the redirect is relative, carry over the host of the last request\n var currentUrlParts = parseUrl(this._currentUrl);\n var currentHost = currentHostHeader || currentUrlParts.host;\n var currentUrl = /^\\w+:/.test(location) ? this._currentUrl :\n url.format(Object.assign(currentUrlParts, { host: currentHost }));\n\n // Create the redirected request\n var redirectUrl = resolveUrl(location, currentUrl);\n debug(\"redirecting to\", redirectUrl.href);\n this._isRedirect = true;\n spreadUrlObject(redirectUrl, this._options);\n\n // Drop confidential headers when redirecting to a less secure protocol\n // or to a different domain that is not a superdomain\n if (redirectUrl.protocol !== currentUrlParts.protocol &&\n redirectUrl.protocol !== \"https:\" ||\n redirectUrl.host !== currentHost &&\n !isSubdomain(redirectUrl.host, currentHost)) {\n removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers);\n }\n\n // Evaluate the beforeRedirect callback\n if (isFunction(beforeRedirect)) {\n var responseDetails = {\n headers: response.headers,\n statusCode: statusCode,\n };\n var requestDetails = {\n url: currentUrl,\n method: method,\n headers: requestHeaders,\n };\n beforeRedirect(this._options, responseDetails, requestDetails);\n this._sanitizeOptions(this._options);\n }\n\n // Perform the redirected request\n this._performRequest();\n};\n\n// Wraps the key/value object of protocols with redirect functionality\nfunction wrap(protocols) {\n // Default settings\n var exports = {\n maxRedirects: 21,\n maxBodyLength: 10 * 1024 * 1024,\n };\n\n // Wrap each protocol\n var nativeProtocols = {};\n Object.keys(protocols).forEach(function (scheme) {\n var protocol = scheme + \":\";\n var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);\n\n // Executes a request, following redirects\n function request(input, options, callback) {\n // Parse parameters, ensuring that input is an object\n if (isURL(input)) {\n input = spreadUrlObject(input);\n }\n else if (isString(input)) {\n input = spreadUrlObject(parseUrl(input));\n }\n else {\n callback = options;\n options = validateUrl(input);\n input = { protocol: protocol };\n }\n if (isFunction(options)) {\n callback = options;\n options = null;\n }\n\n // Set defaults\n options = Object.assign({\n maxRedirects: exports.maxRedirects,\n maxBodyLength: exports.maxBodyLength,\n }, input, options);\n options.nativeProtocols = nativeProtocols;\n if (!isString(options.host) && !isString(options.hostname)) {\n options.hostname = \"::1\";\n }\n\n assert.equal(options.protocol, protocol, \"protocol mismatch\");\n debug(\"options\", options);\n return new RedirectableRequest(options, callback);\n }\n\n // Executes a GET request, following redirects\n function get(input, options, callback) {\n var wrappedRequest = wrappedProtocol.request(input, options, callback);\n wrappedRequest.end();\n return wrappedRequest;\n }\n\n // Expose the properties on the wrapped protocol\n Object.defineProperties(wrappedProtocol, {\n request: { value: request, configurable: true, enumerable: true, writable: true },\n get: { value: get, configurable: true, enumerable: true, writable: true },\n });\n });\n return exports;\n}\n\nfunction noop() { /* empty */ }\n\nfunction parseUrl(input) {\n var parsed;\n // istanbul ignore else\n if (useNativeURL) {\n parsed = new URL(input);\n }\n else {\n // Ensure the URL is valid and absolute\n parsed = validateUrl(url.parse(input));\n if (!isString(parsed.protocol)) {\n throw new InvalidUrlError({ input });\n }\n }\n return parsed;\n}\n\nfunction resolveUrl(relative, base) {\n // istanbul ignore next\n return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative));\n}\n\nfunction validateUrl(input) {\n if (/^\\[/.test(input.hostname) && !/^\\[[:0-9a-f]+\\]$/i.test(input.hostname)) {\n throw new InvalidUrlError({ input: input.href || input });\n }\n if (/^\\[/.test(input.host) && !/^\\[[:0-9a-f]+\\](:\\d+)?$/i.test(input.host)) {\n throw new InvalidUrlError({ input: input.href || input });\n }\n return input;\n}\n\nfunction spreadUrlObject(urlObject, target) {\n var spread = target || {};\n for (var key of preservedUrlFields) {\n spread[key] = urlObject[key];\n }\n\n // Fix IPv6 hostname\n if (spread.hostname.startsWith(\"[\")) {\n spread.hostname = spread.hostname.slice(1, -1);\n }\n // Ensure port is a number\n if (spread.port !== \"\") {\n spread.port = Number(spread.port);\n }\n // Concatenate path\n spread.path = spread.search ? spread.pathname + spread.search : spread.pathname;\n\n return spread;\n}\n\nfunction removeMatchingHeaders(regex, headers) {\n var lastValue;\n for (var header in headers) {\n if (regex.test(header)) {\n lastValue = headers[header];\n delete headers[header];\n }\n }\n return (lastValue === null || typeof lastValue === \"undefined\") ?\n undefined : String(lastValue).trim();\n}\n\nfunction createErrorType(code, message, baseClass) {\n // Create constructor\n function CustomError(properties) {\n // istanbul ignore else\n if (isFunction(Error.captureStackTrace)) {\n Error.captureStackTrace(this, this.constructor);\n }\n Object.assign(this, properties || {});\n this.code = code;\n this.message = this.cause ? message + \": \" + this.cause.message : message;\n }\n\n // Attach constructor and set default properties\n CustomError.prototype = new (baseClass || Error)();\n Object.defineProperties(CustomError.prototype, {\n constructor: {\n value: CustomError,\n enumerable: false,\n },\n name: {\n value: \"Error [\" + code + \"]\",\n enumerable: false,\n },\n });\n return CustomError;\n}\n\nfunction destroyRequest(request, error) {\n for (var event of events) {\n request.removeListener(event, eventHandlers[event]);\n }\n request.on(\"error\", noop);\n request.destroy(error);\n}\n\nfunction isSubdomain(subdomain, domain) {\n assert(isString(subdomain) && isString(domain));\n var dot = subdomain.length - domain.length - 1;\n return dot > 0 && subdomain[dot] === \".\" && subdomain.endsWith(domain);\n}\n\nfunction isString(value) {\n return typeof value === \"string\" || value instanceof String;\n}\n\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\nfunction isBuffer(value) {\n return typeof value === \"object\" && (\"length\" in value);\n}\n\nfunction isURL(value) {\n return URL && value instanceof URL;\n}\n\n// Exports\nmodule.exports = wrap({ http: http, https: https });\nmodule.exports.wrap = wrap;\n", "{\n \"name\": \"axios\",\n \"version\": \"0.21.4\",\n \"description\": \"Promise based HTTP client for the browser and node.js\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"grunt test\",\n \"start\": \"node ./sandbox/server.js\",\n \"build\": \"NODE_ENV=production grunt build\",\n \"preversion\": \"npm test\",\n \"version\": \"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json\",\n \"postversion\": \"git push && git push --tags\",\n \"examples\": \"node ./examples/server.js\",\n \"coveralls\": \"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js\",\n \"fix\": \"eslint --fix lib/**/*.js\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/axios/axios.git\"\n },\n \"keywords\": [\n \"xhr\",\n \"http\",\n \"ajax\",\n \"promise\",\n \"node\"\n ],\n \"author\": \"Matt Zabriskie\",\n \"license\": \"MIT\",\n \"bugs\": {\n \"url\": \"https://github.com/axios/axios/issues\"\n },\n \"homepage\": \"https://axios-http.com\",\n \"devDependencies\": {\n \"coveralls\": \"^3.0.0\",\n \"es6-promise\": \"^4.2.4\",\n \"grunt\": \"^1.3.0\",\n \"grunt-banner\": \"^0.6.0\",\n \"grunt-cli\": \"^1.2.0\",\n \"grunt-contrib-clean\": \"^1.1.0\",\n \"grunt-contrib-watch\": \"^1.0.0\",\n \"grunt-eslint\": \"^23.0.0\",\n \"grunt-karma\": \"^4.0.0\",\n \"grunt-mocha-test\": \"^0.13.3\",\n \"grunt-ts\": \"^6.0.0-beta.19\",\n \"grunt-webpack\": \"^4.0.2\",\n \"istanbul-instrumenter-loader\": \"^1.0.0\",\n \"jasmine-core\": \"^2.4.1\",\n \"karma\": \"^6.3.2\",\n \"karma-chrome-launcher\": \"^3.1.0\",\n \"karma-firefox-launcher\": \"^2.1.0\",\n \"karma-jasmine\": \"^1.1.1\",\n \"karma-jasmine-ajax\": \"^0.1.13\",\n \"karma-safari-launcher\": \"^1.0.0\",\n \"karma-sauce-launcher\": \"^4.3.6\",\n \"karma-sinon\": \"^1.0.5\",\n \"karma-sourcemap-loader\": \"^0.3.8\",\n \"karma-webpack\": \"^4.0.2\",\n \"load-grunt-tasks\": \"^3.5.2\",\n \"minimist\": \"^1.2.0\",\n \"mocha\": \"^8.2.1\",\n \"sinon\": \"^4.5.0\",\n \"terser-webpack-plugin\": \"^4.2.3\",\n \"typescript\": \"^4.0.5\",\n \"url-search-params\": \"^0.10.0\",\n \"webpack\": \"^4.44.2\",\n \"webpack-dev-server\": \"^3.11.0\"\n },\n \"browser\": {\n \"./lib/adapters/http.js\": \"./lib/adapters/xhr.js\"\n },\n \"jsdelivr\": \"dist/axios.min.js\",\n \"unpkg\": \"dist/axios.min.js\",\n \"typings\": \"./index.d.ts\",\n \"dependencies\": {\n \"follow-redirects\": \"^1.14.0\"\n },\n \"bundlesize\": [\n {\n \"path\": \"./dist/axios.min.js\",\n \"threshold\": \"5kB\"\n }\n ]\n}\n", "'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildFullPath = require('../core/buildFullPath');\nvar buildURL = require('./../helpers/buildURL');\nvar http = require('http');\nvar https = require('https');\nvar httpFollow = require('follow-redirects').http;\nvar httpsFollow = require('follow-redirects').https;\nvar url = require('url');\nvar zlib = require('zlib');\nvar pkg = require('./../../package.json');\nvar createError = require('../core/createError');\nvar enhanceError = require('../core/enhanceError');\n\nvar isHttps = /https:?/;\n\n/**\n *\n * @param {http.ClientRequestArgs} options\n * @param {AxiosProxyConfig} proxy\n * @param {string} location\n */\nfunction setProxy(options, proxy, location) {\n options.hostname = proxy.host;\n options.host = proxy.host;\n options.port = proxy.port;\n options.path = location;\n\n // Basic proxy authorization\n if (proxy.auth) {\n var base64 = Buffer.from(proxy.auth.username + ':' + proxy.auth.password, 'utf8').toString('base64');\n options.headers['Proxy-Authorization'] = 'Basic ' + base64;\n }\n\n // If a proxy is used, any redirects must also pass through the proxy\n options.beforeRedirect = function beforeRedirect(redirection) {\n redirection.headers.host = redirection.host;\n setProxy(redirection, proxy, redirection.href);\n };\n}\n\n/*eslint consistent-return:0*/\nmodule.exports = function httpAdapter(config) {\n return new Promise(function dispatchHttpRequest(resolvePromise, rejectPromise) {\n var resolve = function resolve(value) {\n resolvePromise(value);\n };\n var reject = function reject(value) {\n rejectPromise(value);\n };\n var data = config.data;\n var headers = config.headers;\n\n // Set User-Agent (required by some servers)\n // See https://github.com/axios/axios/issues/69\n if ('User-Agent' in headers || 'user-agent' in headers) {\n // User-Agent is specified; handle case where no UA header is desired\n if (!headers['User-Agent'] && !headers['user-agent']) {\n delete headers['User-Agent'];\n delete headers['user-agent'];\n }\n // Otherwise, use specified value\n } else {\n // Only set header if it hasn't been set in config\n headers['User-Agent'] = 'axios/' + pkg.version;\n }\n\n if (data && !utils.isStream(data)) {\n if (Buffer.isBuffer(data)) {\n // Nothing to do...\n } else if (utils.isArrayBuffer(data)) {\n data = Buffer.from(new Uint8Array(data));\n } else if (utils.isString(data)) {\n data = Buffer.from(data, 'utf-8');\n } else {\n return reject(createError(\n 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',\n config\n ));\n }\n\n // Add Content-Length header if data exists\n headers['Content-Length'] = data.length;\n }\n\n // HTTP basic authentication\n var auth = undefined;\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n auth = username + ':' + password;\n }\n\n // Parse url\n var fullPath = buildFullPath(config.baseURL, config.url);\n var parsed = url.parse(fullPath);\n var protocol = parsed.protocol || 'http:';\n\n if (!auth && parsed.auth) {\n var urlAuth = parsed.auth.split(':');\n var urlUsername = urlAuth[0] || '';\n var urlPassword = urlAuth[1] || '';\n auth = urlUsername + ':' + urlPassword;\n }\n\n if (auth) {\n delete headers.Authorization;\n }\n\n var isHttpsRequest = isHttps.test(protocol);\n var agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;\n\n var options = {\n path: buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\\?/, ''),\n method: config.method.toUpperCase(),\n headers: headers,\n agent: agent,\n agents: { http: config.httpAgent, https: config.httpsAgent },\n auth: auth\n };\n\n if (config.socketPath) {\n options.socketPath = config.socketPath;\n } else {\n options.hostname = parsed.hostname;\n options.port = parsed.port;\n }\n\n var proxy = config.proxy;\n if (!proxy && proxy !== false) {\n var proxyEnv = protocol.slice(0, -1) + '_proxy';\n var proxyUrl = process.env[proxyEnv] || process.env[proxyEnv.toUpperCase()];\n if (proxyUrl) {\n var parsedProxyUrl = url.parse(proxyUrl);\n var noProxyEnv = process.env.no_proxy || process.env.NO_PROXY;\n var shouldProxy = true;\n\n if (noProxyEnv) {\n var noProxy = noProxyEnv.split(',').map(function trim(s) {\n return s.trim();\n });\n\n shouldProxy = !noProxy.some(function proxyMatch(proxyElement) {\n if (!proxyElement) {\n return false;\n }\n if (proxyElement === '*') {\n return true;\n }\n if (proxyElement[0] === '.' &&\n parsed.hostname.substr(parsed.hostname.length - proxyElement.length) === proxyElement) {\n return true;\n }\n\n return parsed.hostname === proxyElement;\n });\n }\n\n if (shouldProxy) {\n proxy = {\n host: parsedProxyUrl.hostname,\n port: parsedProxyUrl.port,\n protocol: parsedProxyUrl.protocol\n };\n\n if (parsedProxyUrl.auth) {\n var proxyUrlAuth = parsedProxyUrl.auth.split(':');\n proxy.auth = {\n username: proxyUrlAuth[0],\n password: proxyUrlAuth[1]\n };\n }\n }\n }\n }\n\n if (proxy) {\n options.headers.host = parsed.hostname + (parsed.port ? ':' + parsed.port : '');\n setProxy(options, proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path);\n }\n\n var transport;\n var isHttpsProxy = isHttpsRequest && (proxy ? isHttps.test(proxy.protocol) : true);\n if (config.transport) {\n transport = config.transport;\n } else if (config.maxRedirects === 0) {\n transport = isHttpsProxy ? https : http;\n } else {\n if (config.maxRedirects) {\n options.maxRedirects = config.maxRedirects;\n }\n transport = isHttpsProxy ? httpsFollow : httpFollow;\n }\n\n if (config.maxBodyLength > -1) {\n options.maxBodyLength = config.maxBodyLength;\n }\n\n // Create the request\n var req = transport.request(options, function handleResponse(res) {\n if (req.aborted) return;\n\n // uncompress the response body transparently if required\n var stream = res;\n\n // return the last request in case of redirects\n var lastRequest = res.req || req;\n\n\n // if no content, is HEAD request or decompress disabled we should not decompress\n if (res.statusCode !== 204 && lastRequest.method !== 'HEAD' && config.decompress !== false) {\n switch (res.headers['content-encoding']) {\n /*eslint default-case:0*/\n case 'gzip':\n case 'compress':\n case 'deflate':\n // add the unzipper to the body stream processing pipeline\n stream = stream.pipe(zlib.createUnzip());\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n }\n }\n\n var response = {\n status: res.statusCode,\n statusText: res.statusMessage,\n headers: res.headers,\n config: config,\n request: lastRequest\n };\n\n if (config.responseType === 'stream') {\n response.data = stream;\n settle(resolve, reject, response);\n } else {\n var responseBuffer = [];\n var totalResponseBytes = 0;\n stream.on('data', function handleStreamData(chunk) {\n responseBuffer.push(chunk);\n totalResponseBytes += chunk.length;\n\n // make sure the content length is not over the maxContentLength if specified\n if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {\n stream.destroy();\n reject(createError('maxContentLength size of ' + config.maxContentLength + ' exceeded',\n config, null, lastRequest));\n }\n });\n\n stream.on('error', function handleStreamError(err) {\n if (req.aborted) return;\n reject(enhanceError(err, config, null, lastRequest));\n });\n\n stream.on('end', function handleStreamEnd() {\n var responseData = Buffer.concat(responseBuffer);\n if (config.responseType !== 'arraybuffer') {\n responseData = responseData.toString(config.responseEncoding);\n if (!config.responseEncoding || config.responseEncoding === 'utf8') {\n responseData = utils.stripBOM(responseData);\n }\n }\n\n response.data = responseData;\n settle(resolve, reject, response);\n });\n }\n });\n\n // Handle errors\n req.on('error', function handleRequestError(err) {\n if (req.aborted && err.code !== 'ERR_FR_TOO_MANY_REDIRECTS') return;\n reject(enhanceError(err, config, null, req));\n });\n\n // Handle request timeout\n if (config.timeout) {\n // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types.\n var timeout = parseInt(config.timeout, 10);\n\n if (isNaN(timeout)) {\n reject(createError(\n 'error trying to parse `config.timeout` to int',\n config,\n 'ERR_PARSE_TIMEOUT',\n req\n ));\n\n return;\n }\n\n // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.\n // And timer callback will be fired, and abort() will be invoked before connection, then get \"socket hang up\" and code ECONNRESET.\n // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.\n // And then these socket which be hang up will devoring CPU little by little.\n // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.\n req.setTimeout(timeout, function handleRequestTimeout() {\n req.abort();\n reject(createError(\n 'timeout of ' + timeout + 'ms exceeded',\n config,\n config.transitional && config.transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n req\n ));\n });\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (req.aborted) return;\n\n req.abort();\n reject(cancel);\n });\n }\n\n // Send the request\n if (utils.isStream(data)) {\n data.on('error', function handleStreamError(err) {\n reject(enhanceError(err, config, null, req));\n }).pipe(req);\n } else {\n req.end(data);\n }\n });\n};\n", null, null, null, null, null, "'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n", "'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n", "'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n", "'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n", "'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n", "'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(\n timeoutErrorMessage,\n config,\n config.transitional && config.transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n", "'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\nvar enhanceError = require('./core/enhanceError');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n },\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw enhanceError(e, this, 'E_JSON_PARSE');\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n", "'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('./../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n", "'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n", "'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n", "'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];\n var defaultToConfig2Keys = [\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',\n 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'\n ];\n var directMergeKeys = ['validateStatus'];\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n }\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n utils.forEach(directMergeKeys, function merge(prop) {\n if (prop in config2) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys)\n .concat(directMergeKeys);\n\n var otherKeys = Object\n .keys(config1)\n .concat(Object.keys(config2))\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, mergeDeepProperties);\n\n return config;\n};\n", "'use strict';\n\nvar pkg = require('./../../package.json');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\nvar currentVerArr = pkg.version.split('.');\n\n/**\n * Compare package versions\n * @param {string} version\n * @param {string?} thanVersion\n * @returns {boolean}\n */\nfunction isOlderVersion(version, thanVersion) {\n var pkgVersionArr = thanVersion ? thanVersion.split('.') : currentVerArr;\n var destVer = version.split('.');\n for (var i = 0; i < 3; i++) {\n if (pkgVersionArr[i] > destVer[i]) {\n return true;\n } else if (pkgVersionArr[i] < destVer[i]) {\n return false;\n }\n }\n return false;\n}\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator\n * @param {string?} version\n * @param {string} message\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n var isDeprecated = version && isOlderVersion(version);\n\n function formatMessage(opt, desc) {\n return '[Axios v' + pkg.version + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new Error(formatMessage(opt, ' has been removed in ' + version));\n }\n\n if (isDeprecated && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new TypeError('option ' + opt + ' must be ' + result);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw Error('Unknown option ' + opt);\n }\n }\n}\n\nmodule.exports = {\n isOlderVersion: isOlderVersion,\n assertOptions: assertOptions,\n validators: validators\n};\n", "'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean, '1.0.0'),\n forcedJSONParsing: validators.transitional(validators.boolean, '1.0.0'),\n clarifyTimeoutError: validators.transitional(validators.boolean, '1.0.0')\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n", "'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n", "'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n", "'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n", "'use strict';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return (typeof payload === 'object') && (payload.isAxiosError === true);\n};\n", "'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n", "module.exports = require('./lib/axios');", null, null, null, "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=types.js.map", null, "#!/usr/bin/env node\n\n/**\n * EvalForge Evaluator Entry Point\n *\n * This module runs evaluations on a remote Dev Machine.\n * It fetches evaluation data from the server, runs scenarios,\n * and reports results (including detailed error information).\n */\n\n// CRITICAL: Log immediately at module load time to catch import failures\nconsole.error(\n '[EVALUATOR-BOOT] Module loading started',\n new Date().toISOString()\n);\n\nimport { EvalStatus, type LiveTraceEvent } from '@wix/evalforge-types';\nimport { loadConfig, type EvaluatorConfig } from './config.js';\nimport { createApiClient, type ApiClient } from './api-client.js';\nimport { fetchEvaluationData } from './fetch-evaluation-data.js';\nimport { runScenario } from './run-scenario/index.js';\nimport { runEvaluationLoop } from './evaluation-loop.js';\nimport {\n formatError,\n formatErrorForJobError,\n ExecutionPhase\n} from './error-reporter.js';\n// Diagnostics disabled - was causing Invalid Date entries in UI\n// import { runDiagnostics } from './diagnostics.js';\n\nconsole.error('[EVALUATOR-BOOT] All static imports successful');\n\n/**\n * State that persists across the evaluation for error reporting.\n * This allows us to report errors even when config/api are not yet initialized.\n */\ninterface EvaluationState {\n config: EvaluatorConfig | null;\n api: ApiClient | null;\n currentPhase: string;\n currentContext: Record<string, unknown>;\n}\n\n/**\n * Run the evaluation with comprehensive error tracking.\n *\n * @param projectId - The project ID\n * @param evalRunId - The eval run ID\n */\nasync function runEvaluation(\n projectId: string,\n evalRunId: string\n): Promise<void> {\n // Initialize state for error tracking\n const state: EvaluationState = {\n config: null,\n api: null,\n currentPhase: ExecutionPhase.CONFIG,\n currentContext: { projectId, evalRunId }\n };\n\n console.error(\n '[DEBUG-H1] runEvaluation entry',\n JSON.stringify({ projectId, evalRunId, timestamp: Date.now() })\n );\n\n // ============================================\n // PHASE 1: Load Configuration\n // ============================================\n state.currentPhase = ExecutionPhase.CONFIG;\n state.currentContext = { projectId, evalRunId };\n\n let config: EvaluatorConfig;\n try {\n config = loadConfig();\n state.config = config;\n console.error(\n '[DEBUG-H1] loadConfig SUCCESS',\n JSON.stringify({\n serverUrl: config.serverUrl,\n apiPrefix: config.apiPrefix || '(none)',\n aiGatewayUrl: config.aiGatewayUrl,\n hasHeaders: Object.keys(config.aiGatewayHeaders).length > 0,\n timestamp: Date.now()\n })\n );\n } catch (configErr) {\n console.error(\n '[DEBUG-H1] loadConfig FAILED',\n JSON.stringify({\n error:\n configErr instanceof Error ? configErr.message : String(configErr),\n stack: configErr instanceof Error ? configErr.stack : undefined,\n timestamp: Date.now()\n })\n );\n // Can't report to server without config, but error will be caught by main handler\n throw new Error(\n `[${ExecutionPhase.CONFIG}] ${configErr instanceof Error ? configErr.message : String(configErr)}`\n );\n }\n\n console.log('[Evaluator] Config loaded', {\n serverUrl: config.serverUrl,\n aiGatewayUrl: config.aiGatewayUrl,\n evaluationsDir: config.evaluationsDir,\n hasAiGatewayHeaders: Object.keys(config.aiGatewayHeaders).length > 0,\n hasRouteHeader: !!config.routeHeader\n });\n\n // ============================================\n // PHASE 2: Create API Client\n // ============================================\n state.currentPhase = ExecutionPhase.API_CLIENT;\n\n let api: ApiClient;\n try {\n api = createApiClient(config.serverUrl, {\n apiPrefix: config.apiPrefix,\n routeHeader: config.routeHeader,\n authToken: config.authToken,\n grpcAuthToken: config.grpcAuthToken\n });\n state.api = api;\n } catch (apiErr) {\n throw new Error(\n `[${ExecutionPhase.API_CLIENT}] Failed to create API client: ${apiErr instanceof Error ? apiErr.message : String(apiErr)}`\n );\n }\n\n // ============================================\n // PHASE 3: Fetch Evaluation Data\n // ============================================\n state.currentPhase = ExecutionPhase.FETCH_EVAL_RUN;\n state.currentContext = { projectId, evalRunId, serverUrl: config.serverUrl };\n\n console.error(\n '[DEBUG-H2] fetchEvaluationData START',\n JSON.stringify({ serverUrl: config.serverUrl, timestamp: Date.now() })\n );\n\n let evalData;\n try {\n evalData = await fetchEvaluationData(api, projectId, evalRunId);\n console.error(\n '[DEBUG-H2] fetchEvaluationData SUCCESS',\n JSON.stringify({\n scenarioItemCount: evalData.scenarioItems.length,\n scenarios: evalData.scenarioItems.map((s) => s.scenario.name),\n skillsCount: evalData.skills.length,\n hasAgent: !!evalData.agent,\n timestamp: Date.now()\n })\n );\n } catch (fetchErr) {\n const errorMsg =\n fetchErr instanceof Error ? fetchErr.message : String(fetchErr);\n console.error(\n '[DEBUG-H2] fetchEvaluationData FAILED',\n JSON.stringify({\n error: errorMsg,\n stack: fetchErr instanceof Error ? fetchErr.stack : undefined,\n timestamp: Date.now()\n })\n );\n throw new Error(\n `[${ExecutionPhase.FETCH_EVAL_RUN}] Failed to fetch evaluation data: ${errorMsg}`\n );\n }\n\n const { agent, skills, scenarioItems } = evalData;\n\n // Remote jobs (TRACE_PUSH_URL set by the backend job runner) push trace\n // events to the backend via the gRPC PushTraceEvent RPC; local runs emit to\n // stdout only, which the backend captures directly. Fire-and-forget: a\n // failed push must never break the evaluation.\n const pushEvent = config.tracePushUrl\n ? (event: LiveTraceEvent): void => {\n api.pushTraceEvent(projectId, evalRunId, event).catch((err) => {\n console.error(\n '[Trace Push] Failed to push trace event:',\n err instanceof Error ? err.message : String(err)\n );\n });\n }\n : undefined;\n\n // ============================================\n // PHASE 4: Validation\n // ============================================\n state.currentPhase = ExecutionPhase.VALIDATION;\n state.currentContext = {\n projectId,\n evalRunId,\n scenarioCount: scenarioItems.length,\n skillCount: skills.length,\n hasAgent: !!agent,\n agentId: evalData.evalRun.agentId,\n presetId: evalData.evalRun.presetId,\n capabilityIds: evalData.evalRun.capabilityIds\n };\n\n if (scenarioItems.length > 0 && !agent) {\n throw new Error(\n `[${ExecutionPhase.VALIDATION}] Eval run has no agent: set agentId for evaluation runs. ` +\n `(agentId: ${evalData.evalRun.agentId || 'not set'})`\n );\n }\n\n // ============================================\n // PHASE 5: Execute Scenarios\n // ============================================\n // Note: Wix auth file (~/.wix/auth/api-key.json) is written by the backend\n // before the evaluator starts, so CLI/MCP tools are already authenticated.\n const skillNames = evalData.skills.map((s) => s.name).join(', ');\n\n const {\n completedExecutions,\n totalExecutions,\n erroredExecutions,\n firstErrorMessage\n } = await runEvaluationLoop(scenarioItems, evalData, {\n runScenario: (scenario, template, resolvedAssertions) => {\n state.currentPhase = ExecutionPhase.EXECUTE_SKILL;\n state.currentContext = {\n projectId,\n evalRunId,\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n presetId: evalData.evalRun.presetId,\n presetName: evalData.presetName,\n agentId: agent?.id,\n agentName: agent?.name\n };\n return runScenario(\n config,\n evalRunId,\n scenario,\n evalData,\n template,\n resolvedAssertions,\n pushEvent\n );\n },\n addResult: async (result) => {\n state.currentPhase = ExecutionPhase.ADD_RESULT;\n state.currentContext = {\n ...state.currentContext,\n resultId: result.id\n };\n await api.addResult(projectId, evalRunId, result);\n },\n onProgress: (completed, total, iterLabel) => {\n console.log(\n '[Evaluator] Running scenario with preset:',\n evalData.presetName,\n skillNames ? `(${skillNames})` : '',\n agent ? `with agent: ${agent.name}` : '',\n `(${completed}/${total})${iterLabel}`\n );\n }\n });\n\n // ============================================\n // PHASE 6: Update Status to Completed\n // ============================================\n state.currentPhase = ExecutionPhase.UPDATE_STATUS;\n state.currentContext = {\n projectId,\n evalRunId,\n completedExecutions,\n totalExecutions\n };\n\n const allFailed =\n totalExecutions > 0 && erroredExecutions === totalExecutions;\n const finalStatus = allFailed ? EvalStatus.FAILED : EvalStatus.COMPLETED;\n\n // When every execution errored we mark the run as FAILED. Carry a\n // representative error string and an explicit `FAILED` jobStatus so the\n // eval_runs row tells you what happened without having to drill into\n // `data.results[0].outputText`. Truncated so a giant stack trace doesn't\n // bloat the row's JSON column.\n const jobErrorOnAllFailed = allFailed\n ? truncateForJobError(\n firstErrorMessage ??\n `All ${totalExecutions} executions errored without an error message`\n )\n : undefined;\n\n try {\n await api.updateEvalRun(projectId, evalRunId, {\n status: finalStatus,\n completedAt: new Date().toISOString(),\n ...(allFailed\n ? { jobError: jobErrorOnAllFailed, jobStatus: 'FAILED' as const }\n : {})\n });\n } catch (updateErr) {\n throw new Error(\n `[${ExecutionPhase.UPDATE_STATUS}] Failed to update eval run status to ${finalStatus}: ${updateErr instanceof Error ? updateErr.message : String(updateErr)}`\n );\n }\n}\n\nconst JOB_ERROR_MAX_LENGTH = 1000;\n\nfunction truncateForJobError(message: string): string {\n if (message.length <= JOB_ERROR_MAX_LENGTH) return message;\n return `${message.slice(0, JOB_ERROR_MAX_LENGTH)}\u2026 [truncated]`;\n}\n\n// ============================================\n// Main Entry Point\n// ============================================\nconst projectId = process.argv[2];\nconst evalRunId = process.argv[3];\n\nconsole.error(\n '[EVALUATOR-BOOT] Args parsed',\n JSON.stringify({ projectId, evalRunId })\n);\n\nif (!projectId || !evalRunId) {\n console.error('Usage: evaluator <project-id> <eval-run-id>');\n process.exit(1);\n}\n\nrunEvaluation(projectId, evalRunId)\n .then(() => {\n console.error('[EVALUATOR-BOOT] runEvaluation completed successfully');\n process.exit(0);\n })\n .catch(async (err) => {\n // Extract detailed error information\n const errorDetails = formatError(err, 'main-execution', {\n projectId,\n evalRunId\n });\n const jobError = formatErrorForJobError(errorDetails);\n\n console.error('[EVALUATOR-BOOT] runEvaluation FAILED');\n console.error(\n '[EVALUATOR-BOOT] Error details:',\n JSON.stringify(errorDetails, null, 2)\n );\n\n // Try to update status to FAILED with detailed error info\n try {\n const config = loadConfig();\n const api = createApiClient(config.serverUrl, {\n apiPrefix: config.apiPrefix,\n routeHeader: config.routeHeader,\n authToken: config.authToken,\n grpcAuthToken: config.grpcAuthToken\n });\n await api.updateEvalRun(projectId, evalRunId, {\n status: EvalStatus.FAILED,\n completedAt: new Date().toISOString(),\n jobError,\n jobStatus: 'FAILED'\n });\n console.error(\n '[EVALUATOR-BOOT] Updated eval run status to FAILED with error details'\n );\n } catch (updateErr) {\n console.error(\n '[EVALUATOR-BOOT] Failed to update eval run status:',\n updateErr instanceof Error ? updateErr.message : String(updateErr)\n );\n\n // If config loading failed, try with minimal config from env\n try {\n const serverUrl = process.env.EVAL_SERVER_URL;\n const authToken = process.env.EVAL_AUTH_TOKEN;\n const grpcAuthToken = process.env.EVAL_GRPC_AUTH_TOKEN;\n const routeHeader = process.env.EVAL_ROUTE_HEADER;\n\n if (serverUrl) {\n const api = createApiClient(serverUrl, {\n routeHeader,\n authToken,\n grpcAuthToken\n });\n await api.updateEvalRun(projectId, evalRunId, {\n status: EvalStatus.FAILED,\n completedAt: new Date().toISOString(),\n jobError: `Config load failed, then: ${jobError}`,\n jobStatus: 'FAILED'\n });\n console.error('[EVALUATOR-BOOT] Fallback: Updated status to FAILED');\n }\n } catch (fallbackErr) {\n console.error(\n '[EVALUATOR-BOOT] Fallback also failed:',\n fallbackErr instanceof Error\n ? fallbackErr.message\n : String(fallbackErr)\n );\n }\n }\n\n process.exit(1);\n });\n", "/**\n * Evaluator Configuration\n *\n * Reads configuration from environment variables set by the server\n * when spawning the evaluator process.\n */\n\nexport interface EvaluatorConfig {\n /** Backend server URL for fetching data and reporting results */\n serverUrl: string;\n /** API path prefix (default: empty, set to \"/api/v1\" if needed for production) */\n apiPrefix: string;\n /** AI Gateway base URL for LLM calls */\n aiGatewayUrl: string;\n /** Custom headers for AI Gateway requests (parsed from \"key:value\" lines) */\n aiGatewayHeaders: Record<string, string>;\n /** Directory for storing evaluation working directories */\n evaluationsDir?: string;\n /**\n * Legacy REST URL for pushing trace events (set by the backend job runner\n * for remote jobs). Its presence enables remote trace push; the push itself\n * now goes through the gRPC `PushTraceEvent` RPC, so the URL value is only\n * used by the (disabled) diagnostics module.\n */\n tracePushUrl?: string;\n /**\n * Optional x-wix-route header value for deploy preview routing.\n * When set, this header is included in all API requests to route\n * them to the correct deploy preview instance.\n */\n routeHeader?: string;\n /**\n * Optional Bearer token for authenticating with public endpoints.\n * When set, this token is included as Authorization header in API requests.\n */\n authToken?: string;\n /**\n * Optional S2S-signed token for authenticating gRPC/ambassador calls.\n * When set, it is forwarded via the Wix HttpClient `getAppToken` hook. When\n * absent (e.g., local development), gRPC calls go out unauthenticated.\n */\n grpcAuthToken?: string;\n}\n\n/**\n * Load evaluator configuration from environment variables.\n *\n * @throws Error if required environment variables are missing\n */\nexport function loadConfig(): EvaluatorConfig {\n const serverUrl = process.env.EVAL_SERVER_URL;\n // API prefix: set to \"/api/v1\" if your API gateway requires it, or empty string\n const apiPrefix = process.env.EVAL_API_PREFIX || '';\n const aiGatewayUrl = process.env.AI_GATEWAY_URL;\n const aiGatewayHeadersRaw = process.env.AI_GATEWAY_HEADERS;\n const evaluationsDir = process.env.EVALUATIONS_DIR;\n\n if (!serverUrl) {\n throw new Error('EVAL_SERVER_URL environment variable is required');\n }\n if (!aiGatewayUrl) {\n throw new Error('AI_GATEWAY_URL environment variable is required');\n }\n\n // Parse headers from newline-separated \"key:value\" format\n const aiGatewayHeaders: Record<string, string> = {};\n if (aiGatewayHeadersRaw) {\n for (const line of aiGatewayHeadersRaw.split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n const colonIndex = trimmed.indexOf(':');\n if (colonIndex === -1) {\n throw new Error(\n `Invalid header format: \"${trimmed}\". Expected \"key:value\" format.`\n );\n }\n const key = trimmed.substring(0, colonIndex).trim();\n const value = trimmed.substring(colonIndex + 1).trim();\n aiGatewayHeaders[key] = value;\n }\n }\n\n // Always disable proxy-level caching so eval runs hit the real LLM\n aiGatewayHeaders['x-wix-ai-gateway-disable-cache'] = 'true';\n\n // Per-request time budget (5 min) sent to the AI gateway proxy. The proxy's\n // own route timeout is 120s and `gpt-5` requests can legitimately take 15-60s\n // upstream; without an explicit budget the request inherits the Wix framework\n // default deadline (~10s), which previously caused premature 503s on slow\n // responses while the proxy kept running and returning 200 (orphaned).\n // `x-time-budget` is the canonical Wix header (read by @wix/wnp-sla and\n // listed as a pass-through header in @wix/wnp-bootstrap-composer).\n // `x-wix-time-budget` is set defensively for parity with the proxy's own\n // outbound calls (`packages/wix-ai-gateway-proxy/.../ai-gateway.ts`).\n aiGatewayHeaders['x-time-budget'] = '300000';\n aiGatewayHeaders['x-wix-time-budget'] = '300000';\n\n // Optional trace push URL for remote job execution\n const tracePushUrl = process.env.TRACE_PUSH_URL;\n\n // Optional route header for deploy preview routing\n const routeHeader = process.env.EVAL_ROUTE_HEADER;\n\n // Optional auth token for public endpoint authentication\n const authToken = process.env.EVAL_AUTH_TOKEN;\n\n // Optional S2S token for ambassador/gRPC calls (set by the backend job runner;\n // absent during local development).\n const grpcAuthToken = process.env.EVAL_GRPC_AUTH_TOKEN;\n\n return {\n serverUrl,\n apiPrefix,\n aiGatewayUrl,\n aiGatewayHeaders,\n evaluationsDir,\n tracePushUrl,\n routeHeader,\n authToken,\n grpcAuthToken\n };\n}\n", "/**\n * API Client for fetching data from the eval server.\n *\n * Migration in progress: backend calls are moving from raw `fetch` against\n * the legacy REST surface to the gRPC ambassador surface via `@wix/http-client`.\n * Migrated: `getEvalRun`, `getScenario`, `getAgent`, `getTemplate`, `getPreset`,\n * `getCapability`, `getCapabilityVersion`, `addResult`, `clearResults`,\n * `pushTraceEvent`. Still on legacy REST: `updateEvalRun` \u2014 the gRPC\n * `UpdateEvalRun` handler only forwards user-editable fields\n * (name/description/comparison*), not the system state transitions\n * (status/completedAt/jobError/jobStatus) the evaluator writes.\n */\n\nimport { HttpClient, type IHttpClient } from '@wix/http-client';\nimport { getTestScenario as getTestScenarioReq } from '@wix/ambassador-evalforge-v1-test-scenario/http';\nimport {\n addEvalRunResult as addEvalRunResultReq,\n clearEvalRunResults as clearEvalRunResultsReq,\n getEvalRun as getEvalRunReq,\n pushTraceEvent as pushTraceEventReq\n} from '@wix/ambassador-evalforge-v1-eval-run/http';\nimport { getAgent as getAgentReq } from '@wix/ambassador-evalforge-v1-agent/http';\nimport { getTemplate as getTemplateReq } from '@wix/ambassador-evalforge-v1-project/http';\nimport { getPreset as getPresetReq } from '@wix/ambassador-evalforge-v1-preset/http';\nimport {\n getCapability as getCapabilityReq,\n getCapabilityVersion as getCapabilityVersionReq,\n getLatestCapabilityVersion as getLatestCapabilityVersionReq\n} from '@wix/ambassador-evalforge-v1-capability/http';\nimport type {\n EvalRun,\n EvalRunResult,\n LiveTraceEvent,\n TestScenario,\n Template,\n Agent,\n Preset,\n CapabilityWithLatestVersion,\n CapabilityVersion\n} from '@wix/evalforge-types';\nimport {\n agentFromProto,\n capabilityFromProto,\n capabilityVersionFromProto,\n evalRunFromProto,\n evalRunResultToProto,\n liveTraceEventToProto,\n presetFromProto,\n templateFromProto,\n testScenarioFromProto\n} from './ambassador-converters.js';\n\nexport interface ApiClient {\n getEvalRun(projectId: string, id: string): Promise<EvalRun>;\n getScenario(projectId: string, id: string): Promise<TestScenario>;\n getAgent(projectId: string, id: string): Promise<Agent>;\n getTemplate(projectId: string, id: string): Promise<Template>;\n getPreset(projectId: string, id: string): Promise<Preset>;\n getCapability(\n projectId: string,\n id: string\n ): Promise<CapabilityWithLatestVersion>;\n getCapabilityVersion(\n projectId: string,\n capabilityId: string,\n versionId: string\n ): Promise<CapabilityVersion>;\n addResult(\n projectId: string,\n evalRunId: string,\n result: EvalRunResult\n ): Promise<void>;\n clearResults(projectId: string, evalRunId: string): Promise<void>;\n pushTraceEvent(\n projectId: string,\n evalRunId: string,\n event: LiveTraceEvent\n ): Promise<void>;\n updateEvalRun(\n projectId: string,\n evalRunId: string,\n update: Partial<EvalRun>\n ): Promise<void>;\n}\n\n/**\n * Options for creating an API client.\n */\nexport interface ApiClientOptions {\n /** API path prefix (default: empty string, set to \"/api/v1\" if needed) */\n apiPrefix?: string;\n /**\n * Optional x-wix-route header value for deploy preview routing.\n * When set, this header is included in all requests.\n */\n routeHeader?: string;\n /**\n * Optional Bearer token for authenticating with the legacy REST public\n * endpoints (`/public/...`). Used by the not-yet-migrated `fetch` paths.\n */\n authToken?: string;\n /**\n * Optional S2S-signed token for authenticating ambassador/gRPC calls.\n * Wired into the underlying `HttpClient` via `getAppToken`. When absent\n * (local dev), `getAppToken` is omitted and requests go out unauthenticated.\n */\n grpcAuthToken?: string;\n /**\n * Override the underlying http client. Tests inject a mock built with\n * `@wix/http-client-testkit` here; production code never sets this and a\n * real `HttpClient` is constructed from `serverUrl` + auth/route options.\n */\n httpClient?: IHttpClient;\n}\n\n/**\n * Resolve the `baseURL` for the ambassador `HttpClient` from the configured\n * `serverUrl`.\n *\n * The ambassador request factories emit fully-qualified gateway paths that\n * already include the `/_api/evalforge-backend` prefix (e.g.\n * `/_api/evalforge-backend/v1/projects/{id}/eval-runs/{id}`). `serverUrl` also\n * carries that prefix \u2014 it is the REST base `putJson` uses for the one\n * remaining legacy write (`updateEvalRun`) \u2014 so using it directly as the\n * HttpClient `baseURL` duplicates the prefix\n * (`.../_api/evalforge-backend/_api/evalforge-backend/v1/...`) and every\n * ambassador call 404s: the run starts but the evaluator can't fetch its data,\n * so the eval fails with no results.\n *\n * Returning the origin only keeps the ambassador-emitted path intact while the\n * REST `updateEvalRun` write keeps using the full `serverUrl`. Origin-only\n * inputs (the local in-cluster `http://host:port`) are returned unchanged.\n *\n * @param serverUrl - Base URL of the server (e.g., \"https://bo.wix.com/_api/evalforge-backend\")\n */\nexport function resolveAmbassadorBaseUrl(serverUrl: string): string {\n try {\n return new URL(serverUrl).origin;\n } catch {\n // serverUrl is absolute in every real environment; fall back to the raw\n // value only for relative test stubs.\n return serverUrl;\n }\n}\n\n/**\n * Create an API client for the eval server.\n *\n * @param serverUrl - Base URL of the server (e.g., \"https://bo.wix.com/_api/evalforge-backend\")\n * @param options - Optional configuration including apiPrefix and routeHeader\n */\nexport function createApiClient(\n serverUrl: string,\n options: ApiClientOptions | string = ''\n): ApiClient {\n // Support legacy signature: createApiClient(serverUrl, apiPrefix)\n const opts: ApiClientOptions =\n typeof options === 'string' ? { apiPrefix: options } : options;\n const apiPrefix = opts.apiPrefix ?? '';\n const routeHeader = opts.routeHeader;\n const authToken = opts.authToken;\n const grpcAuthToken = opts.grpcAuthToken;\n\n // When authToken is provided, use /public prefix for all endpoints\n // This routes requests to token-authenticated public endpoints\n const pathPrefix = authToken ? '/public' : '';\n\n // The HttpClient applies these headers to every request. routeHeader is\n // constant for the lifetime of an eval run, so wiring it in once at\n // construction time is simpler than per-request overrides (which the\n // ambassador HttpClient surface doesn't expose for arbitrary headers).\n const httpClient: IHttpClient =\n opts.httpClient ??\n new HttpClient({\n baseURL: resolveAmbassadorBaseUrl(serverUrl),\n ...(grpcAuthToken ? { getAppToken: () => grpcAuthToken } : {}),\n ...(routeHeader ? { headers: { 'x-wix-route': routeHeader } } : {}),\n disableSquidProxy: true\n });\n\n /**\n * Build headers for legacy REST requests, including auth and route headers.\n * Intentionally kept for the last not-yet-migrated REST write\n * (`updateEvalRun` via `putJson`) \u2014 do not delete as \"unused\" until that\n * call moves to ambassador.\n */\n function buildHeaders(\n additionalHeaders?: Record<string, string>\n ): Record<string, string> {\n const headers: Record<string, string> = { ...additionalHeaders };\n if (authToken) {\n headers['Authorization'] = `Bearer ${authToken}`;\n }\n if (routeHeader) {\n headers['x-wix-route'] = routeHeader;\n }\n return headers;\n }\n\n async function putJson(path: string, body: unknown): Promise<void> {\n const url = `${serverUrl}${apiPrefix}${pathPrefix}${path}`;\n console.error(`[API] PUT ${url}`);\n const response = await fetch(url, {\n method: 'PUT',\n headers: buildHeaders({ 'Content-Type': 'application/json' }),\n body: JSON.stringify(body)\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `API request failed: ${response.status} ${response.statusText} - ${errorText}`\n );\n }\n }\n\n return {\n async getEvalRun(projectId: string, id: string): Promise<EvalRun> {\n const res = await httpClient.request(\n getEvalRunReq({ projectId, evalRunId: id })\n );\n const evalRun = res.data.evalRun;\n if (!evalRun) {\n throw new Error(`Eval run ${id} not found in project ${projectId}`);\n }\n return evalRunFromProto(evalRun);\n },\n\n async getScenario(projectId: string, id: string): Promise<TestScenario> {\n const res = await httpClient.request(\n getTestScenarioReq({ projectId, testScenarioId: id })\n );\n const scenario = res.data.testScenario;\n if (!scenario) {\n throw new Error(\n `Test scenario ${id} not found in project ${projectId}`\n );\n }\n return testScenarioFromProto(scenario);\n },\n\n async getAgent(projectId: string, id: string): Promise<Agent> {\n const res = await httpClient.request(\n getAgentReq({ projectId, agentId: id })\n );\n const agent = res.data.agent;\n if (!agent) {\n throw new Error(`Agent ${id} not found in project ${projectId}`);\n }\n return agentFromProto(agent);\n },\n\n async getTemplate(projectId: string, id: string): Promise<Template> {\n const res = await httpClient.request(\n getTemplateReq({ projectId, templateId: id })\n );\n const template = res.data.template;\n if (!template) {\n throw new Error(`Template ${id} not found in project ${projectId}`);\n }\n return templateFromProto(template);\n },\n\n async getPreset(projectId: string, id: string): Promise<Preset> {\n const res = await httpClient.request(\n getPresetReq({ projectId, presetId: id })\n );\n const preset = res.data.preset;\n if (!preset) {\n throw new Error(`Preset ${id} not found in project ${projectId}`);\n }\n return presetFromProto(preset);\n },\n\n // The legacy REST endpoint enriched the capability with its latest version\n // server-side; ambassador's GetCapability returns the bare entity, so we\n // compose it with GetLatestCapabilityVersion in parallel here.\n async getCapability(\n projectId: string,\n id: string\n ): Promise<CapabilityWithLatestVersion> {\n const [capRes, versionRes] = await Promise.all([\n httpClient.request(getCapabilityReq({ projectId, capabilityId: id })),\n httpClient.request(\n getLatestCapabilityVersionReq({ projectId, capabilityId: id })\n )\n ]);\n const capability = capRes.data.capability;\n if (!capability) {\n throw new Error(`Capability ${id} not found in project ${projectId}`);\n }\n const latestVersion = versionRes.data.capabilityVersion\n ? capabilityVersionFromProto(\n versionRes.data.capabilityVersion,\n projectId\n )\n : undefined;\n return { ...capabilityFromProto(capability), latestVersion };\n },\n\n async getCapabilityVersion(\n projectId: string,\n capabilityId: string,\n versionId: string\n ): Promise<CapabilityVersion> {\n const res = await httpClient.request(\n getCapabilityVersionReq({\n projectId,\n capabilityId,\n capabilityVersionId: versionId\n })\n );\n const version = res.data.capabilityVersion;\n if (!version) {\n throw new Error(\n `Capability version ${versionId} not found for capability ${capabilityId}`\n );\n }\n return capabilityVersionFromProto(version, projectId);\n },\n\n async addResult(\n projectId: string,\n evalRunId: string,\n result: EvalRunResult\n ): Promise<void> {\n await httpClient.request(\n addEvalRunResultReq({\n projectId,\n evalRunId,\n result: evalRunResultToProto(result)\n })\n );\n },\n\n async clearResults(projectId: string, evalRunId: string): Promise<void> {\n await httpClient.request(\n clearEvalRunResultsReq({ projectId, evalRunId })\n );\n },\n\n async pushTraceEvent(\n projectId: string,\n evalRunId: string,\n event: LiveTraceEvent\n ): Promise<void> {\n await httpClient.request(\n pushTraceEventReq({\n projectId,\n evalRunId,\n event: liveTraceEventToProto(event)\n })\n );\n },\n\n updateEvalRun(\n projectId: string,\n evalRunId: string,\n update: Partial<EvalRun>\n ): Promise<void> {\n return putJson(`/projects/${projectId}/eval-runs/${evalRunId}`, update);\n }\n };\n}\n", "type SchemaType = 'Array' | 'Map';\n\nexport function parseLeanSchemaRef(renderedSchemaName: string = ''): {\n schemaName: string;\n schemaType?: SchemaType;\n} {\n const [typeOrName, schemaName] = getSchemaNameAndType(renderedSchemaName);\n\n if (schemaName) {\n return {\n schemaName,\n schemaType: typeOrName as SchemaType,\n };\n }\n\n return {\n schemaName: typeOrName,\n };\n}\n\n// if there is no type, returns only the name\nconst getSchemaNameAndType = (leanSchema: string): string[] =>\n leanSchema.split('#');\n", "export function findByPath(\n obj: object,\n path: string,\n defaultValue: string,\n suffix: string,\n) {\n let result: any = obj;\n for (const field of path.split('.')) {\n if (!result) {\n return defaultValue;\n }\n result = result[field];\n }\n\n return `${result}${suffix}`;\n}\n", "import { findByPath } from './utils.js';\n\nconst USER_DOMAIN = '_';\n\nconst DOMAINS = ['wix.com', 'editorx.com'];\n\nconst WIX_API_DOMAINS = ['42.wixprod.net', 'uw2-edt-1.wixprod.net'];\n\nconst DEV_WIX_CODE_DOMAIN = 'dev.wix-code.com';\n\nconst REGEX_CAPTURE_PROTO_FIELD = /{(.*)}/;\n\nconst REGEX_CAPTURE_DOMAINS = new RegExp(`\\\\.(${DOMAINS.join('|')})$`);\n\nconst REGEX_CAPTURE_API_DOMAINS = new RegExp(\n `\\\\.(${WIX_API_DOMAINS.join('|')})$`,\n);\n\nconst REGEX_CAPTURE_DEV_WIX_CODE_DOMAIN = new RegExp(\n `.*\\\\.${DEV_WIX_CODE_DOMAIN}$`,\n);\n\nexport type ResolveUrlOpts = {\n // resource path as defined in proto file, including all wildcards & co.\n protoPath: string;\n\n // domain as defined on FP to its mappings (might be more than one)\n // www._base_domain_ => [{ srcPath: '/_api/foo', destPath: '/api' }]\n domainToMappings: DomainToMappings;\n\n // actual payload attached to request, needed in order to rersolve path,\n // in case it contains some dynamic parameters\n data?: object;\n\n // request's host\n host: string;\n};\n\nexport function resolveUrl(opts: ResolveUrlOpts) {\n const domain = resolveDomain(opts.host);\n const mappings = resolveMappingsByDomain(domain, opts.domainToMappings);\n const path = injectDataIntoProtoPath(opts.protoPath, opts.data || {});\n\n return resolvePath(path, mappings);\n}\n\nfunction injectDataIntoProtoPath(protoPath: string, data: object) {\n return protoPath\n .split('/')\n .map((path) => maybeProtoPathToData(path, data))\n .join('/');\n}\n\nfunction maybeProtoPathToData(protoPath: string, data: object) {\n const protoRegExpMatch = protoPath.match(REGEX_CAPTURE_PROTO_FIELD) || [];\n\n const field = protoRegExpMatch[1];\n\n if (field) {\n const suffix = protoPath.replace(protoRegExpMatch[0]!, '');\n return findByPath(data, field, protoPath, suffix);\n }\n\n return protoPath;\n}\n\nfunction resolveDomain(host: string) {\n const resolvedHost = fixHostExceptions(host);\n\n return resolvedHost\n .replace(REGEX_CAPTURE_DOMAINS, '._base_domain_')\n .replace(REGEX_CAPTURE_API_DOMAINS, '._api_base_domain_')\n .replace(REGEX_CAPTURE_DEV_WIX_CODE_DOMAIN, '*.dev.wix-code.com');\n}\n\n// hosts which standard string replacing doesn't apply to them, will be fixed here.\nfunction fixHostExceptions(host: string) {\n // https://system-kb.wixanswers.com/kb/en/article/editorx-domains-matching-to-wixcom\n return host.replace('create.editorx.com', 'editor.editorx.com');\n}\n\nfunction resolveMappingsByDomain(\n domain: string,\n domainToMappings: DomainToMappings,\n) {\n const mappings = domainToMappings[domain];\n\n if (mappings) {\n return mappings;\n }\n\n const rootDomainMappings = resolveRootDomain(domain, domainToMappings);\n\n if (!rootDomainMappings) {\n const userMappings = domainToMappings[USER_DOMAIN];\n\n if (userMappings) {\n return userMappings;\n }\n if (isBaseDomain(domain)) {\n // fallback <lang>.wix.com sub domains to www.wix.com\n // since all of the languages subdomain are not mapped automatically in FP and we want to support those kind of calls\n // for example: fr.wix.com\n return domainToMappings[wwwBaseDomain];\n }\n }\n\n return rootDomainMappings ?? [];\n}\n\nfunction resolveRootDomain(domain: string, domainToMappings: DomainToMappings) {\n return Object.entries(domainToMappings).find(([entryDomain]) => {\n const [_, ...rooDomainSegments] = domain.split('.');\n return rooDomainSegments.join('.') === entryDomain;\n })?.[1];\n}\nfunction resolvePath(protoPath: string, mappings: Mapping[]) {\n const mapping = mappings?.find((m) => protoPath.startsWith(m.destPath));\n\n if (!mapping) {\n // todo: should we return the path? if no - what should we do in case of testings?\n return protoPath;\n }\n\n return mapping.srcPath + protoPath.slice(mapping.destPath.length);\n}\n\ntype Mapping = {\n srcPath: string;\n destPath: string;\n};\n\ntype DomainToMappings = Record<string, Mapping[]>;\n\nfunction isBaseDomain(domain: string) {\n return !!domain.match(/\\._base_domain_$/);\n}\n\nconst wwwBaseDomain = 'www._base_domain_';\n", "/**\n * base64.ts\n *\n * Licensed under the BSD 3-Clause License.\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * References:\n * http://en.wikipedia.org/wiki/Base64\n *\n * @author Dan Kogai (https://github.com/dankogai)\n */\nconst version = '3.7.8';\n/**\n * @deprecated use lowercase `version`.\n */\nconst VERSION = version;\nconst _hasBuffer = typeof Buffer === 'function';\nconst _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined;\nconst _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;\nconst b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nconst b64chs = Array.prototype.slice.call(b64ch);\nconst b64tab = ((a) => {\n let tab = {};\n a.forEach((c, i) => tab[c] = i);\n return tab;\n})(b64chs);\nconst b64re = /^(?:[A-Za-z\\d+\\/]{4})*?(?:[A-Za-z\\d+\\/]{2}(?:==)?|[A-Za-z\\d+\\/]{3}=?)?$/;\nconst _fromCC = String.fromCharCode.bind(String);\nconst _U8Afrom = typeof Uint8Array.from === 'function'\n ? Uint8Array.from.bind(Uint8Array)\n : (it) => new Uint8Array(Array.prototype.slice.call(it, 0));\nconst _mkUriSafe = (src) => src\n .replace(/=/g, '').replace(/[+\\/]/g, (m0) => m0 == '+' ? '-' : '_');\nconst _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\n/**\n * polyfill version of `btoa`\n */\nconst btoaPolyfill = (bin) => {\n // console.log('polyfilled');\n let u32, c0, c1, c2, asc = '';\n const pad = bin.length % 3;\n for (let i = 0; i < bin.length;) {\n if ((c0 = bin.charCodeAt(i++)) > 255 ||\n (c1 = bin.charCodeAt(i++)) > 255 ||\n (c2 = bin.charCodeAt(i++)) > 255)\n throw new TypeError('invalid character found');\n u32 = (c0 << 16) | (c1 << 8) | c2;\n asc += b64chs[u32 >> 18 & 63]\n + b64chs[u32 >> 12 & 63]\n + b64chs[u32 >> 6 & 63]\n + b64chs[u32 & 63];\n }\n return pad ? asc.slice(0, pad - 3) + \"===\".substring(pad) : asc;\n};\n/**\n * does what `window.btoa` of web browsers do.\n * @param {String} bin binary string\n * @returns {string} Base64-encoded string\n */\nconst _btoa = typeof btoa === 'function' ? (bin) => btoa(bin)\n : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64')\n : btoaPolyfill;\nconst _fromUint8Array = _hasBuffer\n ? (u8a) => Buffer.from(u8a).toString('base64')\n : (u8a) => {\n // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326\n const maxargs = 0x1000;\n let strs = [];\n for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));\n }\n return _btoa(strs.join(''));\n };\n/**\n * converts a Uint8Array to a Base64 string.\n * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 \u00A75\n * @returns {string} Base64 string\n */\nconst fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const utob = (src: string) => unescape(encodeURIComponent(src));\n// reverting good old fationed regexp\nconst cb_utob = (c) => {\n if (c.length < 2) {\n var cc = c.charCodeAt(0);\n return cc < 0x80 ? c\n : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))\n + _fromCC(0x80 | (cc & 0x3f)))\n : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n else {\n var cc = 0x10000\n + (c.charCodeAt(0) - 0xD800) * 0x400\n + (c.charCodeAt(1) - 0xDC00);\n return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))\n + _fromCC(0x80 | ((cc >>> 12) & 0x3f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n};\nconst re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-8 string\n * @returns {string} UTF-16 string\n */\nconst utob = (u) => u.replace(re_utob, cb_utob);\n//\nconst _encode = _hasBuffer\n ? (s) => Buffer.from(s, 'utf8').toString('base64')\n : _TE\n ? (s) => _fromUint8Array(_TE.encode(s))\n : (s) => _btoa(utob(s));\n/**\n * converts a UTF-8-encoded string to a Base64 string.\n * @param {boolean} [urlsafe] if `true` make the result URL-safe\n * @returns {string} Base64 string\n */\nconst encode = (src, urlsafe = false) => urlsafe\n ? _mkUriSafe(_encode(src))\n : _encode(src);\n/**\n * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 \u00A75.\n * @returns {string} Base64 string\n */\nconst encodeURI = (src) => encode(src, true);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const btou = (src: string) => decodeURIComponent(escape(src));\n// reverting good old fationed regexp\nconst re_btou = /[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}/g;\nconst cb_btou = (cccc) => {\n switch (cccc.length) {\n case 4:\n var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n | ((0x3f & cccc.charCodeAt(1)) << 12)\n | ((0x3f & cccc.charCodeAt(2)) << 6)\n | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000;\n return (_fromCC((offset >>> 10) + 0xD800)\n + _fromCC((offset & 0x3FF) + 0xDC00));\n case 3:\n return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12)\n | ((0x3f & cccc.charCodeAt(1)) << 6)\n | (0x3f & cccc.charCodeAt(2)));\n default:\n return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6)\n | (0x3f & cccc.charCodeAt(1)));\n }\n};\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-16 string\n * @returns {string} UTF-8 string\n */\nconst btou = (b) => b.replace(re_btou, cb_btou);\n/**\n * polyfill version of `atob`\n */\nconst atobPolyfill = (asc) => {\n // console.log('polyfilled');\n asc = asc.replace(/\\s+/g, '');\n if (!b64re.test(asc))\n throw new TypeError('malformed base64.');\n asc += '=='.slice(2 - (asc.length & 3));\n let u24, r1, r2;\n let binArray = []; // use array to avoid minor gc in loop\n for (let i = 0; i < asc.length;) {\n u24 = b64tab[asc.charAt(i++)] << 18\n | b64tab[asc.charAt(i++)] << 12\n | (r1 = b64tab[asc.charAt(i++)]) << 6\n | (r2 = b64tab[asc.charAt(i++)]);\n if (r1 === 64) {\n binArray.push(_fromCC(u24 >> 16 & 255));\n }\n else if (r2 === 64) {\n binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255));\n }\n else {\n binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255));\n }\n }\n return binArray.join('');\n};\n/**\n * does what `window.atob` of web browsers do.\n * @param {String} asc Base64-encoded string\n * @returns {string} binary string\n */\nconst _atob = typeof atob === 'function' ? (asc) => atob(_tidyB64(asc))\n : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary')\n : atobPolyfill;\n//\nconst _toUint8Array = _hasBuffer\n ? (a) => _U8Afrom(Buffer.from(a, 'base64'))\n : (a) => _U8Afrom(_atob(a).split('').map(c => c.charCodeAt(0)));\n/**\n * converts a Base64 string to a Uint8Array.\n */\nconst toUint8Array = (a) => _toUint8Array(_unURI(a));\n//\nconst _decode = _hasBuffer\n ? (a) => Buffer.from(a, 'base64').toString('utf8')\n : _TD\n ? (a) => _TD.decode(_toUint8Array(a))\n : (a) => btou(_atob(a));\nconst _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/'));\n/**\n * converts a Base64 string to a UTF-8 string.\n * @param {String} src Base64 string. Both normal and URL-safe are supported\n * @returns {string} UTF-8 string\n */\nconst decode = (src) => _decode(_unURI(src));\n/**\n * check if a value is a valid Base64 string\n * @param {String} src a value to check\n */\nconst isValid = (src) => {\n if (typeof src !== 'string')\n return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n};\n//\nconst _noEnum = (v) => {\n return {\n value: v, enumerable: false, writable: true, configurable: true\n };\n};\n/**\n * extend String.prototype with relevant methods\n */\nconst extendString = function () {\n const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));\n _add('fromBase64', function () { return decode(this); });\n _add('toBase64', function (urlsafe) { return encode(this, urlsafe); });\n _add('toBase64URI', function () { return encode(this, true); });\n _add('toBase64URL', function () { return encode(this, true); });\n _add('toUint8Array', function () { return toUint8Array(this); });\n};\n/**\n * extend Uint8Array.prototype with relevant methods\n */\nconst extendUint8Array = function () {\n const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));\n _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); });\n _add('toBase64URI', function () { return fromUint8Array(this, true); });\n _add('toBase64URL', function () { return fromUint8Array(this, true); });\n};\n/**\n * extend Builtin prototypes with relevant methods\n */\nconst extendBuiltins = () => {\n extendString();\n extendUint8Array();\n};\nconst gBase64 = {\n version: version,\n VERSION: VERSION,\n atob: _atob,\n atobPolyfill: atobPolyfill,\n btoa: _btoa,\n btoaPolyfill: btoaPolyfill,\n fromBase64: decode,\n toBase64: encode,\n encode: encode,\n encodeURI: encodeURI,\n encodeURL: encodeURI,\n utob: utob,\n btou: btou,\n decode: decode,\n isValid: isValid,\n fromUint8Array: fromUint8Array,\n toUint8Array: toUint8Array,\n extendString: extendString,\n extendUint8Array: extendUint8Array,\n extendBuiltins: extendBuiltins\n};\n// makecjs:CUT //\nexport { version };\nexport { VERSION };\nexport { _atob as atob };\nexport { atobPolyfill };\nexport { _btoa as btoa };\nexport { btoaPolyfill };\nexport { decode as fromBase64 };\nexport { encode as toBase64 };\nexport { utob };\nexport { encode };\nexport { encodeURI };\nexport { encodeURI as encodeURL };\nexport { btou };\nexport { decode };\nexport { isValid };\nexport { fromUint8Array };\nexport { toUint8Array };\nexport { extendString };\nexport { extendUint8Array };\nexport { extendBuiltins };\n// and finally,\nexport { gBase64 as Base64 };\n", "import { encode } from 'js-base64';\n\n// Flatten a nested object to params object { field: { text: 'foo' } } => { field.text ='foo' }\nfunction flattenParams(data: object, path = ''): object {\n const params: any = {};\n\n Object.entries(data).forEach(([key, value]) => {\n const isObject =\n value !== null && typeof value === 'object' && !Array.isArray(value);\n const fieldPath = resolvePath(path, key);\n\n if (isObject) {\n const serializedObject = flattenParams(value, fieldPath);\n Object.assign(params, serializedObject);\n } else {\n params[fieldPath] = value;\n }\n });\n\n return params;\n}\n\nfunction resolvePath(path: string, key: string) {\n return `${path}${path ? '.' : ''}${key}`;\n}\n\n/**\n * serializes the params object to URLSearchParams,\n * if isComplexRequest is true and the payload is not serializable as regular URLSearchParams (because of nested fields),\n * it will serialize the payload into the .r query param exclusively\n * @param params\n * @param isComplexRequest\n * @returns\n */\nexport function toURLSearchParams(params: object, isComplexRequest?: boolean) {\n const flatten = flattenParams(params);\n\n // payloads with deep arrays or complex arrays are not serializable as URLSearchParams\n const isPayloadNonSerializableAsUrlSearchParams = Object.entries(\n flatten,\n ).some(\n ([key, value]) =>\n key.includes('.') ||\n (Array.isArray(value) && value.some((v) => typeof v === 'object')),\n );\n const shouldSerializeToRParam =\n isComplexRequest && isPayloadNonSerializableAsUrlSearchParams;\n\n if (shouldSerializeToRParam) {\n return new URLSearchParams({ '.r': encode(JSON.stringify(params), true) });\n } else {\n return Object.entries(flatten).reduce((urlSearchParams, [key, value]) => {\n // inorder to make `foo: [1,2]` turn into `foo=1&foo=2` and not `foo[]=1&foo[]=2`\n const keyParams = Array.isArray(value) ? value : [value];\n\n keyParams.forEach((param: any) => {\n if (\n param === undefined ||\n param === null ||\n (Array.isArray(value) && typeof param === 'object')\n ) {\n return;\n }\n\n urlSearchParams.append(key, param);\n });\n\n return urlSearchParams;\n }, new URLSearchParams());\n }\n}\n", "export enum ConverterType {\n TO_JSON,\n FROM_JSON,\n}\n\nexport type Payload = any;\n\nexport type Converter = {\n transform: (val: any) => any;\n checkRepetable?: (val: any) => boolean;\n};\n\nexport type ConverterSet = {\n types: string[];\n [ConverterType.FROM_JSON]: Converter;\n [ConverterType.TO_JSON]: Converter;\n};\n\nexport type TypeToConverterSet = Record<string, ConverterSet>;\n", "import type {\n RenderedLeanSchemaFields,\n RenderedLeanSchema,\n} from '@wix/metro-public-utils';\nimport { parseLeanSchemaRef } from '../index.js';\nimport { ConverterType, Payload, TypeToConverterSet } from './domain.js';\n\nexport function schemaSerializer(\n rootSchema: RenderedLeanSchemaFields,\n depSchemas: RenderedLeanSchema = {},\n converterSets: TypeToConverterSet,\n) {\n return function serialize(\n json: Payload = {},\n converterType: ConverterType,\n ): Payload {\n return typeof json === 'string' ? json : transformSchema(rootSchema, json);\n\n function transformSchema(\n schema: RenderedLeanSchemaFields,\n payload: any,\n ): Payload {\n const result = {} as Payload;\n if ([null, undefined].includes(payload)) {\n return payload;\n }\n\n Object.entries(payload).forEach(([key, val]) => {\n const renderedSchemaName = schema[key];\n const { schemaName, schemaType } =\n parseLeanSchemaRef(renderedSchemaName);\n\n const isMap = schemaType === 'Map';\n const isRepeatable =\n getConverter(schemaName)?.checkRepetable?.(val) ?? Array.isArray(val);\n\n let parsedValue;\n\n if (isRepeatable) {\n parsedValue = (val as any[]).map((v) => applyField(v, schemaName));\n } else if (isMap) {\n parsedValue = applyFieldOnMap(val, schemaName);\n } else {\n parsedValue = applyField(val, schemaName);\n }\n\n result[key] = parsedValue;\n });\n\n return result;\n }\n\n function applyField(val: unknown, schemaOrSerializer?: string) {\n if (!schemaOrSerializer) {\n return val;\n }\n\n const maybeSchema = depSchemas[schemaOrSerializer];\n const maybeConverter = getConverter(schemaOrSerializer);\n\n if (maybeConverter) {\n return getConverter(schemaOrSerializer).transform(val);\n } else if (maybeSchema) {\n return transformSchema(maybeSchema, val);\n }\n\n throw new Error(\n `${schemaOrSerializer} is neither schema nor serializable type`,\n );\n }\n\n function getConverter(name: string) {\n return converterSets[name]?.[converterType];\n }\n\n function applyFieldOnMap(val: any, sanitizedSchemaOrSerializer: string) {\n return Object.entries(val).reduce<Record<string, any>>(\n (acc, [propertyName, value]) => {\n acc[propertyName] = applyField(value, sanitizedSchemaOrSerializer);\n return acc;\n },\n {},\n );\n }\n };\n}\n", "import { ConverterSet, ConverterType } from '../domain.js';\n\nexport const timestamp: ConverterSet = {\n types: ['google.protobuf.Timestamp'],\n\n [ConverterType.TO_JSON]: {\n transform: (val: Date | string) => {\n if (typeof val === 'string' || !val) {\n return val;\n }\n return val.toISOString();\n },\n },\n\n [ConverterType.FROM_JSON]: {\n transform: (val: string) => (val ? new Date(val) : val),\n },\n};\n", "import { ConverterSet, ConverterType } from '../domain.js';\n\nexport const fieldMask: ConverterSet = {\n types: ['google.protobuf.FieldMask'],\n\n [ConverterType.TO_JSON]: {\n transform: (val: string[]) => val.join(','),\n\n /**\n * This one handles cases where we have a repeated google.protobuf.FieldMask type,\n * so it will look like: [['foo', 'bar'], ['qux']].\n *\n * The problem is that the serializer detects it as an array with actual fields (strings),\n * while in practice it is an array of multiple google.protobuf.FieldMask.\n *\n * We should determine if the items are actual fields (so each item is a string),\n * or arrays of google.protobuf.FieldMask (so each item is array that has items with fields).\n *\n * Another approach could be marking on the schama itseld each field if it's a repeatable or not,\n * it's not a good appraoch, but as long as google.protobuf.FieldMask is our only issue, it's\n * not _that_ bad solution.\n */\n checkRepetable: (val: string[] | string[][]) => {\n return val.some((v: string | string[]) => Array.isArray(v));\n },\n },\n\n [ConverterType.FROM_JSON]: {\n transform: (val: string | { paths: string[] }) => {\n /**\n * Support Scala FW JSON mapping bug, for more details see:\n *\n * https://github.com/wix-private/server-infra/issues/17953\n */\n if (typeof val === 'object') {\n return val.paths;\n }\n\n return val.split(',');\n },\n },\n};\n", "import { ConverterSet, ConverterType } from '../domain.js';\n\nexport const bytes: ConverterSet = {\n types: ['google.protobuf.BytesValue', 'BYTES'],\n\n [ConverterType.TO_JSON]: {\n transform: (val: number[]) => {\n const chars = val.reduce((res, c) => res + String.fromCharCode(c), '');\n\n return btoa(chars);\n },\n },\n\n [ConverterType.FROM_JSON]: {\n transform: (val: string) => {\n return Uint8Array.from(atob(val), (c) => c.charCodeAt(0));\n },\n },\n};\n", "import { ConverterSet, ConverterType } from '../domain.js';\nimport { GoogleProtoDuration } from './types.js';\n\nexport const duration: ConverterSet = {\n types: ['google.protobuf.Duration'],\n\n [ConverterType.TO_JSON]: {\n transform: ({ seconds = '0', nanos = 0 }: GoogleProtoDuration) => {\n let nanosPortion = '';\n\n if (nanos !== 0) {\n nanosPortion = `.${nanos.toString().padStart(9, '0')}`;\n }\n\n return `${seconds}${nanosPortion}s`;\n },\n },\n\n [ConverterType.FROM_JSON]: {\n transform: (val: string): GoogleProtoDuration => {\n const [seconds, nanos] = val.substring(0, val.length - 1).split('.');\n\n return {\n seconds,\n nanos: nanosForString(nanos),\n };\n },\n },\n};\n\nfunction nanosForString(nanos: string) {\n let res = 0;\n\n if (nanos !== undefined) {\n const precision = 3 - nanos.length / 3;\n res = parseInt(nanos, 10) * Math.pow(1000, precision);\n }\n\n return res;\n}\n", "import { ConverterSet, ConverterType } from '../domain.js';\n\nexport const float: ConverterSet = {\n types: [\n 'FLOAT',\n 'DOUBLE',\n 'google.protobuf.FloatValue',\n 'google.protobuf.DoubleValue',\n ],\n\n [ConverterType.TO_JSON]: {\n transform: (val: number) => {\n return isFinite(val) ? val : val.toString();\n },\n },\n\n [ConverterType.FROM_JSON]: {\n transform: (val: string | number) => {\n if (val === 'NaN') {\n return NaN;\n }\n\n if (val === 'Infinity') {\n return Infinity;\n }\n\n if (val === '-Infinity') {\n return -Infinity;\n }\n\n return val;\n },\n },\n};\n", "import { ConverterSet } from '../domain.js';\nimport { timestamp } from './timestamp.js';\nimport { fieldMask } from './field-mask.js';\nimport { bytes } from './bytes.js';\nimport { duration } from './duration.js';\nimport { float } from './float.js';\n\nexport const protobufConverters: ConverterSet[] = [\n timestamp,\n fieldMask,\n bytes,\n duration,\n float,\n];\n", "import { TypeToConverterSet, ConverterSet } from './domain.js';\n\nexport function typeToConverterSet(\n converterSets: ConverterSet[],\n): TypeToConverterSet {\n return converterSets.reduce((result, converterSet) => {\n const types = converterSet.types.reduce((typeResult, type) => {\n return {\n ...typeResult,\n [type]: converterSet,\n };\n }, {} as TypeToConverterSet);\n\n return {\n ...result,\n ...types,\n };\n }, {} as TypeToConverterSet);\n}\n", "import type {\n RenderedLeanSchema,\n RenderedLeanSchemaFields,\n} from '@wix/metro-public-utils';\nimport { ConverterType, Payload } from './serializer/domain.js';\nimport { schemaSerializer } from './serializer/serializer.js';\nimport { protobufConverters } from './serializer/protobuf-converters/converters.js';\nimport { typeToConverterSet } from './serializer/utils.js';\n\nconst ambassadorConverters = typeToConverterSet([...protobufConverters]);\n\nexport type { GoogleProtoDuration } from './serializer/protobuf-converters/types.js';\n\nexport function serializer<T>(\n rootSchema: RenderedLeanSchemaFields,\n depSchemas: RenderedLeanSchema = {},\n) {\n const transform = schemaSerializer(\n rootSchema,\n depSchemas,\n ambassadorConverters,\n );\n\n return {\n fromJSON(jsonOrString: Payload | string): T {\n const jsonOrText = safeJsonParse(jsonOrString) || jsonOrString;\n return transform(jsonOrText, ConverterType.FROM_JSON) as T;\n },\n\n toJSON(json: T) {\n return transform(json, ConverterType.TO_JSON) as Payload;\n },\n };\n}\n\nfunction safeJsonParse(someString: string): any {\n try {\n return JSON.parse(someString);\n } catch (error) {}\n}\n", null, null, null, null, null, null, "/**\n * Domain \u2194 ambassador wire-type converters. This module owns the proto\u2194domain\n * boundary for the evaluator: every assumption about how ambassador payloads\n * map onto `@wix/evalforge-types` lives here, in both directions.\n *\n * Write side (domain \u2192 wire, for `AddEvalRunResult` / `PushTraceEvent`)\n * mirrors, in reverse, the backend's proto \u2192 domain converters in\n * `packages/eval-backend/src/grpc/converter.ts`:\n * - enum values gain their proto prefix and are uppercased\n * (`'tool_use'` \u2192 `'LLM_STEP_TYPE_TOOL_USE'`),\n * - ISO timestamp strings become `Date` objects (the ambassador serializer\n * handles `google.protobuf.Timestamp` fields as `Date`),\n * - domain field names map onto their proto counterparts\n * (`isError` \u2192 `errored`, `isInfrastructure` \u2192 `infrastructure`,\n * `isComplete` \u2192 `complete`, flat conversation blocks \u2192 proto oneof).\n *\n * Read side (wire \u2192 domain, for the GET calls) normalizes what the backend's\n * `*ToProto` response converters produced:\n * - enum values lose their proto prefix (when present) and are lowercased\n * back to the domain values (`'SDK'` \u2192 `'sdk'`, `'CLAUDE'` \u2192 `'claude'`),\n * with `*_UNSPECIFIED` sentinels mapped to `undefined`,\n * - `Date` objects become the ISO strings domain timestamps are typed as,\n * - wire-renamed structures fold back onto their domain fields\n * (`Template.uploadedSource.files` \u2192 `sourceFiles`, the\n * `CapabilityVersion` content oneof \u2192 flat `content`).\n */\n\nimport type {\n AssertionResult as WireAssertionResult,\n AssertionResultStatus as WireAssertionResultStatus,\n ConversationBlock as WireConversationBlock,\n ConversationMessage as WireConversationMessage,\n ConversationMessageRole as WireConversationMessageRole,\n DiffContent as WireDiffContent,\n DiffLine as WireDiffLine,\n DiffLineType as WireDiffLineType,\n EvalRunResult as WireEvalRunResult,\n LiveTraceEvent as WireLiveTraceEvent,\n LiveTraceEventType as WireLiveTraceEventType,\n LLMStepType as WireLLMStepType,\n LLMTrace as WireLLMTrace,\n LLMTraceStep as WireLLMTraceStep,\n TemplateFile as WireTemplateFile,\n TemplateFileStatus as WireTemplateFileStatus,\n EvalRun as WireEvalRun\n} from '@wix/ambassador-evalforge-v1-eval-run/types';\nimport type { Agent as WireAgent } from '@wix/ambassador-evalforge-v1-agent/types';\nimport type { TestScenario as WireTestScenario } from '@wix/ambassador-evalforge-v1-test-scenario/types';\nimport type { Template as WireTemplate } from '@wix/ambassador-evalforge-v1-project/types';\nimport type { Preset as WirePreset } from '@wix/ambassador-evalforge-v1-preset/types';\nimport type {\n Capability as WireCapability,\n CapabilityVersion as WireCapabilityVersion\n} from '@wix/ambassador-evalforge-v1-capability/types';\nimport type {\n Agent,\n AssertionResult,\n Capability,\n CapabilityVersion,\n ConversationBlock,\n ConversationMessage,\n DiffContent,\n DiffLine,\n EvalRun,\n EvalRunResult,\n GitHubSource,\n LiveTraceEvent,\n LLMTrace,\n LLMTraceStep,\n Preset,\n ScenarioAssertionLink,\n Template,\n TemplateFile,\n TestScenario,\n TriggerPromptImage\n} from '@wix/evalforge-types';\n\n/**\n * Proto enum values are `PREFIX_` + the uppercased domain value; the backend's\n * `stripEnumPrefix` strips the prefix and lowercases to get back to domain.\n */\nfunction toProtoEnum(prefix: string, value: string): string {\n return `${prefix}${value.toUpperCase()}`;\n}\n\n/** ISO timestamp string \u2192 `Date` for `google.protobuf.Timestamp` fields. */\nfunction toProtoDate(iso: string | undefined): Date | undefined {\n return iso ? new Date(iso) : undefined;\n}\n\n/**\n * Strip keys whose value is `undefined`. The ambassador serializer applies\n * per-field transforms (`DoubleValue`, `Timestamp`, \u2026) to every key present\n * on the payload \u2014 including explicitly-undefined ones, which crashes the\n * transform. Optional fields must be omitted, not set to `undefined`.\n */\nfunction omitUndefined<T extends object>(obj: T): T {\n return Object.fromEntries(\n Object.entries(obj).filter(([, value]) => value !== undefined)\n ) as T;\n}\n\nfunction llmTraceStepToProto(step: LLMTraceStep): WireLLMTraceStep {\n return omitUndefined({\n id: step.id,\n stepNumber: step.stepNumber,\n type: toProtoEnum('LLM_STEP_TYPE_', step.type) as WireLLMStepType,\n model: step.model,\n provider: step.provider,\n startedAt: toProtoDate(step.startedAt),\n durationMs: step.durationMs,\n tokenUsage: step.tokenUsage,\n costUsd: step.costUsd,\n toolName: step.toolName,\n toolArguments: step.toolArguments,\n inputPreview: step.inputPreview,\n outputPreview: step.outputPreview,\n success: step.success,\n error: step.error,\n turnIndex: step.turnIndex\n });\n}\n\nfunction llmTraceToProto(trace: LLMTrace): WireLLMTrace {\n return {\n id: trace.id,\n steps: trace.steps.map(llmTraceStepToProto),\n summary: omitUndefined(trace.summary)\n };\n}\n\nfunction assertionResultToProto(result: AssertionResult): WireAssertionResult {\n return omitUndefined({\n id: result.id,\n assertionId: result.assertionId,\n assertionType: result.assertionType,\n assertionName: result.assertionName,\n status: toProtoEnum(\n 'ASSERTION_RESULT_STATUS_',\n result.status\n ) as WireAssertionResultStatus,\n message: result.message,\n expected: result.expected,\n actual: result.actual,\n duration: result.duration,\n details: result.details,\n llmTraceSteps: result.llmTraceSteps?.map(llmTraceStepToProto)\n });\n}\n\nfunction diffLineToProto(line: DiffLine): WireDiffLine {\n return {\n type: toProtoEnum('DIFF_LINE_TYPE_', line.type) as WireDiffLineType,\n content: line.content,\n lineNumber: line.lineNumber\n };\n}\n\nfunction diffContentToProto(diff: DiffContent): WireDiffContent {\n return omitUndefined({\n path: diff.path,\n expected: diff.expected,\n actual: diff.actual,\n diffLines: diff.diffLines.map(diffLineToProto),\n renamedFrom: diff.renamedFrom,\n infrastructure: diff.isInfrastructure\n });\n}\n\nfunction templateFileToProto(file: TemplateFile): WireTemplateFile {\n return omitUndefined({\n path: file.path,\n content: file.content,\n status: toProtoEnum(\n 'TEMPLATE_FILE_STATUS_',\n file.status\n ) as WireTemplateFileStatus,\n infrastructure: file.isInfrastructure\n });\n}\n\n/** Domain blocks are flat (`{type, ...fields}`); proto uses a oneof per kind. */\nfunction conversationBlockToProto(\n block: ConversationBlock\n): WireConversationBlock {\n switch (block.type) {\n case 'text':\n return { text: { text: block.text } };\n case 'thinking':\n return { thinking: { thinking: block.thinking } };\n case 'tool_use':\n return {\n toolUse: omitUndefined({\n toolName: block.toolName,\n toolId: block.toolId,\n input: block.input\n })\n };\n case 'tool_result':\n return {\n toolResult: omitUndefined({\n toolUseId: block.toolUseId,\n content: block.content,\n errored: block.isError\n })\n };\n default:\n // Exhaustiveness guard: a new ConversationBlock variant fails the build\n // here rather than silently serializing an `undefined` hole into content.\n block satisfies never;\n throw new Error(\n `Unhandled conversation block type: ${(block as { type: string }).type}`\n );\n }\n}\n\nfunction conversationMessageToProto(\n message: ConversationMessage\n): WireConversationMessage {\n return {\n role: toProtoEnum(\n 'CONVERSATION_MESSAGE_ROLE_',\n message.role\n ) as WireConversationMessageRole,\n content: message.content.map(conversationBlockToProto),\n timestamp: toProtoDate(message.timestamp)\n };\n}\n\nexport function evalRunResultToProto(result: EvalRunResult): WireEvalRunResult {\n return omitUndefined({\n id: result.id,\n targetId: result.targetId,\n targetName: result.targetName,\n skillVersionId: result.skillVersionId,\n skillVersion: result.skillVersion,\n scenarioId: result.scenarioId,\n scenarioName: result.scenarioName,\n triggerPrompt: result.triggerPrompt,\n modelConfig: result.modelConfig\n ? omitUndefined(result.modelConfig)\n : undefined,\n assertionResults: result.assertionResults.map(assertionResultToProto),\n metrics: result.metrics,\n passed: result.passed,\n failed: result.failed,\n passRate: result.passRate,\n duration: result.duration,\n outputText: result.outputText,\n files: result.files?.map(omitUndefined),\n fileDiffs: result.fileDiffs?.map(diffContentToProto),\n templateFiles: result.templateFiles?.map(templateFileToProto),\n startedAt: toProtoDate(result.startedAt),\n completedAt: toProtoDate(result.completedAt),\n llmTrace: result.llmTrace ? llmTraceToProto(result.llmTrace) : undefined,\n conversation: result.conversation?.map(conversationMessageToProto),\n iterationIndex: result.iterationIndex\n });\n}\n\nexport function liveTraceEventToProto(\n event: LiveTraceEvent\n): WireLiveTraceEvent {\n return omitUndefined({\n evalRunId: event.evalRunId,\n scenarioId: event.scenarioId,\n scenarioName: event.scenarioName,\n targetId: event.targetId,\n targetName: event.targetName,\n stepNumber: event.stepNumber,\n type: toProtoEnum(\n 'LIVE_TRACE_EVENT_TYPE_',\n event.type\n ) as WireLiveTraceEventType,\n toolName: event.toolName,\n toolArgs: event.toolArgs,\n outputPreview: event.outputPreview,\n filePath: event.filePath,\n elapsedMs: event.elapsedMs,\n thinking: event.thinking,\n timestamp: toProtoDate(event.timestamp),\n complete: event.isComplete\n });\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Read side: wire \u2192 domain\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/** The wire carries `google.protobuf.Timestamp` fields as `Date`. */\nfunction fromProtoDate(\n value: Date | string | null | undefined\n): string | undefined {\n if (value == null) return undefined;\n return value instanceof Date ? value.toISOString() : value;\n}\n\n/**\n * Wire enum values are UPPER_CASE, optionally carrying the proto prefix\n * (`UNSPECIFIED` sentinels always do); domain enum values are lowercase.\n * `*_UNSPECIFIED` means \"not set\" and maps to `undefined`.\n */\nfunction fromProtoEnum(\n value: string | null | undefined,\n prefix: string\n): string | undefined {\n if (!value || value === `${prefix}UNSPECIFIED`) return undefined;\n return (\n value.startsWith(prefix) ? value.slice(prefix.length) : value\n ).toLowerCase();\n}\n\n/**\n * Like `fromProtoEnum` but throws on a missing/`*_UNSPECIFIED` value instead\n * of silently defaulting. Use for required fields where a wrong default would\n * mask a malformed entity and change behavior \u2014 e.g. `agentType` forks\n * SDK-vs-CLI execution. `UNSPECIFIED` should never arrive for a real entity\n * the evaluator is processing, so failing loud beats a silent fallback.\n */\nfunction requireProtoEnum(\n value: string | null | undefined,\n prefix: string,\n field: string\n): string {\n const mapped = fromProtoEnum(value, prefix);\n if (mapped === undefined) {\n throw new Error(\n `Unexpected ${field}: wire value ${JSON.stringify(value)} is missing or UNSPECIFIED`\n );\n }\n return mapped;\n}\n\n/**\n * The wire `GitHubSource` types every field optional; the domain requires all\n * four (each `.min(1)`). The backend populates them whenever `source` is\n * present, so default to '' and return `undefined` when there is no source.\n * Structural param type avoids importing three package-specific wire types.\n */\nfunction gitHubSourceFromProto(\n source:\n | {\n owner?: string | null;\n repo?: string | null;\n path?: string | null;\n ref?: string | null;\n }\n | null\n | undefined\n): GitHubSource | undefined {\n if (!source) return undefined;\n return {\n owner: source.owner ?? '',\n repo: source.repo ?? '',\n path: source.path ?? '',\n ref: source.ref ?? ''\n };\n}\n\nexport function agentFromProto(wire: WireAgent): Agent {\n return {\n id: wire.id ?? '',\n projectId: wire.projectId ?? '',\n name: wire.name ?? '',\n description: wire.description ?? '',\n agentType: requireProtoEnum(\n wire.agentType,\n 'AGENT_TYPE_',\n 'agentType'\n ) as Agent['agentType'],\n runCommand: fromProtoEnum(\n wire.runCommand,\n 'AGENT_RUN_COMMAND_'\n ) as Agent['runCommand'],\n // No `modelConfig` on the wire: the backend's lazy migration folds it\n // into the `config` bag before serving (agent.repository.ts), so the\n // proto intentionally never carries the deprecated field.\n //\n // Preserve `systemPrompt` exactly, including `null`. The field is a\n // three-state contract (see Agent.systemPrompt JSDoc and the SDK adapters):\n // `undefined` = inject default evaluator prompt, `null` = raw agent (no\n // injection), string = append. Collapsing `null` \u2192 `undefined` would\n // silently flip a raw-mode agent to the default prompt. NOTE: the backend\n // `agentToProto` currently strips `null` before it reaches the wire\n // (converter.ts), so end-to-end null-preservation still needs a backend\n // proto change (StringValue wrapper or a systemPromptMode enum); this side\n // is correct and forward-compatible for when that lands.\n systemPrompt: wire.systemPrompt,\n config: wire.config ?? undefined,\n createdAt: fromProtoDate(wire.createdAt) ?? '',\n updatedAt: fromProtoDate(wire.updatedAt) ?? ''\n };\n}\n\nconst EMPTY_AGGREGATE_METRICS: EvalRun['aggregateMetrics'] = {\n totalAssertions: 0,\n passed: 0,\n failed: 0,\n skipped: 0,\n errors: 0,\n passRate: 0,\n avgDuration: 0,\n totalDuration: 0\n};\n\n/**\n * The wire `EvalRun` is a lean projection: it does not carry `results`,\n * `aggregateMetrics`, job fields, or trace data. The evaluator never consumes\n * those (it only reads run configuration \u2014 scenario/capability/agent IDs,\n * variables, runsPerScenario), so the required domain fields get empty\n * defaults.\n */\nexport function evalRunFromProto(wire: WireEvalRun): EvalRun {\n return {\n id: wire.id ?? '',\n projectId: wire.projectId ?? '',\n name: wire.name ?? '',\n description: wire.description ?? '',\n agentId: wire.agentId ?? undefined,\n presetId: wire.presetId ?? undefined,\n scenarioIds: wire.scenarioIds ?? [],\n status: requireProtoEnum(\n wire.status,\n 'EVAL_STATUS_',\n 'eval run status'\n ) as EvalRun['status'],\n progress: wire.progress ?? 0,\n results: [],\n aggregateMetrics: { ...EMPTY_AGGREGATE_METRICS },\n capabilityIds: wire.capabilityIds,\n capabilityVersions: wire.capabilityVersions,\n tags: wire.tags,\n runsPerScenario: wire.runsPerScenario ?? undefined,\n variables: wire.variables,\n comparisonGroupId: wire.comparisonGroupId ?? undefined,\n comparisonLabel: wire.comparisonLabel ?? undefined,\n folderIds: wire.folderIds,\n scheduleId: wire.scheduleId ?? undefined,\n startedAt: fromProtoDate(wire.startedAt),\n completedAt: fromProtoDate(wire.completedAt),\n createdAt: fromProtoDate(wire.createdAt) ?? '',\n updatedAt: fromProtoDate(wire.updatedAt) ?? ''\n };\n}\n\n/**\n * Note: the proto `TestScenario` does not carry the legacy inline\n * `assertions` / `assertionIds` fields \u2014 only `assertionLinks`. Scenarios\n * still relying on inline assertions lose them over the gRPC read path.\n */\nexport function testScenarioFromProto(wire: WireTestScenario): TestScenario {\n return {\n id: wire.id ?? '',\n projectId: wire.projectId ?? '',\n name: wire.name ?? '',\n description: wire.description ?? '',\n triggerPrompt: wire.triggerPrompt ?? '',\n templateId: wire.templateId ?? undefined,\n // Explicit per-element map (wire params is optional/`any`) rather than a\n // blanket cast, so a future wire/domain divergence surfaces here instead\n // of feeding a wrong shape into assertion resolution silently.\n assertionLinks: wire.assertionLinks?.map(\n (link): ScenarioAssertionLink => ({\n assertionId: link.assertionId ?? '',\n params: (link.params ?? undefined) as ScenarioAssertionLink['params']\n })\n ),\n tags: wire.tags,\n // Wire image fields are all optional; the domain requires base64/name and a\n // strict mediaType enum. Default the strings and cast mediaType (no clean\n // runtime validator here) \u2014 the value feeds Anthropic image blocks\n // downstream, so an explicit map beats a blanket array cast.\n triggerPromptImages: wire.triggerPromptImages?.map(\n (img): TriggerPromptImage => ({\n base64: img.base64 ?? '',\n mediaType: img.mediaType as TriggerPromptImage['mediaType'],\n name: img.name ?? ''\n })\n ),\n createdAt: fromProtoDate(wire.createdAt) ?? '',\n updatedAt: fromProtoDate(wire.updatedAt) ?? ''\n };\n}\n\n/** The wire nests uploaded files under a `uploadedSource` oneof branch. */\nexport function templateFromProto(wire: WireTemplate): Template {\n return {\n id: wire.id ?? '',\n projectId: wire.projectId ?? '',\n name: wire.name ?? '',\n description: wire.description ?? '',\n source: gitHubSourceFromProto(wire.source),\n sourceFiles: wire.uploadedSource?.files as Template['sourceFiles'],\n extraFiles: wire.extraFiles as Template['extraFiles'],\n createdAt: fromProtoDate(wire.createdAt) ?? '',\n updatedAt: fromProtoDate(wire.updatedAt) ?? ''\n };\n}\n\nexport function presetFromProto(wire: WirePreset): Preset {\n return {\n id: wire.id ?? '',\n projectId: wire.projectId ?? '',\n name: wire.name ?? '',\n description: wire.description ?? '',\n agentId: wire.agentId ?? '',\n capabilityIds: wire.capabilityIds,\n capabilityVersions: wire.capabilityVersions,\n createdAt: fromProtoDate(wire.createdAt) ?? '',\n updatedAt: fromProtoDate(wire.updatedAt) ?? ''\n };\n}\n\n/**\n * Wire `CapabilityType` values are already the bare domain values\n * (`SKILL` / `SUB_AGENT` / `RULE` / `MCP`); only the `UNSPECIFIED`\n * sentinel carries the proto prefix. Guard it to `undefined` for parity with\n * the `fromProtoEnum` callers, so a malformed/future `UNSPECIFIED` can't pass\n * through as a \"valid\" capabilityType.\n */\nexport function capabilityFromProto(wire: WireCapability): Capability {\n const capabilityType =\n !wire.capabilityType ||\n wire.capabilityType === 'CAPABILITY_TYPE_UNSPECIFIED'\n ? undefined\n : (wire.capabilityType as Capability['capabilityType']);\n return {\n id: wire.id ?? '',\n projectId: wire.projectId ?? '',\n name: wire.name ?? '',\n description: wire.description ?? '',\n capabilityType: capabilityType as Capability['capabilityType'],\n source: gitHubSourceFromProto(wire.source),\n createdAt: fromProtoDate(wire.createdAt) ?? '',\n updatedAt: fromProtoDate(wire.updatedAt) ?? ''\n };\n}\n\n/**\n * The wire splits `content` into a per-type oneof\n * (`skillContent` / `subAgentContent` / `ruleContent` / `mcpContent` /\n * `pluginContent`); the domain keeps a single `content` field discriminated\n * by the parent capability's `capabilityType`.\n */\nexport function capabilityVersionFromProto(\n wire: WireCapabilityVersion,\n // Not carried on the wire \u2014 supplied by the caller, which always knows it.\n projectId: string\n): CapabilityVersion {\n const content =\n wire.skillContent ??\n wire.subAgentContent ??\n wire.ruleContent ??\n wire.mcpContent ??\n wire.pluginContent;\n return {\n id: wire.id ?? '',\n projectId,\n capabilityId: wire.capabilityId ?? '',\n version: wire.version ?? '',\n origin: (wire.origin ?? 'manual') as CapabilityVersion['origin'],\n source: gitHubSourceFromProto(wire.source),\n content: content as CapabilityVersion['content'],\n notes: wire.notes ?? undefined,\n createdAt: fromProtoDate(wire.createdAt) ?? ''\n };\n}\n", "import type {\n EvalRun,\n TestScenario,\n SkillWithLatestVersion,\n Agent,\n Template,\n Assertion,\n MCPEntity,\n SubAgent,\n Rule,\n CapabilityWithLatestVersion\n} from '@wix/evalforge-types';\n\nimport {\n isSystemAssertionId,\n SYSTEM_ASSERTIONS,\n type SystemAssertionId,\n isAllowedBuildCommandString,\n type AllowedBuildCommandString,\n capabilityToSkillWithLatestVersion,\n capabilityToSubAgent,\n capabilityToRule,\n capabilityToMcp\n} from '@wix/evalforge-types';\nimport type { ApiClient } from './api-client.js';\nimport { resolvePlaceholdersInString } from './resolve-placeholders.js';\n\n/**\n * Parse skillNames from a JSON array string stored in assertion params.\n * Params only hold primitives, so the frontend serialises the string[]\n * into a JSON string like '[\"SkillA\",\"SkillB\"]'.\n */\nexport function parseSkillNamesFromParams(value: unknown): string[] {\n if (typeof value !== 'string') {\n return [];\n }\n const parsed: unknown = JSON.parse(value);\n if (Array.isArray(parsed)) {\n return parsed.map(String);\n }\n return [];\n}\n\n/**\n * Apply parameter values to an assertion.\n * Replaces placeholder values with actual params from the scenario link.\n */\nexport function applyParamsToAssertion(\n assertion: Assertion,\n params?: Record<string, unknown>\n): Assertion {\n if (!params || Object.keys(params).length === 0) {\n return assertion;\n }\n\n // For llm_judge, replace {{param}} placeholders and apply config overrides\n if (assertion.type === 'llm_judge') {\n const stringParams: Record<string, string> = {};\n for (const [key, value] of Object.entries(params)) {\n stringParams[key] = String(value ?? '');\n }\n const prompt = resolvePlaceholdersInString(assertion.prompt, stringParams);\n\n return {\n ...assertion,\n prompt,\n ...(params.model !== undefined && { model: params.model as string }),\n ...(params.maxTokens !== undefined && {\n maxTokens: params.maxTokens as number\n }),\n ...(params.temperature !== undefined && {\n temperature: params.temperature as number\n }),\n ...(params.minScore !== undefined && {\n minScore: params.minScore as number\n })\n };\n }\n\n // For time, params override maxDurationMs directly\n if (assertion.type === 'time_limit' && params.maxDurationMs !== undefined) {\n return {\n ...assertion,\n maxDurationMs: params.maxDurationMs as number\n };\n }\n\n // For skill_was_called, parse skillNames from params (may be JSON string)\n if (\n assertion.type === 'skill_was_called' &&\n params.skillNames !== undefined\n ) {\n return {\n ...assertion,\n skillNames: parseSkillNamesFromParams(params.skillNames),\n ...(params.negate !== undefined && { negate: params.negate as boolean })\n };\n }\n\n // For tool_called_with_param, params override toolName and expectedParams directly\n if (assertion.type === 'tool_called_with_param') {\n return {\n ...assertion,\n ...(params.toolName !== undefined && {\n toolName: params.toolName as string\n }),\n ...(params.expectedParams !== undefined && {\n expectedParams: params.expectedParams as string\n }),\n ...(params.requireSuccess !== undefined && {\n requireSuccess: params.requireSuccess as boolean\n }),\n ...(params.negate !== undefined && { negate: params.negate as boolean })\n };\n }\n\n // For build_passed and cost, params override config values directly\n return { ...assertion, ...params } as Assertion;\n}\n\n/**\n * Resolve a system assertion to inline Assertion format with params applied.\n */\nexport function resolveSystemAssertion(\n assertionId: SystemAssertionId,\n params?: Record<string, unknown>\n): Assertion {\n const systemAssertion = SYSTEM_ASSERTIONS[assertionId];\n\n // Build base assertion from system assertion type\n let baseAssertion: Assertion;\n switch (systemAssertion.type) {\n case 'skill_was_called':\n baseAssertion = {\n type: 'skill_was_called',\n skillNames: parseSkillNamesFromParams(params?.skillNames),\n ...(params?.negate !== undefined && {\n negate: params.negate as boolean\n })\n };\n break;\n case 'tool_called_with_param':\n baseAssertion = {\n type: 'tool_called_with_param',\n toolName: (params?.toolName as string) ?? '',\n ...(params?.expectedParams !== undefined && {\n expectedParams: params.expectedParams as string\n }),\n ...(params?.requireSuccess !== undefined && {\n requireSuccess: params.requireSuccess as boolean\n }),\n ...(params?.negate !== undefined && {\n negate: params.negate as boolean\n })\n };\n break;\n case 'build_passed': {\n const rawCmd = params?.command;\n const command =\n typeof rawCmd === 'string' && isAllowedBuildCommandString(rawCmd)\n ? (rawCmd.trim() as AllowedBuildCommandString)\n : undefined;\n baseAssertion = {\n type: 'build_passed',\n ...(command !== undefined && { command }),\n expectedExitCode: (params?.expectedExitCode as number) ?? undefined\n };\n break;\n }\n case 'time_limit':\n baseAssertion = {\n type: 'time_limit',\n maxDurationMs: (params?.maxDurationMs as number) ?? 300000\n };\n break;\n case 'cost':\n baseAssertion = {\n type: 'cost',\n maxCostUsd: (params?.maxCostUsd as number) ?? 1.0\n };\n break;\n case 'llm_judge':\n baseAssertion = {\n type: 'llm_judge',\n prompt: (params?.prompt as string) ?? '',\n minScore: params?.minScore as number | undefined,\n model: params?.model as string | undefined,\n maxTokens: params?.maxTokens as number | undefined,\n temperature: params?.temperature as number | undefined\n };\n break;\n case 'api_call':\n baseAssertion = {\n type: 'api_call',\n url: (params?.url as string) ?? '',\n expectedResponse: (params?.expectedResponse as string) ?? '{}',\n method: (params?.method as 'GET' | 'POST') ?? undefined,\n requestBody: (params?.requestBody as string) ?? undefined,\n requestHeaders: (params?.requestHeaders as string) ?? undefined,\n timeoutMs: (params?.timeoutMs as number) ?? undefined\n };\n break;\n default:\n // Should not happen for system assertions\n baseAssertion = { type: 'llm_judge', prompt: '' };\n }\n\n return baseAssertion;\n}\n\n/**\n * A scenario paired with its optional template and resolved assertions.\n */\nexport interface ScenarioItem {\n scenario: TestScenario;\n template?: Template;\n /** Resolved assertions from assertionIds (converted to inline format) */\n resolvedAssertions?: Assertion[];\n}\n\n/**\n * Data shape returned by fetchEvaluationData for the run flow.\n * Run-level agent + skills + mcps + subAgents; per-scenario template.\n */\nexport interface EvaluationData {\n evalRun: EvalRun;\n agent: Agent | null;\n skills: SkillWithLatestVersion[];\n /** Display name: preset name from DB when available, otherwise joined skill names */\n presetName: string;\n mcps: MCPEntity[];\n subAgents: SubAgent[];\n rules: Rule[];\n scenarioItems: ScenarioItem[];\n}\n\n/**\n * Fetch all data needed to run an evaluation.\n *\n * Uses evalRun.agentId and evalRun.skillIds as run-level inputs.\n * Loads skills by ID; loads code agent; loads scenarios and templates by scenario.templateId.\n *\n * @throws Error if eval run has no code agent when expected\n * @throws Error if eval run has no skills group or skills group has no skills when expected\n */\nexport async function fetchEvaluationData(\n api: ApiClient,\n projectId: string,\n evalRunId: string\n): Promise<EvaluationData> {\n const evalRun = await api.getEvalRun(projectId, evalRunId);\n\n const scenarios = await Promise.all(\n (evalRun.scenarioIds ?? []).map((id) => api.getScenario(projectId, id))\n );\n\n let agent: Agent | null = null;\n if (evalRun.agentId) {\n agent = await api.getAgent(projectId, evalRun.agentId);\n }\n\n // ---------------------------------------------------------------------------\n // Fetch capabilities: unified path (capabilityIds) or legacy path (4 ID arrays)\n // ---------------------------------------------------------------------------\n const skills: SkillWithLatestVersion[] = [];\n const mcps: MCPEntity[] = [];\n const subAgents: SubAgent[] = [];\n const rules: Rule[] = [];\n\n if (evalRun.capabilityIds && evalRun.capabilityIds.length > 0) {\n // \u2500\u2500 Unified capability path \u2500\u2500\n const fetchResults = await Promise.allSettled(\n evalRun.capabilityIds.map((id) => api.getCapability(projectId, id))\n );\n const capabilities = fetchResults\n .filter(\n (r): r is PromiseFulfilledResult<CapabilityWithLatestVersion> =>\n r.status === 'fulfilled'\n )\n .map((r) => r.value)\n .filter((c) => !c.deleted);\n\n // Apply pinned versions from capabilityVersions\n const pinned = evalRun.capabilityVersions ?? {};\n const withVersions = await Promise.all(\n capabilities.map(async (cap) => {\n const versionId = pinned[cap.id];\n if (versionId) {\n const version = await api.getCapabilityVersion(\n projectId,\n cap.id,\n versionId\n );\n return { ...cap, latestVersion: version };\n }\n // For GitHub-sourced capabilities with no pinned version, clear latestVersion\n if (cap.source) {\n return { ...cap, latestVersion: undefined };\n }\n return cap;\n })\n );\n\n // Group by type into legacy domain objects using shared converters\n for (const cap of withVersions) {\n switch (cap.capabilityType) {\n case 'SKILL':\n skills.push(capabilityToSkillWithLatestVersion(cap));\n break;\n case 'SUB_AGENT':\n subAgents.push(capabilityToSubAgent(cap));\n break;\n case 'RULE':\n rules.push(capabilityToRule(cap));\n break;\n case 'MCP':\n mcps.push(capabilityToMcp(cap));\n break;\n }\n }\n }\n // Old runs without capabilityIds will simply have empty arrays (safe default)\n\n const templateIds = [\n ...new Set(\n scenarios.map((s) => s.templateId).filter((id): id is string => !!id)\n )\n ];\n const templates =\n templateIds.length > 0\n ? await Promise.all(\n templateIds.map((id) => api.getTemplate(projectId, id))\n )\n : [];\n const templateMap = new Map(templates.map((t) => [t.id, t]));\n\n const scenarioItems: ScenarioItem[] = scenarios.map((scenario) => {\n // Resolve assertion links to inline Assertion format with params applied\n const resolvedAssertions = (scenario.assertionLinks ?? [])\n .map((link) => {\n const { assertionId, params } = link;\n\n if (!isSystemAssertionId(assertionId)) {\n return null;\n }\n\n return resolveSystemAssertion(\n assertionId as SystemAssertionId,\n params as Record<string, unknown>\n );\n })\n .filter((a): a is Assertion => a !== null);\n\n return {\n scenario,\n template: scenario.templateId\n ? templateMap.get(scenario.templateId)\n : undefined,\n resolvedAssertions:\n resolvedAssertions.length > 0 ? resolvedAssertions : undefined\n };\n });\n\n let presetName = '';\n if (evalRun.presetId) {\n try {\n const preset = await api.getPreset(projectId, evalRun.presetId);\n presetName = preset.name;\n } catch {\n presetName =\n skills.length > 0 ? skills.map((s) => s.name).join(', ') : '';\n }\n } else if (skills.length > 0) {\n presetName = skills.map((s) => s.name).join(', ');\n }\n\n return {\n evalRun,\n agent,\n skills,\n presetName,\n mcps,\n subAgents,\n rules,\n scenarioItems\n };\n}\n", "/**\n * Generic `{{placeholder}}` resolution utilities.\n *\n * Provides low-level functions for detecting and replacing `{{key}}`\n * tokens inside arbitrary JSON-like values (strings, arrays, objects).\n *\n * Used by:\n * - MCP config resolution (wix-auth tokens)\n * - LLM judge assertion param substitution\n */\n\nconst PLACEHOLDER_PATTERN = /\\{\\{([^}]+)\\}\\}/g;\n\n/**\n * Find all unique placeholder keys referenced in an arbitrary value.\n * Recursively traverses strings, arrays, and plain objects.\n */\nexport function findPlaceholders(value: unknown): string[] {\n const keys = new Set<string>();\n collectPlaceholders(value, keys);\n return [...keys];\n}\n\nfunction collectPlaceholders(value: unknown, keys: Set<string>): void {\n if (typeof value === 'string') {\n for (const match of value.matchAll(PLACEHOLDER_PATTERN)) {\n keys.add(match[1].trim());\n }\n } else if (Array.isArray(value)) {\n for (const item of value) {\n collectPlaceholders(item, keys);\n }\n } else if (typeof value === 'object' && value !== null) {\n for (const val of Object.values(value)) {\n collectPlaceholders(val, keys);\n }\n }\n}\n\n/**\n * Replace `{{key}}` tokens in an arbitrary value using the given map.\n * Recursively traverses strings, arrays, and plain objects.\n * Unknown placeholders (not in `placeholders`) are left as-is.\n */\nexport function resolveValue(\n value: unknown,\n placeholders: Record<string, string>\n): unknown {\n if (typeof value === 'string') {\n return value.replace(PLACEHOLDER_PATTERN, (match, key: string) => {\n const trimmed = key.trim();\n return trimmed in placeholders ? placeholders[trimmed] : match;\n });\n }\n if (Array.isArray(value)) {\n return value.map((item) => resolveValue(item, placeholders));\n }\n if (typeof value === 'object' && value !== null) {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n result[k] = resolveValue(v, placeholders);\n }\n return result;\n }\n return value;\n}\n\n/**\n * Replace `{{key}}` tokens in a single string.\n * Convenience wrapper around {@link resolveValue} with a narrower return type.\n */\nexport function resolvePlaceholdersInString(\n text: string,\n placeholders: Record<string, string>\n): string {\n return resolveValue(text, placeholders) as string;\n}\n", "import type {\n EvalRunResult,\n LiveTraceEvent,\n TestScenario,\n Template\n} from '@wix/evalforge-types';\nimport {\n AssertionResultStatus,\n DEFAULT_JUDGE_MODEL,\n LiveTraceEventType,\n formatTraceEventLine\n} from '@wix/evalforge-types';\nimport {\n evaluateAssertions as evaluateAssertionsBase,\n type EvaluationInput,\n type AssertionContext\n} from '@wix/eval-assertions';\nimport type { EvaluatorConfig } from '../config.js';\nimport { prepareWorkingDirectory } from './environment.js';\nimport { runAgentWithContext } from './run-agent-with-context.js';\nimport type { Assertion } from '@wix/evalforge-types';\nimport type { EvaluationData } from '../fetch-evaluation-data.js';\n\nexport type { PartialEvalRunResult } from './types.js';\nexport type { ScenarioItem, EvaluationData } from '../fetch-evaluation-data.js';\n\n/**\n * Run a single scenario using evaluation data.\n *\n * @param config - Evaluator configuration\n * @param evalRunId - The evaluation run ID\n * @param scenario - The test scenario to run\n * @param evalData - Fetched evaluation data (skills, agent, mcps, subAgents)\n * @param template - Optional pre-fetched template entity\n * @param resolvedAssertions - Optional assertions resolved from assertionIds\n * @param pushEvent - Optional callback pushing trace events to the backend\n * (remote job execution, where stdout is not accessible)\n * @returns Complete evaluation result\n */\nexport async function runScenario(\n config: EvaluatorConfig,\n evalRunId: string,\n scenario: TestScenario,\n evalData: EvaluationData,\n template?: Template,\n resolvedAssertions?: Assertion[],\n pushEvent?: (event: LiveTraceEvent) => void\n): Promise<EvalRunResult> {\n const targetId =\n evalData.evalRun.presetId ?? evalData.agent?.id ?? evalData.evalRun.id;\n const targetName = evalData.presetName ?? evalData.agent?.name ?? '';\n\n if (template) {\n console.log(\n formatTraceEventLine({\n evalRunId,\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n targetId,\n targetName,\n stepNumber: 0,\n type: LiveTraceEventType.PROGRESS,\n outputPreview: 'Setting up environment (installing dependencies)...',\n elapsedMs: 0,\n timestamp: new Date().toISOString(),\n isComplete: false\n })\n );\n }\n\n const workDir = await prepareWorkingDirectory(\n config,\n evalRunId,\n targetId,\n scenario.id,\n template\n );\n\n const partialResult = await runAgentWithContext(\n config,\n evalRunId,\n scenario,\n evalData,\n workDir,\n pushEvent\n );\n\n // Combine inline assertions with resolved assertions from assertionIds\n const inlineAssertions = scenario.assertions ?? [];\n const assertions: Assertion[] = [\n ...inlineAssertions,\n ...(resolvedAssertions ?? [])\n ];\n\n // Adapt PartialEvalRunResult to EvaluationInput for the assertions package\n // Use templateFiles to get file status (new, modified, unchanged)\n const templateFilesMap = new Map(\n (partialResult.templateFiles ?? []).map((f) => [f.path, f.status])\n );\n const evaluationInput: EvaluationInput = {\n outputText: partialResult.outputText,\n llmTrace: partialResult.llmTrace,\n fileDiffs: partialResult.fileDiffs?.map((d) => ({\n path: d.path,\n status: templateFilesMap.get(d.path) as 'new' | 'modified' | undefined\n })),\n durationMs: partialResult.duration\n };\n\n const defaultJudgeModel = DEFAULT_JUDGE_MODEL;\n const assertionContext: AssertionContext = {\n workDir,\n defaultJudgeModel,\n llmConfig: {\n baseUrl: config.aiGatewayUrl,\n headers: config.aiGatewayHeaders\n }\n };\n\n const assertionResults: EvalRunResult['assertionResults'] =\n assertions.length > 0\n ? await evaluateAssertionsBase(\n evaluationInput,\n assertions,\n assertionContext\n )\n : [];\n\n const passed = assertionResults.filter(\n (r) => r.status === AssertionResultStatus.PASSED\n ).length;\n const failed = assertionResults.filter(\n (r) => r.status === AssertionResultStatus.FAILED\n ).length;\n const total = assertionResults.length;\n const passRate = total > 0 ? Math.round((passed / total) * 100) : 100;\n\n return {\n ...partialResult,\n assertionResults,\n passed,\n failed,\n passRate\n };\n}\n", "import type { Template } from '@wix/evalforge-types';\nimport { mkdirSync, existsSync, rmSync, readFileSync, writeFileSync } from 'fs';\nimport { mkdir, writeFile } from 'fs/promises';\nimport { tmpdir } from 'os';\nimport path, { sep } from 'path';\nimport type { EvaluatorConfig } from '../config.js';\nimport {\n fetchGitHubFolder,\n fetchGitHubFile\n} from '@wix/evalforge-github-client';\nimport { writeFilesToDirectory } from './utils/write-files.js';\nimport { installDependencies } from './install-dependencies.js';\n\nasync function fetchAndWriteTemplateFiles(\n template: Template,\n workDir: string\n): Promise<void> {\n // 1. Source files (git directory or uploaded)\n let sourceFiles: Array<{ path: string; content: string }> = [];\n if (template.source) {\n sourceFiles = await fetchGitHubFolder(template.source, {\n userAgent: 'EvalForge-Evaluator'\n });\n } else if (template.sourceFiles?.length) {\n sourceFiles = template.sourceFiles;\n } else {\n console.warn(\n `Template \"${template.name}\" has no source configured, creating empty directory`\n );\n }\n\n await writeFilesToDirectory(workDir, sourceFiles);\n\n // 2. Extra files \u2014 override source files by path\n await Promise.all(\n (template.extraFiles ?? []).map(async (ef) => {\n const content = ef.gitSource\n ? await fetchGitHubFile(ef.gitSource, {\n userAgent: 'EvalForge-Evaluator'\n })\n : (ef.content ?? '');\n const dest = path.resolve(workDir, ef.path);\n if (!dest.startsWith(workDir + sep)) {\n throw new Error(\n `Extra file path escapes working directory: \"${ef.path}\"`\n );\n }\n await mkdir(path.dirname(dest), { recursive: true });\n await writeFile(dest, content, 'utf8');\n })\n );\n}\n\nfunction writeWixEnvFile(workDir: string): void {\n const configPath = path.join(workDir, 'wix.config.json');\n if (!existsSync(configPath)) {\n return;\n }\n try {\n const config = JSON.parse(readFileSync(configPath, 'utf-8'));\n if (config.appId) {\n writeFileSync(\n path.join(workDir, '.env'),\n `WIX_CLIENT_ID=${config.appId}\\n`,\n 'utf-8'\n );\n console.log('[environment] Wrote WIX_CLIENT_ID to .env');\n }\n } catch {\n console.warn('[environment] Failed to read wix.config.json');\n }\n}\n\n/**\n * Prepare the working directory for a scenario.\n * If a template with source is provided, fetch files from GitHub.\n * If no template, create an empty directory so file creation/modification can be tracked.\n *\n * @param config - Evaluator configuration\n * @param evalRunId - The evaluation run ID\n * @param targetId - The target ID (prompt agent, skill, or agent)\n * @param scenarioId - The scenario ID (for per-scenario isolation when no template)\n * @param template - Optional pre-fetched template entity\n * @returns The working directory path\n */\nexport async function prepareWorkingDirectory(\n config: EvaluatorConfig,\n evalRunId: string,\n targetId: string,\n scenarioId: string,\n template?: Template\n): Promise<string> {\n const baseDir =\n config.evaluationsDir ?? path.join(tmpdir(), 'evalforge-evaluations');\n const nodeModulesCacheDir = path.join(baseDir, '_node_modules_cache');\n\n if (template) {\n if (!config.evaluationsDir) {\n console.warn(\n 'Template specified but EVALUATIONS_DIR not set, using temp directory'\n );\n }\n const workDir = path.join(baseDir, `${evalRunId}_${targetId}`);\n if (existsSync(workDir)) {\n rmSync(workDir, { recursive: true });\n }\n mkdirSync(workDir, { recursive: true });\n await fetchAndWriteTemplateFiles(template, workDir);\n console.log(`Template files written to ${workDir}`);\n writeWixEnvFile(workDir);\n await installDependencies(workDir, undefined, nodeModulesCacheDir);\n return workDir;\n }\n\n const workDir = path.join(baseDir, `${evalRunId}_${targetId}_${scenarioId}`);\n if (existsSync(workDir)) {\n rmSync(workDir, { recursive: true });\n }\n mkdirSync(workDir, { recursive: true });\n console.log(`Empty working directory created at ${workDir}`);\n return workDir;\n}\n", "import { mkdir, writeFile } from 'fs/promises';\nimport { dirname, resolve, sep } from 'path';\nimport type { SkillFile } from '@wix/evalforge-types';\n\n/**\n * Write an array of {path, content} files to a target directory.\n * Validates paths to prevent directory traversal.\n */\nexport async function writeFilesToDirectory(\n targetDir: string,\n files: SkillFile[]\n): Promise<void> {\n const resolvedBase = resolve(targetDir);\n for (const file of files) {\n const filePath = resolve(targetDir, file.path);\n if (!filePath.startsWith(resolvedBase + sep) && filePath !== resolvedBase) {\n throw new Error(\n `Path traversal detected: \"${file.path}\" resolves outside target directory`\n );\n }\n await mkdir(dirname(filePath), { recursive: true });\n await writeFile(filePath, file.content, 'utf-8');\n }\n}\n", "import { mkdirSync, existsSync, readFileSync, copyFileSync, cpSync } from 'fs';\nimport { createHash } from 'crypto';\nimport path from 'path';\nimport { execFileSync } from 'child_process';\n\ntype PackageManager = {\n cmd: string;\n args: string[];\n cacheSourceFile: string;\n};\n\nfunction detectPackageManager(workDir: string): PackageManager {\n if (existsSync(path.join(workDir, 'pnpm-lock.yaml'))) {\n return {\n cmd: 'pnpm',\n args: ['install', '--frozen-lockfile'],\n cacheSourceFile: 'pnpm-lock.yaml'\n };\n }\n if (existsSync(path.join(workDir, 'package-lock.json'))) {\n return { cmd: 'npm', args: ['ci'], cacheSourceFile: 'package-lock.json' };\n }\n if (existsSync(path.join(workDir, 'yarn.lock'))) {\n return {\n cmd: 'yarn',\n args: ['install', '--frozen-lockfile'],\n cacheSourceFile: 'yarn.lock'\n };\n }\n // No lock file: use npm which is always available on any Node.js environment.\n return {\n cmd: 'npm',\n args: [\n 'install',\n '--legacy-peer-deps',\n '--prefer-offline',\n '--no-fund',\n '--no-audit'\n ],\n cacheSourceFile: 'package.json'\n };\n}\n\n// On macOS, use APFS clones (copy-on-write, near-instant).\n// On Linux (CI), fall back to a full recursive copy \u2014 correct but slower.\nfunction cloneDirectory(src: string, dest: string): void {\n if (process.platform === 'darwin') {\n execFileSync('cp', ['-rc', src, dest]);\n } else {\n cpSync(src, dest, { recursive: true });\n }\n}\n\nfunction installWithCache(\n workDir: string,\n exec: typeof execFileSync,\n cacheBase: string,\n pm: PackageManager\n): void {\n const sourceContent = readFileSync(\n path.join(workDir, pm.cacheSourceFile),\n 'utf-8'\n );\n // 64-bit prefix \u2014 sufficient for the small number of distinct templates.\n const cacheKey = createHash('sha256')\n .update(sourceContent)\n .digest('hex')\n .slice(0, 16);\n const cachedNodeModules = path.join(cacheBase, cacheKey, 'node_modules');\n const targetNodeModules = path.join(workDir, 'node_modules');\n const cacheDir = path.dirname(cachedNodeModules);\n const cachedYarnLock = path.join(cacheDir, 'yarn.lock');\n\n if (existsSync(cachedNodeModules)) {\n console.log(\n `[environment] Restoring node_modules from cache (key: ${cacheKey})`\n );\n if (!existsSync(targetNodeModules)) {\n cloneDirectory(cachedNodeModules, targetNodeModules);\n }\n // Restore yarn.lock so yarn commands (e.g. wix build) find a valid lockfile.\n if (existsSync(cachedYarnLock)) {\n copyFileSync(cachedYarnLock, path.join(workDir, 'yarn.lock'));\n }\n return;\n }\n\n // Cache miss: install, then persist node_modules + yarn.lock to cache.\n console.log(\n `[environment] Running ${pm.cmd} ${pm.args.join(' ')} in ${workDir} (cache key: ${cacheKey})`\n );\n try {\n exec(pm.cmd, pm.args, {\n cwd: workDir,\n stdio: 'inherit',\n timeout: 180_000,\n env: { ...process.env, NODE_ENV: 'development' }\n });\n } catch (err) {\n console.error(\n '[environment] Dependency installation failed:',\n err instanceof Error ? err.message : String(err)\n );\n return;\n }\n console.log(\n '[environment] Dependency installation complete \u2014 saving to cache'\n );\n try {\n mkdirSync(cacheDir, { recursive: true });\n const yarnLockPath = path.join(workDir, 'yarn.lock');\n if (existsSync(yarnLockPath)) {\n copyFileSync(yarnLockPath, cachedYarnLock);\n }\n // Copy (not move) to cache so workDir keeps its node_modules.\n // If this fails, the install still succeeded and the build can proceed.\n cloneDirectory(targetNodeModules, cachedNodeModules);\n } catch (err) {\n console.error(\n '[environment] Failed to save to cache (installation still succeeded):',\n err instanceof Error ? err.message : String(err)\n );\n }\n}\n\n/**\n * Install dependencies in workDir if a package.json is present.\n * Detects the package manager from the lock file and runs the appropriate install command.\n * Failures are logged as warnings and do not abort the scenario.\n *\n * When cacheBase is provided, node_modules is cached keyed by the lock file hash.\n * Subsequent calls with the same lock file content skip the install entirely \u2014\n * node_modules is restored via APFS clone on macOS (near-instant) or recursive copy on Linux.\n */\nexport async function installDependencies(\n workDir: string,\n exec: typeof execFileSync = execFileSync,\n cacheBase?: string\n): Promise<void> {\n if (!existsSync(path.join(workDir, 'package.json'))) {\n return;\n }\n\n const pm = detectPackageManager(workDir);\n\n if (cacheBase) {\n installWithCache(workDir, exec, cacheBase, pm);\n return;\n }\n\n // No cache: plain install.\n console.log(\n `[environment] Running ${pm.cmd} ${pm.args.join(' ')} in ${workDir}`\n );\n try {\n exec(pm.cmd, pm.args, {\n cwd: workDir,\n stdio: 'inherit',\n timeout: 180_000,\n env: { ...process.env, NODE_ENV: 'development' }\n });\n console.log('[environment] Dependency installation complete');\n } catch (err) {\n console.error(\n '[environment] Dependency installation failed:',\n err instanceof Error ? err.message : String(err)\n );\n }\n}\n", "import type {\n TestScenario,\n AgentExecutionContext,\n LiveTraceEvent\n} from '@wix/evalforge-types';\nimport { randomUUID } from 'crypto';\nimport type { EvaluatorConfig } from '../config.js';\nimport type { PartialEvalRunResult } from './types.js';\nimport type { EvaluationData } from '../fetch-evaluation-data.js';\nimport { getAdapter } from './agents/index.js';\nimport { simpleAgentAdapter } from './agents/simple-agent/simple-agent-adapter.js';\nimport {\n snapshotDirectory,\n diffSnapshots,\n extractTemplateFiles,\n deriveInfrastructurePaths\n} from './file-diff.js';\nimport { substituteVariables } from '../substitute-variables.js';\n\nimport { AgentRunCommand, AgentType } from '@wix/evalforge-types';\n\nconst DEFAULT_AGENT_COMMAND = AgentRunCommand.CLAUDE;\n\n/**\n * Run the agent with the full execution context (skills, MCPs, sub-agents, etc.).\n *\n * Uses the agent adapter registry to select the appropriate adapter based on\n * the agent's runCommand (for CLI agents) or adapter ID (for SDK agents).\n * If no agent is specified, defaults to 'claude'.\n *\n * @param config - Evaluator configuration\n * @param evalRunId - The evaluation run ID (for live trace context)\n * @param scenario - The test scenario to run\n * @param evalData - Fetched evaluation data (skills, agent, mcps, subAgents)\n * @param workDir - Optional working directory for the scenario\n * @param pushEvent - Optional callback pushing trace events to the backend\n * (remote job execution, where stdout is not accessible)\n * @returns Partial result without assertion fields\n */\nexport async function runAgentWithContext(\n config: EvaluatorConfig,\n evalRunId: string,\n scenario: TestScenario,\n evalData: EvaluationData,\n workDir?: string,\n pushEvent?: (event: LiveTraceEvent) => void\n): Promise<PartialEvalRunResult> {\n const agent = evalData.agent ?? undefined;\n const isSDK = agent?.agentType === AgentType.SDK;\n\n const identifier: string = isSDK\n ? simpleAgentAdapter.id\n : (agent?.runCommand ?? DEFAULT_AGENT_COMMAND);\n const adapter = getAdapter(identifier);\n\n const startedAt = new Date().toISOString();\n\n const targetId =\n evalData.evalRun.presetId ?? agent?.id ?? evalData.evalRun.id;\n const targetName = evalData.presetName || agent?.name || '';\n\n // The config bag is the single source of truth for agent settings.\n // Legacy agents that only have modelConfig are migrated at DB-read time\n // (agent.repository.ts lazy migration), so agent.config is always populated.\n const agentConfig = agent?.config;\n\n const resolvedTriggerPrompt = substituteVariables(\n scenario.triggerPrompt,\n evalData.evalRun.variables\n );\n\n const executionContext: AgentExecutionContext = {\n skills: evalData.skills,\n scenario: { ...scenario, triggerPrompt: resolvedTriggerPrompt },\n cwd: workDir || process.cwd(),\n config: agentConfig,\n aiGatewayUrl: config.aiGatewayUrl,\n aiGatewayHeaders: config.aiGatewayHeaders,\n traceContext: {\n evalRunId,\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n targetId,\n targetName,\n pushEvent\n },\n mcps: evalData.mcps.length > 0 ? evalData.mcps : undefined,\n subAgents: evalData.subAgents.length > 0 ? evalData.subAgents : undefined,\n rules: evalData.rules?.length > 0 ? evalData.rules : undefined,\n systemPrompt: agent?.systemPrompt,\n triggerPromptImages:\n scenario.triggerPromptImages && scenario.triggerPromptImages.length > 0\n ? scenario.triggerPromptImages\n : undefined\n };\n\n const hasPrepare = !!adapter.prepareEnvironment;\n\n // Snapshot before prepareEnvironment to detect which files are infrastructure.\n const prePrepSnapshot =\n hasPrepare && workDir ? snapshotDirectory(workDir) : {};\n\n // Let the adapter write infrastructure files (skills, MCPs, rules, etc.)\n // *before* the baseline snapshot so they don't appear as \"new\" in diffs.\n if (hasPrepare) {\n await adapter.prepareEnvironment!(executionContext);\n }\n\n const beforeSnapshot = workDir ? snapshotDirectory(workDir) : {};\n const infrastructurePaths = hasPrepare\n ? deriveInfrastructurePaths(prePrepSnapshot, beforeSnapshot)\n : new Set<string>();\n\n const { outputText, durationMs, llmTrace, conversation } =\n await adapter.execute(executionContext);\n\n const completedAt = new Date().toISOString();\n\n const afterSnapshot = workDir ? snapshotDirectory(workDir) : {};\n const fileDiffs = diffSnapshots(\n beforeSnapshot,\n afterSnapshot,\n infrastructurePaths\n );\n const templateFiles = workDir\n ? extractTemplateFiles(beforeSnapshot, afterSnapshot, infrastructurePaths)\n : undefined;\n\n // Build legacy modelConfig snapshot for result display (historical compat).\n // Extract model params from the config bag, fall back to modelConfig or llmTrace.\n const snapshotModelConfig = agentConfig?.model\n ? {\n model: agentConfig.model as string,\n ...(agentConfig.temperature != null && {\n temperature: agentConfig.temperature as number\n }),\n ...(agentConfig.maxTokens != null && {\n maxTokens: agentConfig.maxTokens as number\n }),\n ...(agentConfig.maxTurns != null && {\n maxTurns: agentConfig.maxTurns as number\n })\n }\n : (agent?.modelConfig ??\n (llmTrace?.summary.modelsUsed?.[0]\n ? { model: llmTrace.summary.modelsUsed[0] }\n : undefined));\n\n return {\n id: randomUUID(),\n targetId,\n targetName,\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n triggerPrompt: resolvedTriggerPrompt,\n modelConfig: snapshotModelConfig,\n duration: durationMs,\n outputText,\n fileDiffs: fileDiffs.length > 0 ? fileDiffs : undefined,\n templateFiles:\n templateFiles && templateFiles.length > 0 ? templateFiles : undefined,\n startedAt,\n completedAt,\n llmTrace,\n conversation\n };\n}\n", "import type { AgentAdapter } from '@wix/evalforge-types';\n\n/**\n * Registry for agent adapters.\n *\n * Supports two lookup strategies:\n * - By CLI command (e.g. 'claude') for CLI-based agents\n * - By adapter ID (e.g. 'simple-agent') for SDK-based agents\n *\n * @example\n * ```typescript\n * const registry = new AgentAdapterRegistry();\n * registry.register(new ClaudeCodeAdapter());\n *\n * const adapter = registry.resolve('claude');\n * if (adapter) {\n * const result = await adapter.execute(context);\n * }\n * ```\n */\nexport class AgentAdapterRegistry {\n /** Map of CLI commands to their registered adapters. */\n private commandMap = new Map<string, AgentAdapter>();\n\n /** Map of adapter IDs to their registered adapters. */\n private idMap = new Map<string, AgentAdapter>();\n\n /** Set of all registered adapter instances (for getAll). */\n private registeredAdapters = new Set<AgentAdapter>();\n\n /**\n * Register an agent adapter.\n *\n * The adapter is registered by its ID and for all commands in its supportedCommands array.\n * If a command or ID is already registered, it will be overwritten with a warning.\n */\n register(adapter: AgentAdapter): void {\n this.registeredAdapters.add(adapter);\n this.idMap.set(adapter.id, adapter);\n\n for (const command of adapter.supportedCommands) {\n if (this.commandMap.has(command)) {\n const existing = this.commandMap.get(command)!;\n console.warn(\n `[AgentAdapterRegistry] Command \"${command}\" already registered by adapter \"${existing.id}\". ` +\n `Overwriting with adapter \"${adapter.id}\".`\n );\n }\n this.commandMap.set(command, adapter);\n }\n }\n\n /** Get an adapter by CLI command. */\n getByCommand(command: string): AgentAdapter | undefined {\n return this.commandMap.get(command);\n }\n\n /** Get an adapter by adapter ID. */\n getById(adapterId: string): AgentAdapter | undefined {\n return this.idMap.get(adapterId);\n }\n\n /**\n * Unified lookup: tries CLI command first, then adapter ID.\n * Use this when the identifier could be either a command or an adapter ID.\n */\n resolve(identifier: string): AgentAdapter | undefined {\n return this.commandMap.get(identifier) ?? this.idMap.get(identifier);\n }\n\n /** Check if a command or adapter ID has a registered adapter. */\n has(identifier: string): boolean {\n return this.commandMap.has(identifier) || this.idMap.has(identifier);\n }\n\n /** Get all registered adapters. */\n getAll(): AgentAdapter[] {\n return Array.from(this.registeredAdapters);\n }\n\n /** Get all supported CLI commands. */\n getSupportedCommands(): string[] {\n return Array.from(this.commandMap.keys());\n }\n\n /** Get all registered adapter IDs. */\n getAdapterIds(): string[] {\n return Array.from(this.idMap.keys());\n }\n\n /**\n * Unregister an adapter by its ID.\n * Removes the adapter and all its command mappings.\n */\n unregister(adapterId: string): boolean {\n let found = false;\n\n for (const adapter of this.registeredAdapters) {\n if (adapter.id === adapterId) {\n this.registeredAdapters.delete(adapter);\n this.idMap.delete(adapterId);\n found = true;\n\n for (const command of adapter.supportedCommands) {\n if (this.commandMap.get(command) === adapter) {\n this.commandMap.delete(command);\n }\n }\n break;\n }\n }\n\n return found;\n }\n\n /** Clear all registered adapters. Primarily useful for testing. */\n clear(): void {\n this.commandMap.clear();\n this.idMap.clear();\n this.registeredAdapters.clear();\n }\n}\n\n/**\n * Default global registry instance.\n * Adapters are auto-registered here when their modules are imported.\n */\nexport const defaultRegistry = new AgentAdapterRegistry();\n\n/**\n * Get an adapter from the default registry.\n *\n * Uses unified lookup (command first, then adapter ID).\n * Throws a helpful error if the adapter is not found.\n */\nexport function getAdapter(identifier: string): AgentAdapter {\n const adapter = defaultRegistry.resolve(identifier);\n if (!adapter) {\n const commands = defaultRegistry.getSupportedCommands();\n const ids = defaultRegistry.getAdapterIds();\n throw new Error(\n `No agent adapter registered for \"${identifier}\". ` +\n `Supported commands: ${commands.length > 0 ? commands.join(', ') : '(none)'}. ` +\n `Registered adapters: ${ids.length > 0 ? ids.join(', ') : '(none)'}`\n );\n }\n return adapter;\n}\n\n/** Check if an identifier has a registered adapter in the default registry. */\nexport function hasAdapter(identifier: string): boolean {\n return defaultRegistry.has(identifier);\n}\n", "import type {\n AgentAdapter,\n AgentExecutionContext,\n AgentExecutionResult,\n ClaudeCodeConfig\n} from '@wix/evalforge-types';\nimport { AgentRunCommand, ClaudeCodeConfigSchema } from '@wix/evalforge-types';\nimport {\n executeWithClaudeCode,\n prepareClaudeCodeEnvironment\n} from './execute.js';\nimport type { ClaudeCodeExecutionOptions } from './types.js';\n\n/**\n * Claude Code agent adapter.\n *\n * Implements the AgentAdapter interface for the Claude Code CLI/SDK.\n * This adapter wraps the existing executeWithClaudeCode function to provide\n * a standardized interface for the evaluation system.\n *\n * Supported commands: 'claude'\n */\nexport class ClaudeCodeAdapter implements AgentAdapter {\n readonly id = 'claude-code';\n readonly name = 'Claude Code';\n readonly supportedCommands = [AgentRunCommand.CLAUDE] as const;\n\n /**\n * Write infrastructure files (settings, MCPs, sub-agents, rules, skills)\n * before the baseline snapshot is taken.\n */\n async prepareEnvironment(context: AgentExecutionContext): Promise<void> {\n await prepareClaudeCodeEnvironment(context.cwd, context.skills, {\n mcps: context.mcps,\n subAgents: context.subAgents,\n rules: context.rules\n });\n }\n\n /**\n * Execute a skill using the Claude Code SDK.\n *\n * @param context - The agent-agnostic execution context\n * @returns The standardized execution result\n */\n async execute(context: AgentExecutionContext): Promise<AgentExecutionResult> {\n const {\n skills,\n scenario,\n cwd,\n config,\n aiGatewayUrl,\n aiGatewayHeaders,\n traceContext,\n mcps,\n subAgents,\n rules,\n systemPrompt\n } = context;\n\n // Parse config with typed Zod schema \u2014 all model + agent-specific params\n const typed = config\n ? ClaudeCodeConfigSchema.passthrough().safeParse(config)\n : undefined;\n const cfg: ClaudeCodeConfig | undefined = typed?.success\n ? typed.data\n : undefined;\n\n // Extract unknown config keys to forward as SDK query option extras\n const schemaKeys = new Set(Object.keys(ClaudeCodeConfigSchema.shape));\n const extras: Record<string, unknown> = {};\n if (config) {\n for (const [key, value] of Object.entries(config)) {\n if (!schemaKeys.has(key)) extras[key] = value;\n }\n }\n\n // maxTurns 0 = unlimited (omit from SDK options)\n const rawMaxTurns = cfg?.maxTurns;\n const maxTurns = rawMaxTurns === 0 ? undefined : rawMaxTurns;\n\n const options: ClaudeCodeExecutionOptions = {\n cwd,\n model: cfg?.model,\n temperature: cfg?.temperature,\n maxTokens: cfg?.maxTokens,\n maxTurns,\n maxThinkingTokens: cfg?.maxThinkingTokens,\n allowedTools: cfg?.allowedTools,\n disallowedTools: cfg?.disallowedTools,\n effort: cfg?.effort,\n maxBudgetUsd: cfg?.maxBudgetUsd,\n maxDurationMs: cfg?.maxDurationMs,\n aiGatewayUrl,\n aiGatewayHeaders,\n traceContext,\n mcps,\n subAgents,\n rules,\n systemPrompt,\n extras\n };\n\n // Execute using the existing Claude Code implementation\n const { result, llmTrace, conversation } = await executeWithClaudeCode(\n skills,\n scenario,\n options\n );\n\n // Map to the agent-agnostic result format\n return {\n outputText: result.outputText,\n durationMs: result.durationMs,\n usage: {\n inputTokens: result.usage.inputTokens,\n outputTokens: result.usage.outputTokens,\n totalTokens: result.usage.totalTokens\n },\n costUsd: result.costUsd,\n llmTrace,\n conversation\n };\n }\n}\n\n/**\n * Singleton instance of the Claude Code adapter.\n */\nexport const claudeCodeAdapter = new ClaudeCodeAdapter();\n", "import type {\n SkillWithLatestVersion,\n TestScenario,\n LLMTrace,\n LiveTraceEvent,\n ConversationMessage,\n TriggerPromptImage\n} from '@wix/evalforge-types';\nimport {\n ClaudeModel,\n DEFAULT_EVALUATOR_SYSTEM_PROMPT,\n LLMStepType,\n LiveTraceEventType\n} from '@wix/evalforge-types';\nimport { writeSkillsToFilesystem } from './write-skills.js';\nimport { resolveTimeoutMs } from '../timeout.js';\nimport { randomUUID } from 'crypto';\nimport type { CapturedStep } from '../../types.js';\nimport type {\n ClaudeCodeExecutionOptions,\n ClaudeCodeExecutionResult,\n TraceContext\n} from './types.js';\nimport { writeMcpToFilesystem } from './write-mcp.js';\nimport { writeSubAgentsToFilesystem } from './write-sub-agents.js';\nimport { writeRulesToFilesystem } from './write-rules.js';\nimport { buildConversation } from './build-conversation.js';\nimport { emitTraceEvent } from '../shared/trace-emit.js';\n\n/**\n * Import SDK types directly from Claude Agent SDK.\n * Type-only imports are erased at compile time - zero runtime overhead.\n * The SDK is still dynamically imported at runtime in executeWithClaudeCode().\n */\nimport type {\n SDKAssistantMessage,\n SDKResultMessage,\n SDKUserMessage,\n SDKSystemMessage,\n SDKMessage\n} from '@anthropic-ai/claude-agent-sdk' with { 'resolution-mode': 'import' };\n\n/**\n * Message with timestamp \u2014 tracks when each message was received.\n */\nexport interface TimestampedMessage {\n message: SDKMessage;\n receivedAt: Date;\n}\n\nconst DEFAULT_MODEL = ClaudeModel.CLAUDE_4_5_SONNET_1_0;\n\n/**\n * Build an async iterable that yields a user message with images.\n * When images are attached to the trigger prompt, this allows multimodal input\n * to the Claude Agent SDK via content blocks (text + image).\n *\n * @param triggerPrompt - The text prompt to send\n * @param images - Array of images with base64 data and metadata\n * @returns An async iterable yielding a single SDKUserMessage\n */\nexport async function* buildPromptStream(\n triggerPrompt: string,\n images: TriggerPromptImage[]\n): AsyncIterable<SDKUserMessage> {\n yield {\n type: 'user',\n message: {\n role: 'user',\n content: [\n { type: 'text', text: triggerPrompt },\n ...images.map((img) => ({\n type: 'image' as const,\n source: {\n type: 'base64' as const,\n data: img.base64,\n media_type: img.mediaType as\n | 'image/jpeg'\n | 'image/png'\n | 'image/gif'\n | 'image/webp'\n }\n }))\n ]\n },\n parent_tool_use_id: null\n } as SDKUserMessage;\n}\n\n/**\n * Extract a meaningful action description from tool name and arguments.\n * This provides more informative progress messages than just \"Using Tool...\".\n *\n * @param toolName - The name of the tool being used\n * @param toolArgs - JSON string of tool arguments\n * @returns A human-readable action description\n */\nfunction extractToolActionDescription(\n toolName: string | undefined,\n toolArgs: string | undefined\n): string {\n if (!toolName) {\n return 'Using tool...';\n }\n\n // Try to parse tool args for more context\n if (toolArgs) {\n try {\n const args = JSON.parse(toolArgs) as Record<string, unknown>;\n\n // Task/SubAgent tool - show the description with tool prefix\n // This makes it clear the agent is waiting for a sub-task to complete\n if (\n (toolName === 'Task' || toolName === 'dispatch_agent') &&\n args.description\n ) {\n const desc = String(args.description).slice(0, 55);\n const truncatedDesc =\n desc.length < String(args.description).length ? `${desc}...` : desc;\n return `Task: ${truncatedDesc}`;\n }\n\n // Bash/Command tool - show the command\n if (\n (toolName === 'Bash' ||\n toolName === 'bash' ||\n toolName === 'execute') &&\n args.command\n ) {\n const cmd = String(args.command).slice(0, 50);\n return `Running: ${cmd}${String(args.command).length > 50 ? '...' : ''}`;\n }\n\n // Search/Grep tool - show the query/pattern\n if (\n toolName === 'Search' ||\n toolName === 'search' ||\n toolName === 'Grep'\n ) {\n const query = args.query || args.pattern || args.search;\n if (query) {\n return `Searching: ${String(query).slice(0, 40)}`;\n }\n }\n\n // List files tool\n if (toolName === 'LS' || toolName === 'ls' || toolName === 'ListFiles') {\n const path = args.path || args.directory || '.';\n return `Listing: ${String(path).slice(0, 50)}`;\n }\n\n // Read tool with file path\n if (\n (toolName === 'Read' || toolName === 'read' || toolName === 'View') &&\n (args.file_path || args.path || args.target_file)\n ) {\n const filePath = String(\n args.file_path || args.path || args.target_file\n ).slice(0, 50);\n return `Reading: ${filePath}`;\n }\n\n // Write/Edit tool with file path\n if (\n (toolName === 'Write' || toolName === 'Edit' || toolName === 'write') &&\n (args.file_path || args.path || args.target_file)\n ) {\n const filePath = String(\n args.file_path || args.path || args.target_file\n ).slice(0, 50);\n return `Writing: ${filePath}`;\n }\n } catch {\n // Failed to parse, use default\n }\n }\n\n // Default: just show tool name\n return `Using ${toolName}...`;\n}\n\n/**\n * Create a trace event from an SDK message.\n * @param message - The SDK message to convert\n * @param context - The trace context\n * @param stepNumber - The current step number\n * @param isComplete - Whether this is the final event\n * @returns The trace event\n */\nfunction createTraceEventFromMessage(\n message: SDKAssistantMessage,\n context: TraceContext,\n stepNumber: number,\n isComplete: boolean\n): LiveTraceEvent {\n let type: LiveTraceEventType = LiveTraceEventType.COMPLETION;\n let toolName: string | undefined;\n let toolArgs: string | undefined;\n let outputPreview: string | undefined;\n let filePath: string | undefined;\n let thinking: string | undefined;\n\n for (const block of message.message.content) {\n if (block.type === 'tool_use') {\n type = LiveTraceEventType.TOOL_USE;\n toolName = block.name;\n toolArgs = JSON.stringify(block.input).slice(0, 500);\n\n const input = block.input as Record<string, unknown>;\n if (input.file_path || input.path || input.target_file) {\n filePath = String(input.file_path || input.path || input.target_file);\n if (\n block.name === 'Write' ||\n block.name === 'Edit' ||\n block.name === 'write' ||\n block.name === 'edit'\n ) {\n type = LiveTraceEventType.FILE_WRITE;\n } else if (\n block.name === 'Read' ||\n block.name === 'read' ||\n block.name === 'View'\n ) {\n type = LiveTraceEventType.FILE_READ;\n }\n }\n } else if (block.type === 'text') {\n outputPreview = block.text.slice(0, 500);\n if (!toolName) {\n type = LiveTraceEventType.COMPLETION;\n }\n } else if (block.type === 'thinking') {\n const thinkingBlock = block as { type: 'thinking'; thinking: string };\n thinking = thinkingBlock.thinking.slice(0, 500);\n if (!outputPreview && !toolName) {\n type = LiveTraceEventType.THINKING;\n }\n }\n }\n\n return {\n evalRunId: context.evalRunId,\n scenarioId: context.scenarioId,\n scenarioName: context.scenarioName,\n targetId: context.targetId,\n targetName: context.targetName,\n stepNumber,\n type,\n toolName,\n toolArgs,\n outputPreview,\n filePath,\n thinking,\n timestamp: new Date().toISOString(),\n isComplete\n };\n}\n\n/**\n * Create a trace event from any SDK message type.\n * @param message - Any SDK message\n * @param context - The trace context\n * @param stepNumber - The current step number\n * @param isComplete - Whether this is the final event\n * @returns The trace event or null if message type is not traceable\n */\nfunction createTraceEventFromAnyMessage(\n message: SDKMessage,\n context: TraceContext,\n stepNumber: number,\n isComplete: boolean\n): LiveTraceEvent | null {\n const baseEvent = {\n evalRunId: context.evalRunId,\n scenarioId: context.scenarioId,\n scenarioName: context.scenarioName,\n targetId: context.targetId,\n targetName: context.targetName,\n stepNumber,\n timestamp: new Date().toISOString(),\n isComplete\n };\n\n if (isAssistantMessage(message)) {\n return createTraceEventFromMessage(\n message,\n context,\n stepNumber,\n isComplete\n );\n }\n\n if (message.type === 'user') {\n const userMsg = message as SDKUserMessage;\n let outputPreview = '';\n\n // Extract preview from user message content\n // Content can be string or array of blocks (text or tool_result)\n const content = userMsg.message?.content;\n if (typeof content === 'string') {\n outputPreview = content.slice(0, 500);\n } else if (Array.isArray(content)) {\n for (const block of content) {\n if (typeof block !== 'object' || block === null) continue;\n const b = block as unknown as Record<string, unknown>;\n if (b.type === 'text' && typeof b.text === 'string') {\n outputPreview = b.text.slice(0, 500);\n break;\n }\n if (b.type === 'tool_result') {\n const raw = b.content;\n const preview =\n typeof raw === 'string'\n ? raw\n : Array.isArray(raw)\n ? (raw as Array<Record<string, unknown>>)\n .filter(\n (c) => c.type === 'text' && typeof c.text === 'string'\n )\n .map((c) => c.text as string)\n .join('\\n')\n : '';\n outputPreview = preview.slice(0, 500);\n break;\n }\n }\n }\n\n return {\n ...baseEvent,\n type: LiveTraceEventType.TOOL_RESULT,\n outputPreview: outputPreview || '(tool result)'\n };\n }\n\n if (message.type === 'system') {\n const sysMsg = message as SDKSystemMessage;\n // SDKSystemMessage has subtype (e.g., 'init') but no 'message' field\n return {\n ...baseEvent,\n type: LiveTraceEventType.SYSTEM,\n outputPreview: sysMsg.subtype || 'system'\n };\n }\n\n if (message.type === 'result') {\n // Result messages indicate completion, already handled elsewhere\n return null;\n }\n\n // Unknown message type - emit as generic progress\n return {\n ...baseEvent,\n type: LiveTraceEventType.PROGRESS,\n outputPreview: `Message type: ${message.type}`\n };\n}\n\n/**\n * Write all infrastructure files (settings, MCPs, sub-agents, rules, skills)\n * to the working directory. Called by the adapter's `prepareEnvironment()` so\n * that the orchestrator can take the baseline snapshot *after* infra is in place.\n */\nexport async function prepareClaudeCodeEnvironment(\n cwd: string,\n skills: SkillWithLatestVersion[],\n options: Pick<ClaudeCodeExecutionOptions, 'mcps' | 'subAgents' | 'rules'>\n): Promise<void> {\n const { mkdir: mkdirAsync, writeFile } = await import('fs/promises');\n const claudeDir = `${cwd}/.claude`;\n await mkdirAsync(claudeDir, { recursive: true });\n await writeFile(`${claudeDir}/settings.json`, '{}', {\n flag: 'wx'\n }).catch(() => {\n // File already exists \u2014 that's fine\n });\n\n if (options.mcps && options.mcps.length > 0) {\n await writeMcpToFilesystem(cwd, options.mcps);\n }\n\n if (options.subAgents && options.subAgents.length > 0) {\n await writeSubAgentsToFilesystem(cwd, options.subAgents);\n }\n\n if (options.rules && options.rules.length > 0) {\n await writeRulesToFilesystem(cwd, options.rules);\n }\n\n try {\n await writeSkillsToFilesystem(cwd, skills);\n } catch (writeError) {\n throw new Error(\n `Failed to write skills to filesystem: ${writeError instanceof Error ? writeError.message : String(writeError)}`\n );\n }\n}\n\n/**\n * Execute skills using the Claude Agent SDK.\n *\n * All skills are written to .claude/skills/<name>/SKILL.md. The SDK discovers\n * them from the filesystem; no system prompt is passed. The agent has access\n * to all skills as a group.\n *\n * @param skills - All skills to execute (each written to its own directory)\n * @param scenario - The test scenario containing the trigger prompt\n * @param options - Execution options (cwd, mcps, etc.)\n * @returns Execution result with output, usage, and LLM trace\n */\nexport async function executeWithClaudeCode(\n skills: SkillWithLatestVersion[],\n scenario: TestScenario,\n options: ClaudeCodeExecutionOptions\n): Promise<{\n result: ClaudeCodeExecutionResult;\n llmTrace: LLMTrace;\n conversation: ConversationMessage[];\n}> {\n const skillNames = skills.map((s) => s.name).join(', ');\n console.log('[executeWithClaudeCode] Starting execution', {\n skillCount: skills.length,\n skillNames,\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n cwd: options.cwd,\n aiGatewayUrl: options.aiGatewayUrl,\n hasAiGatewayHeaders: !!options.aiGatewayHeaders,\n model: options.model\n });\n\n // Dynamic import for ESM module\n let query;\n try {\n const sdk = await import('@anthropic-ai/claude-agent-sdk');\n query = sdk.query;\n } catch (importError) {\n throw new Error(\n `Failed to import Claude Agent SDK: ${importError instanceof Error ? importError.message : String(importError)}`\n );\n }\n\n const startTime = new Date();\n const allMessages: TimestampedMessage[] = [];\n\n // Build environment variables for the SDK\n const sdkEnv = buildSdkEnvironment(options);\n\n // Track step number for trace events\n let traceStepNumber = 0;\n const traceContext = options.traceContext;\n\n // Track the last action for informative heartbeat messages\n let lastAction = 'Starting...';\n let lastToolName: string | undefined;\n let lastFilePath: string | undefined;\n\n // Execute the query using Claude Agent SDK\n // maxTurns undefined = unlimited (SDK default); otherwise use the provided value\n const maxTurns = options.maxTurns || undefined;\n\n let messageCount = 0;\n\n // Custom permission handler that auto-allows all tool usage.\n // This is used instead of 'bypassPermissions' mode because that mode\n // cannot be used when running as root (the dev machine container runs as root).\n // The Claude CLI explicitly blocks --dangerously-skip-permissions for security\n // when running with root/sudo privileges.\n // Must return both `behavior: 'allow'` and `updatedInput` to satisfy\n // the SDK's runtime Zod validation union.\n const canUseTool = async (\n _toolName: string,\n input: Record<string, unknown>\n ) => ({ behavior: 'allow' as const, updatedInput: input });\n\n const baseAllowedTools = options.allowedTools ?? [\n 'Skill',\n 'Read',\n 'Write',\n 'Edit',\n 'Bash',\n 'Glob',\n 'Grep',\n 'Agent',\n 'WebFetch',\n 'WebSearch'\n ];\n const allowedTools =\n (options.mcps?.length ?? 0) > 0\n ? [...baseAllowedTools, 'mcp__*']\n : baseAllowedTools;\n\n // Spread user extras first so explicit adapter fields always win\n const queryOptions: Record<string, unknown> = {\n ...(options.extras ?? {}),\n env: sdkEnv,\n cwd: options.cwd,\n settingSources: ['project'],\n allowedTools,\n ...(options.disallowedTools?.length\n ? { disallowedTools: options.disallowedTools }\n : {}),\n model: options.model || DEFAULT_MODEL,\n maxTurns,\n maxThinkingTokens: options.maxThinkingTokens,\n ...(options.effort ? { effort: options.effort } : {}),\n ...(options.maxBudgetUsd != null\n ? { maxBudgetUsd: options.maxBudgetUsd }\n : {}),\n // Use 'default' permission mode with custom canUseTool handler\n // instead of 'bypassPermissions' which fails on root\n permissionMode: 'default',\n canUseTool\n };\n\n // System prompt override: undefined = default behavioral instructions,\n // null or empty string = no system prompt (raw agent), non-empty string = custom prompt\n if (options.systemPrompt === null || options.systemPrompt === '') {\n // Explicitly disabled -- omit systemPrompt entirely for raw agent behavior\n } else if (options.systemPrompt != null) {\n queryOptions.systemPrompt = {\n type: 'preset',\n preset: 'claude_code',\n append: options.systemPrompt\n };\n } else {\n queryOptions.systemPrompt = {\n type: 'preset',\n preset: 'claude_code',\n append: DEFAULT_EVALUATOR_SYSTEM_PROMPT\n };\n }\n if (options.temperature !== undefined) {\n queryOptions.temperature = options.temperature;\n }\n if (options.maxTokens !== undefined) {\n queryOptions.maxTokens = options.maxTokens;\n }\n\n // Log query options (excluding env which we already logged)\n console.log('[SDK-DEBUG] Query options:');\n console.log('[SDK-DEBUG] model:', queryOptions.model);\n console.log('[SDK-DEBUG] maxTurns:', queryOptions.maxTurns);\n console.log(\n '[SDK-DEBUG] maxThinkingTokens:',\n queryOptions.maxThinkingTokens\n );\n console.log('[SDK-DEBUG] temperature:', queryOptions.temperature);\n console.log('[SDK-DEBUG] maxTokens:', queryOptions.maxTokens);\n console.log('[SDK-DEBUG] permissionMode:', queryOptions.permissionMode);\n console.log(\n '[SDK-DEBUG] canUseTool:',\n queryOptions.canUseTool ? 'custom handler (auto-allow)' : 'not set'\n );\n console.log('[SDK-DEBUG] systemPrompt:', queryOptions.systemPrompt);\n console.log('[SDK-DEBUG] settingSources:', queryOptions.settingSources);\n console.log('[SDK-DEBUG] allowedTools:', queryOptions.allowedTools);\n console.log('[SDK-DEBUG] Calling SDK query()...');\n\n // Emit a diagnostic trace event before calling the SDK\n // This helps identify if the failure happens before or during SDK execution\n if (traceContext) {\n const preExecEvent = {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: 0,\n type: LiveTraceEventType.DIAGNOSTIC,\n outputPreview: JSON.stringify({\n event: 'pre-sdk-execution',\n model: queryOptions.model,\n maxTurns: queryOptions.maxTurns,\n sdkEnv: {\n ANTHROPIC_BASE_URL: sdkEnv.ANTHROPIC_BASE_URL,\n hasANTHROPIC_API_KEY: !!sdkEnv.ANTHROPIC_API_KEY,\n hasANTHROPIC_AUTH_TOKEN: !!sdkEnv.ANTHROPIC_AUTH_TOKEN,\n hasANTHROPIC_CUSTOM_HEADERS: !!sdkEnv.ANTHROPIC_CUSTOM_HEADERS\n },\n timestamp: new Date().toISOString()\n }),\n timestamp: new Date().toISOString(),\n isComplete: false\n };\n emitTraceEvent(preExecEvent, traceContext.pushEvent);\n }\n\n const SDK_TIMEOUT_MS = resolveTimeoutMs(maxTurns, options.maxDurationMs);\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n let timedOut = false;\n\n // Heartbeat interval to emit progress events every 10 seconds\n // This keeps the UI updated during long-running operations\n const HEARTBEAT_INTERVAL_MS = 10000;\n let heartbeatHandle: ReturnType<typeof setInterval> | undefined;\n const executionStartTime = Date.now();\n\n try {\n // Create timeout promise that rejects after SDK_TIMEOUT_MS\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeoutHandle = setTimeout(() => {\n timedOut = true;\n reject(\n new Error(\n `SDK execution timed out after ${SDK_TIMEOUT_MS}ms. ` +\n `Skills: ${skillNames}, Scenario: ${scenario.name}, ` +\n `Messages received: ${messageCount}, MaxTurns: ${maxTurns}`\n )\n );\n }, SDK_TIMEOUT_MS);\n });\n\n // Start heartbeat interval to emit progress events\n if (traceContext) {\n // Track how many heartbeats we've sent for the same action\n let lastReportedAction = '';\n let sameActionCount = 0;\n\n heartbeatHandle = setInterval(() => {\n const elapsedMs = Date.now() - executionStartTime;\n\n // Build informative progress message with last action\n let progressMessage = lastAction;\n\n // Track how long we've been on the same action\n if (lastAction === lastReportedAction) {\n sameActionCount++;\n } else {\n sameActionCount = 1;\n lastReportedAction = lastAction;\n }\n\n // For Task/sub-agent tools, show waiting status after first heartbeat\n const isTaskTool =\n lastToolName === 'Task' || lastToolName === 'dispatch_agent';\n if (isTaskTool && sameActionCount > 1) {\n // Show that we're waiting for the sub-task to complete\n progressMessage = `Waiting for ${lastAction}`;\n } else if (lastToolName && lastFilePath) {\n progressMessage = `${lastToolName}: ${lastFilePath}`;\n } else if (lastToolName && !isTaskTool) {\n progressMessage = `Using ${lastToolName}...`;\n }\n\n // Add elapsed time and step info\n const elapsedSec = Math.round(elapsedMs / 1000);\n progressMessage += ` (${elapsedSec}s, step ${traceStepNumber})`;\n\n const progressEvent: LiveTraceEvent = {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: traceStepNumber,\n type: LiveTraceEventType.PROGRESS,\n outputPreview: progressMessage,\n toolName: lastToolName,\n filePath: lastFilePath,\n elapsedMs,\n timestamp: new Date().toISOString(),\n isComplete: false\n };\n emitTraceEvent(progressEvent, traceContext.pushEvent);\n }, HEARTBEAT_INTERVAL_MS);\n }\n\n // SDK execution promise\n const sdkPromise = (async () => {\n // Build the prompt: either a plain string or an async iterable with images\n const hasImages =\n scenario.triggerPromptImages && scenario.triggerPromptImages.length > 0;\n const prompt = hasImages\n ? buildPromptStream(\n scenario.triggerPrompt,\n scenario.triggerPromptImages!\n )\n : scenario.triggerPrompt;\n\n for await (const message of query({\n prompt,\n options: queryOptions\n })) {\n // Log all messages for debugging and capture timestamp\n messageCount++;\n const receivedAt = new Date();\n console.log('[SDK Message]', JSON.stringify(message, null, 2));\n allMessages.push({ message: message as SDKMessage, receivedAt });\n // Emit live trace events for ALL message types if trace context is provided\n if (traceContext) {\n traceStepNumber++;\n const traceEvent = createTraceEventFromAnyMessage(\n message as SDKMessage,\n traceContext,\n traceStepNumber,\n false // Not complete yet\n );\n if (traceEvent) {\n // Update last action tracking for informative heartbeats\n lastToolName = traceEvent.toolName;\n lastFilePath = traceEvent.filePath;\n if (traceEvent.type === LiveTraceEventType.THINKING) {\n lastAction = 'Thinking...';\n } else if (traceEvent.type === LiveTraceEventType.TOOL_USE) {\n // Try to extract meaningful info from tool args for better progress messages\n lastAction = extractToolActionDescription(\n traceEvent.toolName,\n traceEvent.toolArgs\n );\n } else if (traceEvent.type === LiveTraceEventType.FILE_WRITE) {\n lastAction = `Writing: ${traceEvent.filePath || 'file'}`;\n } else if (traceEvent.type === LiveTraceEventType.FILE_READ) {\n lastAction = `Reading: ${traceEvent.filePath || 'file'}`;\n } else if (traceEvent.type === LiveTraceEventType.COMPLETION) {\n lastAction = 'Processing response...';\n }\n\n emitTraceEvent(traceEvent, traceContext.pushEvent);\n }\n }\n }\n })();\n\n // Race between SDK execution and timeout\n await Promise.race([sdkPromise, timeoutPromise]);\n\n // Clear timeout and heartbeat if SDK completed successfully\n if (timeoutHandle) {\n clearTimeout(timeoutHandle);\n }\n if (heartbeatHandle) {\n clearInterval(heartbeatHandle);\n }\n\n console.log(\n '[executeWithClaudeCode] Claude Agent SDK query completed, received',\n allMessages.length,\n 'messages'\n );\n } catch (sdkError) {\n // Clear timeout and heartbeat on error\n if (timeoutHandle) {\n clearTimeout(timeoutHandle);\n }\n if (heartbeatHandle) {\n clearInterval(heartbeatHandle);\n }\n\n // Log if this was a timeout\n if (timedOut) {\n console.error('[SDK-TIMEOUT] Execution timed out:', sdkError);\n }\n // === COMPREHENSIVE ERROR DEBUGGING ===\n console.error('[SDK-ERROR] ====== CLAUDE SDK EXECUTION FAILED ======');\n console.error('[SDK-ERROR] Timestamp:', new Date().toISOString());\n console.error(\n '[SDK-ERROR] Messages received before failure:',\n messageCount\n );\n\n // Capture basic error info\n const errorMessage =\n sdkError instanceof Error ? sdkError.message : String(sdkError);\n const errorStack = sdkError instanceof Error ? sdkError.stack : undefined;\n const errorName = sdkError instanceof Error ? sdkError.name : 'Unknown';\n\n console.error('[SDK-ERROR] Error name:', errorName);\n console.error('[SDK-ERROR] Error message:', errorMessage);\n\n if (errorStack) {\n console.error('[SDK-ERROR] Full stack trace:');\n console.error(errorStack);\n }\n\n // Extract ALL properties from the error object\n if (sdkError && typeof sdkError === 'object') {\n const errObj = sdkError as Record<string, unknown>;\n console.error('[SDK-ERROR] Error object properties:');\n\n // Log all enumerable properties\n for (const key of Object.keys(errObj)) {\n const value = errObj[key];\n if (value !== undefined && key !== 'stack') {\n try {\n const valueStr =\n typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : String(value);\n console.error(`[SDK-ERROR] ${key}:`, valueStr.substring(0, 1000));\n } catch {\n console.error(`[SDK-ERROR] ${key}: [cannot serialize]`);\n }\n }\n }\n\n // Specifically check for common SDK error properties\n const sdkErrorKeys = [\n 'code',\n 'status',\n 'statusCode',\n 'statusText',\n 'stderr',\n 'stdout',\n 'output',\n 'exitCode',\n 'signal',\n 'killed',\n 'cause',\n 'reason',\n 'details',\n 'response',\n 'request',\n 'config',\n 'errno',\n 'syscall',\n 'path',\n 'spawnargs'\n ];\n\n const extraInfo: Record<string, unknown> = {};\n for (const key of sdkErrorKeys) {\n if (key in errObj && errObj[key] !== undefined) {\n extraInfo[key] = errObj[key];\n }\n }\n\n if (Object.keys(extraInfo).length > 0) {\n console.error('[SDK-ERROR] SDK-specific error details:');\n console.error(JSON.stringify(extraInfo, null, 2));\n }\n\n // Check for nested cause\n if (errObj.cause && typeof errObj.cause === 'object') {\n console.error('[SDK-ERROR] Error cause:');\n try {\n console.error(JSON.stringify(errObj.cause, null, 2));\n } catch {\n console.error('[SDK-ERROR] Error cause: [cannot serialize]');\n }\n }\n }\n\n // Log execution context\n console.error('[SDK-ERROR] Execution context:');\n console.error('[SDK-ERROR] skillCount:', skills.length);\n console.error('[SDK-ERROR] skillNames:', skillNames);\n console.error('[SDK-ERROR] scenarioId:', scenario.id);\n console.error('[SDK-ERROR] scenarioName:', scenario.name);\n console.error('[SDK-ERROR] cwd:', options.cwd);\n console.error('[SDK-ERROR] model:', options.model || DEFAULT_MODEL);\n console.error('[SDK-ERROR] aiGatewayUrl:', options.aiGatewayUrl);\n console.error(\n '[SDK-ERROR] hasAiGatewayHeaders:',\n !!options.aiGatewayHeaders\n );\n\n // Log environment info that might be relevant\n console.error('[SDK-ERROR] Environment info:');\n console.error('[SDK-ERROR] NODE_ENV:', process.env.NODE_ENV);\n console.error('[SDK-ERROR] HOME:', process.env.HOME);\n console.error('[SDK-ERROR] USER:', process.env.USER);\n console.error('[SDK-ERROR] SHELL:', process.env.SHELL);\n\n console.error('[SDK-ERROR] ==========================================');\n\n // Re-throw with comprehensive context - include ALL debug info for backend visibility\n const errObj = sdkError as Record<string, unknown>;\n\n // Capture SDK-specific properties that are critical for debugging\n const sdkSpecificInfo: Record<string, unknown> = {};\n const sdkErrorKeys = [\n 'exitCode',\n 'stderr',\n 'stdout',\n 'signal',\n 'killed',\n 'code',\n 'status',\n 'errno',\n 'syscall',\n 'spawnargs'\n ];\n for (const key of sdkErrorKeys) {\n if (errObj && key in errObj && errObj[key] !== undefined) {\n // Truncate long strings to avoid huge error messages\n const val = errObj[key];\n if (typeof val === 'string' && val.length > 500) {\n sdkSpecificInfo[key] = val.substring(0, 500) + '... [truncated]';\n } else {\n sdkSpecificInfo[key] = val;\n }\n }\n }\n\n // Capture cause if present\n let causeInfo: string | undefined;\n if (errObj?.cause && typeof errObj.cause === 'object') {\n try {\n const causeStr = JSON.stringify(errObj.cause, null, 2);\n causeInfo =\n causeStr.length > 500\n ? causeStr.substring(0, 500) + '... [truncated]'\n : causeStr;\n } catch {\n causeInfo = '[cannot serialize cause]';\n }\n }\n\n // Capture SDK environment configuration for debugging\n const sdkEnvDebug = {\n ANTHROPIC_BASE_URL: sdkEnv.ANTHROPIC_BASE_URL,\n hasANTHROPIC_API_KEY: !!sdkEnv.ANTHROPIC_API_KEY,\n hasANTHROPIC_AUTH_TOKEN: !!sdkEnv.ANTHROPIC_AUTH_TOKEN,\n hasANTHROPIC_CUSTOM_HEADERS: !!sdkEnv.ANTHROPIC_CUSTOM_HEADERS,\n ANTHROPIC_CUSTOM_HEADERS_preview: sdkEnv.ANTHROPIC_CUSTOM_HEADERS\n ? sdkEnv.ANTHROPIC_CUSTOM_HEADERS.split('\\n')\n .map((h) => h.split(':')[0])\n .join(', ')\n : undefined\n };\n\n const errorDetails = {\n messageCount,\n errorName,\n errorMessage,\n skillCount: skills.length,\n skillNames,\n scenarioId: scenario.id,\n model: options.model || DEFAULT_MODEL,\n sdkEnv: sdkEnvDebug,\n sdkError:\n Object.keys(sdkSpecificInfo).length > 0 ? sdkSpecificInfo : undefined,\n cause: causeInfo\n };\n\n // Emit error trace event for visibility in the UI\n if (traceContext) {\n const errorTraceEvent = {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: traceStepNumber + 1,\n type: LiveTraceEventType.DIAGNOSTIC,\n outputPreview: JSON.stringify(\n {\n event: 'sdk-execution-failed',\n error: errorMessage,\n errorName,\n messageCount,\n sdkEnv: sdkEnvDebug,\n sdkError: sdkSpecificInfo,\n cause: causeInfo\n },\n null,\n 2\n ).slice(0, 2000),\n timestamp: new Date().toISOString(),\n isComplete: true\n };\n emitTraceEvent(errorTraceEvent, traceContext.pushEvent);\n }\n\n throw new Error(\n `Claude SDK execution failed after ${messageCount} messages: ${errorMessage}` +\n `\\nDetails: ${JSON.stringify(errorDetails, null, 2)}` +\n (errorStack\n ? `\\nStack: ${errorStack.split('\\n').slice(0, 5).join('\\n')}`\n : '')\n );\n }\n\n // Emit completion trace event\n if (traceContext) {\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: traceStepNumber + 1,\n type: LiveTraceEventType.COMPLETION,\n outputPreview: 'Scenario execution completed',\n timestamp: new Date().toISOString(),\n isComplete: true\n },\n traceContext.pushEvent\n );\n }\n\n const endTime = new Date();\n const totalDurationMs = endTime.getTime() - startTime.getTime();\n\n // Process messages into steps for trace building\n const { steps, result: sdkResult } = processMessages(\n allMessages,\n startTime,\n endTime\n );\n\n // Extract final output, surfacing SDK errors if no output was produced\n const rawOutput = extractFinalOutput(allMessages);\n const isError = sdkResult?.subtype !== 'success';\n let outputText = rawOutput;\n if (!rawOutput && isError) {\n const hasErrors =\n sdkResult && 'errors' in sdkResult && sdkResult.errors?.length;\n const errorDetails = hasErrors\n ? (sdkResult.errors as string[]).join('; ')\n : (sdkResult?.subtype ?? 'unknown');\n outputText = `[ERROR] Agent execution failed: ${errorDetails}`;\n }\n const usage = extractTotalUsage(sdkResult);\n\n // Build LLM trace from captured steps\n const llmTrace = buildLLMTraceFromSteps(\n steps,\n totalDurationMs,\n usage,\n options.model || DEFAULT_MODEL\n );\n\n const conversation = buildConversation(allMessages);\n\n return {\n result: {\n outputText,\n durationMs: totalDurationMs,\n usage: {\n inputTokens: usage.inputTokens,\n outputTokens: usage.outputTokens,\n totalTokens: usage.totalTokens\n },\n costUsd: usage.costUsd\n },\n llmTrace,\n conversation\n };\n}\n\n/**\n * Build environment variables for the Claude Agent SDK.\n *\n * Starts with process.env to preserve PATH and other necessary variables,\n * then adds AI Gateway configuration:\n * - ANTHROPIC_BASE_URL: The gateway URL\n * - ANTHROPIC_CUSTOM_HEADERS: Headers in \"key:value\\nkey2:value2\" format\n *\n * @param options - Execution options containing gateway configuration\n * @returns Environment variables object for the SDK\n */\nfunction buildSdkEnvironment(\n options: ClaudeCodeExecutionOptions\n): Record<string, string | undefined> {\n // Start with process.env to preserve PATH and other necessary variables\n const env: Record<string, string | undefined> = { ...process.env };\n\n // The Claude Agent SDK requires ANTHROPIC_API_KEY in the environment.\n // We use a placeholder token because actual authentication is handled by the AI Gateway\n // via ANTHROPIC_BASE_URL and ANTHROPIC_CUSTOM_HEADERS.\n // The key format matches Anthropic's API key format (sk-ant-...) to pass any validation.\n // Note: Both ANTHROPIC_API_KEY and ANTHROPIC_AUTH_TOKEN are set for compatibility\n // with different SDK versions and internal validation.\n const placeholderApiKey =\n 'sk-ant-api03-placeholder-auth-handled-by-gateway-000000000000000000000000';\n env.ANTHROPIC_API_KEY = placeholderApiKey;\n env.ANTHROPIC_AUTH_TOKEN = placeholderApiKey;\n\n // Set the base URL for the Anthropic API (points to our AI Gateway)\n if (options.aiGatewayUrl) {\n env.ANTHROPIC_BASE_URL = `${options.aiGatewayUrl}/proxy/anthropic`;\n }\n\n // Format headers as \"key:value\\nkey2:value2\"\n // These headers contain the actual authentication for the AI Gateway\n if (options.aiGatewayHeaders) {\n const headerLines = Object.entries(options.aiGatewayHeaders)\n .map(([key, value]) => `${key}:${value}`)\n .join('\\n');\n env.ANTHROPIC_CUSTOM_HEADERS = headerLines;\n }\n\n return env;\n}\n\n/**\n * Type guard for assistant messages.\n */\nfunction isAssistantMessage(\n message: SDKMessage\n): message is SDKAssistantMessage {\n return message.type === 'assistant';\n}\n\n/**\n * Type guard for result messages.\n */\nfunction isResultMessage(message: SDKMessage): message is SDKResultMessage {\n return message.type === 'result';\n}\n\n/**\n * Process SDK messages into CapturedSteps for LLM trace building.\n * Uses actual timestamps from when messages were received to calculate durations.\n */\nfunction processMessages(\n timestampedMessages: TimestampedMessage[],\n startTime: Date,\n endTime: Date\n): {\n steps: CapturedStep[];\n result?: SDKResultMessage;\n} {\n const steps: CapturedStep[] = [];\n let result: SDKResultMessage | undefined;\n\n // Group assistant messages by UUID to combine streaming chunks\n // Track both the messages and their timestamps\n const assistantMessageGroups = new Map<\n string,\n {\n messages: SDKAssistantMessage[];\n firstReceivedAt: Date;\n lastReceivedAt: Date;\n }\n >();\n\n for (const { message, receivedAt } of timestampedMessages) {\n if (isAssistantMessage(message)) {\n const uuid = message.uuid;\n if (!assistantMessageGroups.has(uuid)) {\n assistantMessageGroups.set(uuid, {\n messages: [],\n firstReceivedAt: receivedAt,\n lastReceivedAt: receivedAt\n });\n }\n const group = assistantMessageGroups.get(uuid)!;\n group.messages.push(message);\n group.lastReceivedAt = receivedAt;\n } else if (isResultMessage(message)) {\n result = message;\n }\n }\n\n // Convert to array and sort by first received time to maintain order\n const sortedGroups = Array.from(assistantMessageGroups.values()).sort(\n (a, b) => a.firstReceivedAt.getTime() - b.firstReceivedAt.getTime()\n );\n\n // Merge consecutive UUID groups that share the same input_tokens into a\n // single \"API turn\". The SDK often emits separate messages (with different\n // UUIDs) for thinking, text, and tool_use within one API call \u2014 each\n // reporting the same cumulative input_tokens.\n type MergedTurn = {\n groups: typeof sortedGroups;\n firstReceivedAt: Date;\n lastReceivedAt: Date;\n };\n const mergedTurns: MergedTurn[] = [];\n for (const group of sortedGroups) {\n const lastMsg = group.messages[group.messages.length - 1];\n const inputTokens = lastMsg.message.usage.input_tokens;\n const prev = mergedTurns[mergedTurns.length - 1];\n const prevLastMsg = prev?.groups[prev.groups.length - 1].messages.at(-1);\n const prevInputTokens = prevLastMsg?.message.usage.input_tokens;\n\n if (prev && prevInputTokens === inputTokens) {\n prev.groups.push(group);\n prev.lastReceivedAt = group.lastReceivedAt;\n } else {\n mergedTurns.push({\n groups: [group],\n firstReceivedAt: group.firstReceivedAt,\n lastReceivedAt: group.lastReceivedAt\n });\n }\n }\n\n // Build a CapturedStep from each merged turn\n for (let i = 0; i < mergedTurns.length; i++) {\n const turn = mergedTurns[i];\n const stepStartTime = turn.firstReceivedAt;\n const nextStepStartTime =\n i < mergedTurns.length - 1 ? mergedTurns[i + 1].firstReceivedAt : endTime;\n const durationMs = nextStepStartTime.getTime() - stepStartTime.getTime();\n\n let text = '';\n let thinking = '';\n const toolCalls: Array<{\n toolName: string;\n toolUseId?: string;\n args: unknown;\n }> = [];\n let lastStopReason: string | null = null;\n let inputTokens = 0;\n let outputTokens = 0;\n let cacheReadTokens: number | undefined;\n let cacheWriteTokens: number | undefined;\n\n for (const group of turn.groups) {\n const lastMessage = group.messages[group.messages.length - 1];\n lastStopReason = lastMessage.message.stop_reason;\n\n // Use usage from the last group (they're identical within a turn)\n const msgUsage = lastMessage.message.usage;\n inputTokens = msgUsage.input_tokens;\n outputTokens = msgUsage.output_tokens;\n cacheReadTokens = msgUsage.cache_read_input_tokens ?? undefined;\n cacheWriteTokens = msgUsage.cache_creation_input_tokens ?? undefined;\n\n for (const block of lastMessage.message.content) {\n if (block.type === 'text') {\n text += block.text;\n } else if (block.type === 'thinking') {\n thinking += (block as { type: 'thinking'; thinking: string })\n .thinking;\n } else if (block.type === 'tool_use') {\n toolCalls.push({\n toolName: block.name,\n toolUseId: (block as { id?: string }).id,\n args: block.input\n });\n }\n }\n }\n\n steps.push({\n text,\n thinking: thinking || undefined,\n usage: {\n inputTokens,\n outputTokens,\n totalTokens: inputTokens + outputTokens,\n cacheReadTokens: cacheReadTokens || undefined,\n cacheWriteTokens: cacheWriteTokens || undefined\n },\n finishReason: mapStopReason(lastStopReason),\n toolCalls: toolCalls.length > 0 ? toolCalls : undefined,\n startedAt: stepStartTime,\n durationMs: Math.max(0, durationMs)\n });\n }\n\n // Correlate tool results from user messages to mark tool call errors.\n // Build a map of tool_use_id \u2192 error info from user messages.\n const toolResultErrors = new Map<string, string>();\n for (const { message } of timestampedMessages) {\n if (message.type !== 'user') continue;\n const content = (message as SDKUserMessage).message?.content;\n if (!Array.isArray(content)) continue;\n for (const block of content) {\n if (typeof block !== 'object' || block === null) continue;\n const b = block as unknown as Record<string, unknown>;\n if (\n b.type === 'tool_result' &&\n b.is_error === true &&\n typeof b.tool_use_id === 'string'\n ) {\n const errorContent =\n typeof b.content === 'string'\n ? b.content\n : Array.isArray(b.content)\n ? (b.content as Array<Record<string, unknown>>)\n .filter(\n (c) => c.type === 'text' && typeof c.text === 'string'\n )\n .map((c) => c.text as string)\n .join('\\n')\n : 'Tool call failed';\n toolResultErrors.set(b.tool_use_id, errorContent.slice(0, 500));\n }\n }\n }\n\n if (toolResultErrors.size > 0) {\n for (const step of steps) {\n if (!step.toolCalls) continue;\n for (const tc of step.toolCalls) {\n if (tc.toolUseId && toolResultErrors.has(tc.toolUseId)) {\n step.hasToolError = true;\n step.toolErrorContent = toolResultErrors.get(tc.toolUseId);\n break;\n }\n }\n }\n }\n\n return { steps, result };\n}\n\n/**\n * Map Anthropic stop reason to standard finish reason.\n */\nfunction mapStopReason(stopReason: string | null): string {\n switch (stopReason) {\n case 'end_turn':\n case 'stop_sequence':\n return 'stop';\n case 'tool_use':\n return 'tool-calls';\n case 'max_tokens':\n return 'length';\n default:\n return 'unknown';\n }\n}\n\n/**\n * Extract final output text from messages.\n */\nfunction extractFinalOutput(timestampedMessages: TimestampedMessage[]): string {\n // Find the last assistant message with text content\n for (let i = timestampedMessages.length - 1; i >= 0; i--) {\n const { message } = timestampedMessages[i];\n if (isAssistantMessage(message)) {\n for (const block of message.message.content) {\n if (block.type === 'text' && block.text) {\n return block.text;\n }\n }\n }\n }\n return '';\n}\n\n/**\n * Extract total usage from result message.\n */\nfunction extractTotalUsage(result: SDKResultMessage | undefined): {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n costUsd?: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n durationApiMs?: number;\n} {\n if (!result) {\n return { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n }\n\n const usage = result.usage;\n return {\n inputTokens: usage.input_tokens,\n outputTokens: usage.output_tokens,\n totalTokens: usage.input_tokens + usage.output_tokens,\n costUsd: result.total_cost_usd,\n cacheReadTokens: usage.cache_read_input_tokens || undefined,\n cacheWriteTokens: usage.cache_creation_input_tokens || undefined,\n durationApiMs: result.duration_api_ms || undefined\n };\n}\n\n/**\n * Build LLM trace from captured steps.\n * Calculates per-step costs using model pricing and sums tokens from steps as fallback.\n */\nfunction buildLLMTraceFromSteps(\n steps: CapturedStep[],\n totalDurationMs: number,\n usage: {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n costUsd?: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n durationApiMs?: number;\n },\n model: string\n): LLMTrace {\n const totalCost = usage.costUsd ?? 0;\n\n // Use \"effective\" input tokens (input + cache_read + cache_write) for\n // proportion calculations. The Anthropic API reports `input_tokens`\n // excluding cached tokens, so later turns with heavy caching can report\n // near-zero input_tokens while cache_read_input_tokens is large.\n // Using only input_tokens would starve cached turns of their fair share.\n const effectiveInput = (s: CapturedStep) =>\n s.usage.inputTokens +\n (s.usage.cacheReadTokens ?? 0) +\n (s.usage.cacheWriteTokens ?? 0);\n\n // The SDK may send multiple SDKAssistantMessages per API turn (thinking,\n // text, tool_use) each with a different UUID but reporting the SAME\n // cumulative input_tokens for that turn. Detect this by comparing the\n // per-step input sum against the result's authoritative total.\n // When duplicated, fall back to distributing by duration proportion.\n const totalStepEffectiveInput = steps.reduce(\n (sum, s) => sum + effectiveInput(s),\n 0\n );\n const totalStepDuration = steps.reduce((sum, s) => sum + s.durationMs, 0);\n const authoritativeEffectiveInput =\n usage.inputTokens +\n (usage.cacheReadTokens ?? 0) +\n (usage.cacheWriteTokens ?? 0);\n // 1.2x threshold: when per-step input tokens sum to >120% of the authoritative\n // total, the SDK duplicated cumulative counts across split messages within a\n // single API turn. The 20% buffer accounts for minor rounding differences.\n const inputTokensDuplicated =\n authoritativeEffectiveInput > 0 &&\n totalStepEffectiveInput > authoritativeEffectiveInput * 1.2;\n\n const traceSteps = steps\n .flatMap((step, turnIndex) => {\n let stepPromptTokens: number;\n let stepOutputTokens: number;\n let proportion: number;\n\n if (inputTokensDuplicated) {\n proportion =\n totalStepDuration > 0 ? step.durationMs / totalStepDuration : 0;\n stepPromptTokens = Math.round(usage.inputTokens * proportion);\n stepOutputTokens = Math.round(usage.outputTokens * proportion);\n } else {\n const stepEffective = effectiveInput(step);\n proportion =\n totalStepEffectiveInput > 0\n ? stepEffective / totalStepEffectiveInput\n : 0;\n stepPromptTokens = Math.round(usage.inputTokens * proportion);\n stepOutputTokens = Math.round(usage.outputTokens * proportion);\n }\n\n const costProportion = proportion;\n const toolCallCount = step.toolCalls?.length ?? 0;\n const isSuccess = step.finishReason !== 'error' && !step.hasToolError;\n const errorMsg = step.hasToolError\n ? (step.toolErrorContent ?? 'Tool call failed')\n : step.finishReason === 'error'\n ? 'Generation failed'\n : undefined;\n\n // Build a list of sub-steps for this turn. When the SDK merges\n // thinking, text, and tool_use into a single turn we split them\n // into separate trace steps for full visibility.\n const subSteps: Array<{\n id: string;\n stepNumber: number;\n turnIndex: number;\n type: LLMStepType;\n model: string;\n provider: string;\n startedAt: string;\n durationMs: number;\n tokenUsage: { prompt: number; completion: number; total: number };\n costUsd: number;\n toolName?: string;\n toolArguments?: string;\n outputPreview?: string;\n success: boolean;\n error?: string;\n }> = [];\n\n const stepCost = totalCost * costProportion;\n const hasThinking = !!step.thinking;\n const hasText = !!step.text;\n // Count how many sub-steps we'll produce so we can distribute tokens\n const thinkingSubSteps = hasThinking ? 1 : 0;\n const toolSubSteps = toolCallCount > 0 ? toolCallCount : 0;\n const textSubSteps = hasText && toolCallCount > 0 ? 1 : 0; // text step only when tools also present\n const totalSubSteps = thinkingSubSteps + toolSubSteps + textSubSteps || 1;\n\n // Emit a THINKING sub-step when thinking co-exists with text or tools\n if (hasThinking && (hasText || toolCallCount > 0)) {\n subSteps.push({\n id: randomUUID(),\n stepNumber: 0, // renumbered below\n turnIndex,\n type: LLMStepType.THINKING,\n model,\n provider: 'anthropic',\n startedAt: step.startedAt.toISOString(),\n durationMs: Math.round(step.durationMs / totalSubSteps),\n tokenUsage: {\n prompt: Math.round(stepPromptTokens / totalSubSteps),\n completion: Math.round(stepOutputTokens / totalSubSteps),\n total: Math.round(\n (stepPromptTokens + stepOutputTokens) / totalSubSteps\n )\n },\n costUsd: stepCost / totalSubSteps,\n outputPreview: step.thinking?.slice(0, 200),\n success: isSuccess,\n error: errorMsg\n });\n }\n\n // Emit TOOL_USE sub-steps \u2014 one per tool call\n if (toolCallCount > 0) {\n for (let tcIdx = 0; tcIdx < toolCallCount; tcIdx++) {\n const tc = step.toolCalls![tcIdx];\n const isLast = tcIdx === toolCallCount - 1 && textSubSteps === 0;\n // Remaining budget after thinking step\n const toolBudgetSteps = toolSubSteps + textSubSteps;\n const toolFraction = toolBudgetSteps > 0 ? 1 / toolBudgetSteps : 1;\n const remainingFraction =\n (totalSubSteps - thinkingSubSteps) / totalSubSteps;\n\n subSteps.push({\n id: randomUUID(),\n stepNumber: 0,\n turnIndex,\n type: LLMStepType.TOOL_USE,\n model,\n provider: 'anthropic',\n startedAt: step.startedAt.toISOString(),\n durationMs: isLast\n ? step.durationMs -\n subSteps.reduce((s, ss) => s + ss.durationMs, 0)\n : Math.round(step.durationMs * remainingFraction * toolFraction),\n tokenUsage: {\n prompt: Math.round(\n stepPromptTokens * remainingFraction * toolFraction\n ),\n completion: Math.round(\n stepOutputTokens * remainingFraction * toolFraction\n ),\n total: Math.round(\n (stepPromptTokens + stepOutputTokens) *\n remainingFraction *\n toolFraction\n )\n },\n costUsd: stepCost * remainingFraction * toolFraction,\n toolName: tc.toolName,\n toolArguments: JSON.stringify(tc.args),\n outputPreview:\n tcIdx === 0 && !hasText\n ? (step.text || step.thinking)?.slice(0, 200)\n : undefined,\n success: isSuccess,\n error: errorMsg\n });\n }\n }\n\n // Emit a COMPLETION sub-step for text when tools were also present\n // (otherwise the text output would be lost)\n if (hasText && toolCallCount > 0) {\n subSteps.push({\n id: randomUUID(),\n stepNumber: 0,\n turnIndex,\n type: LLMStepType.COMPLETION,\n model,\n provider: 'anthropic',\n startedAt: step.startedAt.toISOString(),\n durationMs:\n step.durationMs - subSteps.reduce((s, ss) => s + ss.durationMs, 0),\n tokenUsage: {\n prompt:\n stepPromptTokens -\n subSteps.reduce((s, ss) => s + ss.tokenUsage.prompt, 0),\n completion:\n stepOutputTokens -\n subSteps.reduce((s, ss) => s + ss.tokenUsage.completion, 0),\n total:\n stepPromptTokens +\n stepOutputTokens -\n subSteps.reduce((s, ss) => s + ss.tokenUsage.total, 0)\n },\n costUsd: stepCost - subSteps.reduce((s, ss) => s + ss.costUsd, 0),\n outputPreview: step.text?.slice(0, 200),\n success: isSuccess,\n error: errorMsg\n });\n }\n\n // Fallback: if no sub-steps were produced (pure text or pure thinking),\n // emit a single step as before.\n if (subSteps.length === 0) {\n const stepType =\n hasThinking && !hasText\n ? LLMStepType.THINKING\n : LLMStepType.COMPLETION;\n subSteps.push({\n id: randomUUID(),\n stepNumber: 0,\n turnIndex,\n type: stepType,\n model,\n provider: 'anthropic',\n startedAt: step.startedAt.toISOString(),\n durationMs: step.durationMs,\n tokenUsage: {\n prompt: stepPromptTokens,\n completion: stepOutputTokens,\n total: stepPromptTokens + stepOutputTokens\n },\n costUsd: stepCost,\n outputPreview: (step.text || step.thinking)?.slice(0, 200),\n success: isSuccess,\n error: errorMsg\n });\n }\n\n return subSteps;\n })\n .map((s, i) => ({ ...s, stepNumber: i + 1 }));\n\n const finalTokens = {\n prompt: usage.inputTokens,\n completion: usage.outputTokens,\n total: usage.totalTokens\n };\n\n // Build stepTypeBreakdown by grouping trace steps by type\n const stepTypeBreakdown: Record<\n string,\n { count: number; durationMs: number; tokens: number; costUsd: number }\n > = {};\n for (const ts of traceSteps) {\n const entry = stepTypeBreakdown[ts.type] ?? {\n count: 0,\n durationMs: 0,\n tokens: 0,\n costUsd: 0\n };\n entry.count += 1;\n entry.durationMs += ts.durationMs;\n entry.tokens += ts.tokenUsage.total;\n entry.costUsd += ts.costUsd;\n stepTypeBreakdown[ts.type] = entry;\n }\n\n const summary = {\n totalSteps: traceSteps.length,\n totalTurns: steps.length,\n totalDurationMs,\n totalTokens: finalTokens,\n totalCostUsd: totalCost,\n modelBreakdown: {\n [model]: {\n count: traceSteps.length,\n durationMs: totalDurationMs,\n tokens: finalTokens.total,\n costUsd: totalCost\n }\n },\n modelsUsed: [model],\n stepTypeBreakdown\n };\n\n return {\n id: randomUUID(),\n steps: traceSteps,\n summary\n };\n}\n", "import { mkdir } from 'fs/promises';\nimport { join } from 'path';\nimport type {\n GitHubSource,\n SkillFile,\n SkillWithLatestVersion\n} from '@wix/evalforge-types';\nimport { fetchGitHubFolder } from '@wix/evalforge-github-client';\nimport { writeFilesToDirectory } from '../../utils/write-files.js';\n\nexport type FetchGitHubFolderFn = (\n source: GitHubSource,\n options?: { userAgent?: string }\n) => Promise<SkillFile[]>;\n\n/**\n * Write all skills to the filesystem so Claude Agent SDK can discover them.\n *\n * Content resolution:\n * 1. Pinned (version has `files`): writes all files from the stored snapshot\n * 2. Live (skill has `source`, no pinned files): fetches from GitHub at runtime\n *\n * @param cwd - Working directory where .claude/skills/ will be created\n * @param skills - All skills to write\n * @param fetchFn - Function to fetch files from GitHub (defaults to fetchGitHubFolder)\n */\nexport async function writeSkillsToFilesystem(\n cwd: string,\n skills: SkillWithLatestVersion[],\n fetchFn: FetchGitHubFolderFn = fetchGitHubFolder\n): Promise<void> {\n await Promise.all(\n skills.map((skill) => writeSkillToFilesystem(cwd, skill, fetchFn))\n );\n}\n\nexport async function writeSkillToFilesystem(\n cwd: string,\n skill: SkillWithLatestVersion,\n fetchFn: FetchGitHubFolderFn = fetchGitHubFolder\n): Promise<void> {\n const skillName = skill.name;\n const skillDir = join(cwd, '.claude', 'skills', skillName);\n await mkdir(skillDir, { recursive: true });\n\n const version = skill.latestVersion;\n\n if (version?.files && version.files.length > 0) {\n await writeFilesToDirectory(skillDir, version.files);\n console.log(\n `[Skill] ${skillName}: wrote ${version.files.length} file(s) from snapshot`\n );\n } else if (skill.source) {\n try {\n const files = await fetchFn(skill.source, {\n userAgent: 'EvalForge-Evaluator'\n });\n await writeFilesToDirectory(skillDir, files);\n console.log(\n `[Skill] ${skillName}: wrote ${files.length} file(s) from GitHub (live)`\n );\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n console.error(\n `[Skill] ${skillName}: GitHub fetch failed: ${message}, no files to fall back to`\n );\n throw new Error(\n `Failed to write skill ${skillName} to filesystem: ${message}`\n );\n }\n } else {\n throw new Error(`Skill ${skillName} has no files and no source configured`);\n }\n}\n\n/**\n * Write skill files from a snapshot array to the filesystem.\n * @deprecated Use writeFilesToDirectory from utils/write-files.ts instead\n */\nexport const writeSkillFiles = writeFilesToDirectory;\n", "// 60-minute ceiling for runs with no turn limit. Keeps jobs from running\n// indefinitely while giving complex scenarios enough room to finish.\nexport const UNLIMITED_RUN_TIMEOUT_MS = 60 * 60_000;\n\n/**\n * Returns the wall-clock timeout for an agent execution.\n *\n * - Explicit `maxDurationMs` always wins.\n * - Unlimited runs (`maxTurns === undefined`) get a 60-minute ceiling.\n * - Capped runs get 1 minute per turn, floored at 5 minutes.\n */\nexport function resolveTimeoutMs(\n maxTurns: number | undefined,\n maxDurationMs?: number\n): number {\n if (maxDurationMs !== undefined) return maxDurationMs;\n if (maxTurns === undefined) return UNLIMITED_RUN_TIMEOUT_MS;\n return Math.max(300_000, maxTurns * 60_000);\n}\n", "import { writeFile } from 'fs/promises';\nimport { join } from 'path';\nimport type { MCPEntity } from '@wix/evalforge-types';\nimport { MCP_SERVERS_JSON_KEY } from '@wix/evalforge-types';\nimport { resolveMcpPlaceholders } from '../shared/resolve-mcp-placeholders.js';\n\n/**\n * Write .mcp.json at the project root (cwd) for Claude Code to discover MCPs.\n *\n * The config field already contains the keyed `.mcp.json` entry\n * (e.g. `{ \"wix-mcp\": { \"type\": \"http\", ... } }`), so each MCP's config\n * is spread directly into the mcpServers object.\n *\n * Any `{{placeholder}}` values in the config are resolved before writing\n * (e.g. `{{wix-auth-token}}` \u2192 token from ~/.wix/auth/api-key.json).\n *\n * @see https://code.claude.com/docs/en/mcp#mcp-installation-scopes\n * @param cwd - Working directory (project root for Claude Code)\n * @param mcps - MCP entities whose config is merged into mcpServers\n */\nexport async function writeMcpToFilesystem(\n cwd: string,\n mcps: MCPEntity[]\n): Promise<void> {\n if (mcps.length === 0) return;\n\n const mcpServers: Record<string, Record<string, unknown>> = {};\n for (const mcp of mcps) {\n const config = mcp.config as Record<string, unknown>;\n for (const [key, value] of Object.entries(config)) {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new Error(\n `MCP \"${mcp.name}\" has invalid config: value for key \"${key}\" must be an object (got ${typeof value}). ` +\n 'Config must use keyed format, e.g. { \"server-name\": { \"command\": \"npx\", ... } }'\n );\n }\n mcpServers[key] = value as Record<string, unknown>;\n }\n }\n\n const resolvedServers = await resolveMcpPlaceholders(mcpServers, { cwd });\n\n const content = JSON.stringify(\n { [MCP_SERVERS_JSON_KEY]: resolvedServers },\n null,\n 2\n );\n const filePath = join(cwd, '.mcp.json');\n await writeFile(filePath, content, 'utf8');\n\n console.log(`[MCP] Written to ${filePath}`);\n}\n", "/**\n * MCP Config Placeholder Resolution\n *\n * Resolves `{{placeholder}}` patterns in MCP config values at eval startup.\n *\n * Supported placeholders:\n * - {{wix-auth-token}} \u2192 token from ~/.wix/auth/api-key.json\n * - {{wix-auth-user-id}} \u2192 userInfo.userId from api-key.json\n * - {{cwd}} \u2192 environment folder (working directory)\n */\n\nimport { readFile } from 'fs/promises';\nimport { join } from 'path';\nimport { homedir } from 'os';\nimport {\n findPlaceholders,\n resolveValue\n} from '../../../resolve-placeholders.js';\n\nexport { findPlaceholders, resolveValue };\n\nconst WIX_AUTH_FILE = join(homedir(), '.wix', 'auth', 'api-key.json');\n\ninterface WixApiKeyAuth {\n token: string;\n accountId: string;\n userInfo: {\n userId: string;\n email: string;\n };\n}\n\nexport interface ResolveMcpPlaceholdersOptions {\n cwd?: string;\n authFilePath?: string;\n}\n\n/**\n * Read Wix auth placeholders from ~/.wix/auth/api-key.json.\n * Returns an empty map when the file is missing or malformed.\n *\n * @param authFilePath - Override for testing (default: ~/.wix/auth/api-key.json)\n */\nexport async function loadWixAuthPlaceholders(\n authFilePath = WIX_AUTH_FILE\n): Promise<Record<string, string>> {\n try {\n const content = await readFile(authFilePath, 'utf-8');\n const auth = JSON.parse(content) as WixApiKeyAuth;\n\n if (!auth.token || !auth.userInfo?.userId) {\n return {};\n }\n\n return {\n 'wix-auth-token': auth.token,\n 'wix-auth-user-id': auth.userInfo.userId\n };\n } catch (err) {\n console.warn(\n `[MCP] Could not load Wix auth file: ${(err as Error).message}`\n );\n return {};\n }\n}\n\n/**\n * Resolve all `{{...}}` placeholders in an MCP server config map.\n *\n * Loads available placeholder values (Wix auth file + cwd),\n * scans the config for placeholders, and fails if any are unresolvable.\n *\n * @param mcpServers - The mcpServers map (server-name \u2192 config)\n * @param options - Optional cwd and authFilePath overrides\n * @throws When a config references placeholders that cannot be resolved\n */\nexport async function resolveMcpPlaceholders(\n mcpServers: Record<string, Record<string, unknown>>,\n options: ResolveMcpPlaceholdersOptions = {}\n): Promise<Record<string, Record<string, unknown>>> {\n const needed = findPlaceholders(mcpServers);\n if (needed.length === 0) {\n return mcpServers;\n }\n\n const placeholders: Record<string, string> = {\n ...(await loadWixAuthPlaceholders(options.authFilePath)),\n ...(options.cwd ? { cwd: options.cwd } : {})\n };\n\n const unresolved = needed.filter((key) => !(key in placeholders));\n if (unresolved.length > 0) {\n throw new Error(\n `MCP config contains unresolvable placeholders: ${unresolved.map((k) => `{{${k}}}`).join(', ')}. ` +\n 'Ensure ~/.wix/auth/api-key.json exists (run `npx @wix/cli login`).'\n );\n }\n\n console.log(`[MCP] Resolved ${needed.length} placeholder(s)`);\n\n return resolveValue(mcpServers, placeholders) as Record<\n string,\n Record<string, unknown>\n >;\n}\n", "import { mkdir, writeFile } from 'fs/promises';\nimport { join } from 'path';\nimport type { SubAgent, GitHubSource } from '@wix/evalforge-types';\nimport {\n fetchGitHubFile,\n type FetchGitHubFolderOptions\n} from '@wix/evalforge-github-client';\n\n/** Signature for the single-file GitHub fetch function (injectable for tests). */\nexport type FetchGitHubFileFn = (\n source: GitHubSource,\n options?: FetchGitHubFolderOptions\n) => Promise<string>;\n\n/** Directory where Claude Code discovers project sub-agents */\nconst AGENTS_DIR = '.claude/agents';\n\n/**\n * Build a unique, sanitized filename for a sub-agent.\n *\n * Sanitizes to lowercase alphanumeric + hyphens, falls back to\n * \"sub-agent-{index}\" for empty names, and appends a numeric suffix\n * (-2, -3, ...) when a name has already been used.\n */\nfunction toAgentFilename(\n name: string,\n index: number,\n nameCount: Map<string, number>\n): string {\n const base =\n (name || '')\n .toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^a-z0-9-]/g, '')\n .replace(/^-+|-+$/g, '') || `sub-agent-${index}`;\n\n const count = nameCount.get(base) ?? 0;\n nameCount.set(base, count + 1);\n\n return count === 0 ? base : `${base}-${count + 1}`;\n}\n\n/**\n * Resolve the markdown content for a sub-agent.\n * If a GitHub source is configured, live-fetches the latest .md file.\n * Throws if the fetch fails (consistent with skill content resolution).\n * Otherwise falls back to the inline subAgentMd content.\n */\nasync function resolveSubAgentContent(\n agent: SubAgent,\n fetchFn: FetchGitHubFileFn\n): Promise<string> {\n if (agent.source) {\n try {\n const content = await fetchFn(agent.source, {\n userAgent: 'EvalForge-Evaluator'\n });\n console.log(\n `[SubAgents] Fetched \"${agent.name}\" from ${agent.source.owner}/${agent.source.repo}/${agent.source.path}@${agent.source.ref}`\n );\n return content;\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n console.error(\n `[SubAgents] \"${agent.name}\": GitHub fetch failed: ${message}`\n );\n throw new Error(\n `Failed to fetch sub-agent \"${agent.name}\" from GitHub: ${message}`\n );\n }\n }\n if (!agent.subAgentMd) {\n console.warn(\n `[SubAgents] \"${agent.name}\" has empty inline content \u2013 the agent file will be blank`\n );\n }\n return agent.subAgentMd;\n}\n\n/**\n * Write sub-agent markdown files to .claude/agents/ for Claude Code to discover.\n *\n * For sub-agents with a GitHub source, the latest .md file is live-fetched.\n * For inline sub-agents, the stored subAgentMd is used directly.\n *\n * @see https://code.claude.com/docs/en/sub-agents#write-subagent-files\n * @param cwd - Working directory (project root for Claude Code)\n * @param subAgents - Sub-agent entities to write\n * @param fetchFn - Optional fetch function for testing (defaults to fetchGitHubFile)\n */\nexport async function writeSubAgentsToFilesystem(\n cwd: string,\n subAgents: SubAgent[],\n fetchFn: FetchGitHubFileFn = fetchGitHubFile\n): Promise<void> {\n if (subAgents.length === 0) return;\n\n const agentsDir = join(cwd, AGENTS_DIR);\n await mkdir(agentsDir, { recursive: true });\n\n const nameCount = new Map<string, number>();\n\n for (const [i, agent] of subAgents.entries()) {\n const filename = toAgentFilename(agent.name, i, nameCount);\n const filePath = join(agentsDir, `${filename}.md`);\n const content = await resolveSubAgentContent(agent, fetchFn);\n await writeFile(filePath, content, 'utf8');\n }\n\n console.log(`[SubAgents] Written to ${agentsDir}`);\n}\n", "import { mkdir, writeFile, readFile } from 'fs/promises';\nimport { join, resolve, sep } from 'path';\nimport type { Rule } from '@wix/evalforge-types';\n\nconst CURSOR_RULES_DIR = '.cursor/rules';\n\n/**\n * Build a sanitized filename from a rule name.\n *\n * Sanitizes to lowercase alphanumeric + hyphens, falls back to\n * \"rule-{index}\" for empty names, and appends a numeric suffix\n * (-2, -3, ...) when a name has already been used.\n */\nfunction toRuleFilename(\n name: string,\n index: number,\n nameCount: Map<string, number>\n): string {\n const base =\n (name || '')\n .toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^a-z0-9-]/g, '')\n .replace(/^-+|-+$/g, '') || `rule-${index}`;\n\n const count = nameCount.get(base) ?? 0;\n nameCount.set(base, count + 1);\n\n return count === 0 ? base : `${base}-${count + 1}`;\n}\n\n/**\n * Safely append content to a file, creating it if it doesn't exist.\n * Separates appended blocks with double newlines.\n */\nasync function appendToFile(filePath: string, content: string): Promise<void> {\n let existing = '';\n try {\n existing = await readFile(filePath, 'utf8');\n } catch {\n // File doesn't exist yet\n }\n\n const merged = existing ? `${existing.trimEnd()}\\n\\n${content}` : content;\n\n await writeFile(filePath, merged, 'utf8');\n}\n\nfunction validateGenericDirectory(dir: string, cwd: string): string {\n const trimmed = dir.trim();\n if (!trimmed) {\n throw new Error(`Generic rule directory must not be empty`);\n }\n if (\n trimmed.startsWith('/') ||\n trimmed.startsWith('\\\\') ||\n trimmed.startsWith('~')\n ) {\n throw new Error(`Generic rule directory must be relative, got: \"${dir}\"`);\n }\n const segments = trimmed.split(/[\\\\/]/);\n if (segments.some((s) => s === '..')) {\n throw new Error(\n `Generic rule directory may not contain \"..\", got: \"${dir}\"`\n );\n }\n const normalizedCwd = cwd.endsWith(sep) ? cwd.slice(0, -1) : cwd;\n const resolved = resolve(normalizedCwd, trimmed);\n if (!resolved.startsWith(normalizedCwd + sep)) {\n throw new Error(\n `Generic rule directory escapes the working directory: \"${dir}\"`\n );\n }\n return trimmed;\n}\n\n/**\n * Write rule content to the filesystem based on each rule's `ruleType`.\n *\n * Placement:\n * - `claude-md` -> `{cwd}/CLAUDE.md` (appends if multiple)\n * - `agents-md` -> `{cwd}/AGENTS.md` (appends if multiple)\n * - `cursor-rule` -> `{cwd}/.cursor/rules/{name}.md` (one file per rule)\n * - `generic` -> `{cwd}/{rule.directory}` (defaults to `.opencode/rules`)\n *\n * @param cwd - Working directory (project root for Claude Code)\n * @param rules - Rule entities to write\n */\nexport async function writeRulesToFilesystem(\n cwd: string,\n rules: Rule[]\n): Promise<void> {\n if (rules.length === 0) return;\n\n const nameCount = new Map<string, number>();\n let hasCursorRules = false;\n\n for (const [i, rule] of rules.entries()) {\n switch (rule.ruleType) {\n case 'claude-md': {\n await appendToFile(join(cwd, 'CLAUDE.md'), rule.content);\n break;\n }\n case 'agents-md': {\n await appendToFile(join(cwd, 'AGENTS.md'), rule.content);\n break;\n }\n case 'cursor-rule': {\n if (!hasCursorRules) {\n await mkdir(join(cwd, CURSOR_RULES_DIR), { recursive: true });\n hasCursorRules = true;\n }\n const filename = toRuleFilename(rule.name, i, nameCount);\n const filePath = join(cwd, CURSOR_RULES_DIR, `${filename}.md`);\n await writeFile(filePath, rule.content, 'utf8');\n break;\n }\n case 'generic': {\n const directory = validateGenericDirectory(\n rule.directory ?? '.opencode/rules',\n cwd\n );\n const dirPath = join(cwd, directory);\n await mkdir(dirPath, { recursive: true });\n const filename = toRuleFilename(rule.name, i, nameCount);\n await writeFile(join(dirPath, `${filename}.md`), rule.content, 'utf8');\n break;\n }\n default: {\n const _exhaustive: never = rule.ruleType;\n throw new Error(`Unhandled ruleType: ${_exhaustive}`);\n }\n }\n }\n\n console.log(`[Rules] Written ${rules.length} rule(s) to ${cwd}`);\n}\n", "import type { ConversationMessage } from '@wix/evalforge-types';\nimport type { TimestampedMessage } from './execute.js';\nimport type {\n SDKAssistantMessage,\n SDKUserMessage,\n SDKSystemMessage,\n SDKMessage\n} from '@anthropic-ai/claude-agent-sdk' with { 'resolution-mode': 'import' };\n\nfunction isAssistantMessage(\n message: SDKMessage\n): message is SDKAssistantMessage {\n return message.type === 'assistant';\n}\n\n/**\n * Build a full conversation from raw SDK messages.\n * Extracts text, thinking, tool_use, and tool_result blocks into a\n * serializable ConversationMessage array for storage and later display.\n */\nexport function buildConversation(\n timestampedMessages: TimestampedMessage[]\n): ConversationMessage[] {\n const messages: ConversationMessage[] = [];\n\n for (const { message, receivedAt } of timestampedMessages) {\n const timestamp = receivedAt.toISOString();\n\n if (isAssistantMessage(message)) {\n const content: ConversationMessage['content'] = [];\n for (const block of message.message.content) {\n if (block.type === 'text') {\n content.push({ type: 'text', text: block.text });\n } else if (block.type === 'thinking') {\n content.push({\n type: 'thinking',\n thinking: (block as { type: 'thinking'; thinking: string }).thinking\n });\n } else if (block.type === 'tool_use') {\n content.push({\n type: 'tool_use',\n toolName: block.name,\n toolId: block.id,\n input: block.input\n });\n }\n }\n if (content.length > 0) {\n messages.push({ role: 'assistant', content, timestamp });\n }\n } else if (message.type === 'user') {\n const userMsg = message as SDKUserMessage;\n const content: ConversationMessage['content'] = [];\n const msgContent = userMsg.message?.content;\n\n if (typeof msgContent === 'string') {\n content.push({ type: 'text', text: msgContent });\n } else if (Array.isArray(msgContent)) {\n for (const block of msgContent) {\n if (typeof block === 'object' && block !== null) {\n const b = block as unknown as Record<string, unknown>;\n if (b.type === 'tool_result') {\n const rawContent = b.content;\n let text = '';\n if (typeof rawContent === 'string') {\n text = rawContent;\n } else if (Array.isArray(rawContent)) {\n text = rawContent\n .filter(\n (c: unknown) =>\n typeof c === 'object' &&\n c !== null &&\n (c as Record<string, unknown>).type === 'text'\n )\n .map((c: unknown) => (c as { text: string }).text)\n .join('\\n');\n }\n content.push({\n type: 'tool_result',\n toolUseId: String(b.tool_use_id ?? ''),\n content: text,\n isError: b.is_error === true ? true : undefined\n });\n } else if (b.type === 'text' && typeof b.text === 'string') {\n content.push({ type: 'text', text: b.text });\n }\n }\n }\n }\n\n if (content.length > 0) {\n messages.push({ role: 'user', content, timestamp });\n }\n } else if (message.type === 'system') {\n const sysMsg = message as SDKSystemMessage;\n messages.push({\n role: 'system',\n content: [{ type: 'text', text: sysMsg.subtype || 'system' }],\n timestamp\n });\n }\n }\n\n return messages;\n}\n", "import type { LiveTraceEvent } from '@wix/evalforge-types';\nimport { TRACE_EVENT_PREFIX } from '@wix/evalforge-types';\n\n/**\n * Emit a live trace event to stdout for the backend to capture.\n *\n * When a `pushEvent` callback is provided (remote job execution, where stdout\n * is not accessible), the event is also pushed to the backend through it.\n * The callback is fire-and-forget; it must not throw.\n */\nexport function emitTraceEvent(\n event: LiveTraceEvent,\n pushEvent?: (event: LiveTraceEvent) => void\n): void {\n console.log(`${TRACE_EVENT_PREFIX}${JSON.stringify(event)}`);\n\n pushEvent?.(event);\n}\n", "/**\n * Claude Code agent adapter module.\n *\n * This module provides the Claude Code implementation of the AgentAdapter\n * interface. It wraps the @anthropic-ai/claude-agent-sdk to execute skills\n * with full LLM trace support.\n *\n * The adapter is automatically registered with the default registry when\n * this module is imported.\n */\n\n// Export the adapter class and singleton instance\nexport { ClaudeCodeAdapter, claudeCodeAdapter } from './claude-code-adapter.js';\n\n// Export the execution function for direct use if needed\nexport { executeWithClaudeCode } from './execute.js';\nexport { buildConversation } from './build-conversation.js';\n\n// Export Claude-specific types\nexport type {\n ClaudeCodeExecutionOptions,\n ClaudeCodeExecutionResult\n} from './types.js';\n\n// Re-export TraceContext from the shared types\nexport type { TraceContext } from '@wix/evalforge-types';\n\n// Register the adapter with the default registry\nimport { defaultRegistry } from '../registry.js';\nimport { claudeCodeAdapter } from './claude-code-adapter.js';\n\ndefaultRegistry.register(claudeCodeAdapter);\n", "import type {\n AgentAdapter,\n AgentExecutionContext,\n AgentExecutionResult,\n OpenCodeConfig\n} from '@wix/evalforge-types';\nimport { AgentRunCommand, OpenCodeConfigSchema } from '@wix/evalforge-types';\nimport { executeWithOpenCode, prepareOpenCodeEnvironment } from './execute.js';\nimport type { OpenCodeExecutionOptions } from './types.js';\n\n/**\n * OpenCode agent adapter.\n *\n * Implements the AgentAdapter interface by spawning the `opencode` CLI\n * and parsing NDJSON events from stdout.\n *\n * Supported commands: 'opencode'\n */\nexport class OpenCodeAdapter implements AgentAdapter {\n readonly id = 'opencode';\n readonly name = 'OpenCode';\n readonly supportedCommands = [AgentRunCommand.OPENCODE] as const;\n\n async prepareEnvironment(context: AgentExecutionContext): Promise<void> {\n await prepareOpenCodeEnvironment(context.cwd, context.skills, {\n mcps: context.mcps,\n subAgents: context.subAgents,\n rules: context.rules,\n systemPrompt: context.systemPrompt\n });\n }\n\n async execute(context: AgentExecutionContext): Promise<AgentExecutionResult> {\n const {\n skills,\n scenario,\n cwd,\n config,\n aiGatewayUrl,\n aiGatewayHeaders,\n traceContext,\n mcps,\n subAgents,\n rules,\n systemPrompt\n } = context;\n\n // Parse config with typed Zod schema\n const typed = config\n ? OpenCodeConfigSchema.passthrough().safeParse(config)\n : undefined;\n const cfg: OpenCodeConfig | undefined = typed?.success\n ? typed.data\n : undefined;\n\n // maxTurns 0 = unlimited\n const rawMaxTurns = cfg?.maxTurns;\n const maxTurns = rawMaxTurns === 0 ? undefined : rawMaxTurns;\n\n const options: OpenCodeExecutionOptions = {\n cwd,\n model: cfg?.model,\n temperature: cfg?.temperature,\n topP: cfg?.topP,\n maxTurns,\n thinkingVariant: cfg?.thinkingVariant,\n maxDurationMs: cfg?.maxDurationMs,\n aiGatewayUrl,\n aiGatewayHeaders,\n traceContext,\n mcps,\n subAgents,\n rules,\n systemPrompt,\n config\n };\n\n const { result, llmTrace, conversation } = await executeWithOpenCode(\n skills,\n scenario,\n options\n );\n\n return {\n outputText: result.outputText,\n durationMs: result.durationMs,\n usage: {\n inputTokens: result.usage.inputTokens,\n outputTokens: result.usage.outputTokens,\n totalTokens: result.usage.totalTokens\n },\n costUsd: result.costUsd,\n llmTrace,\n conversation\n };\n }\n}\n\nexport const openCodeAdapter = new OpenCodeAdapter();\n", "import { spawn, type ChildProcess } from 'child_process';\nimport { resolveTimeoutMs } from '../timeout.js';\nimport type {\n SkillWithLatestVersion,\n TestScenario,\n LLMTrace,\n LiveTraceEvent,\n ConversationMessage,\n TriggerPromptImage\n} from '@wix/evalforge-types';\nimport {\n DEFAULT_EVALUATOR_SYSTEM_PROMPT,\n LiveTraceEventType\n} from '@wix/evalforge-types';\nimport type {\n OpenCodeExecutionOptions,\n OpenCodeExecutionResult,\n OpenCodeEvent,\n OpenCodeTextEvent,\n OpenCodeToolUseEvent,\n OpenCodeStepFinishEvent,\n TimestampedOpenCodeEvent,\n TraceContext\n} from './types.js';\nimport { tryParseJson } from './types.js';\nimport { writeSkillsToFilesystem } from './write-skills.js';\nimport { writeSubAgentsToFilesystem } from './write-sub-agents.js';\nimport { writeRulesToFilesystem } from '../claude-code/write-rules.js';\nimport { buildOpenCodeEnv } from './config.js';\nimport { buildLLMTrace } from './build-trace.js';\nimport { buildConversation } from './build-conversation.js';\nimport { emitTraceEvent } from '../shared/trace-emit.js';\nimport { writeFile, mkdir } from 'fs/promises';\nimport { join } from 'path';\n\nconst KILL_GRACE_PERIOD_MS = 5_000;\nconst IDLE_TIMEOUT_MS = 120_000;\nconst IDLE_CHECK_INTERVAL_MS = 15_000;\nconst MAX_IDLE_RETRIES = 3;\n\n/**\n * Extract a human-readable action description from a tool event.\n */\nfunction extractToolAction(\n toolName: string,\n args: Record<string, unknown> | undefined\n): string {\n if (!toolName) return 'Using tool...';\n\n if (\n (toolName === 'Task' || toolName === 'dispatch_agent') &&\n args?.description\n ) {\n const desc = String(args.description).slice(0, 55);\n return `Task: ${desc}${String(args.description).length > 55 ? '...' : ''}`;\n }\n\n if (\n (toolName === 'Bash' || toolName === 'bash' || toolName === 'execute') &&\n args?.command\n ) {\n const cmd = String(args.command).slice(0, 50);\n return `Running: ${cmd}${String(args.command).length > 50 ? '...' : ''}`;\n }\n\n if (args?.file_path || args?.path || args?.target_file) {\n const filePath = String(\n args.file_path || args.path || args.target_file\n ).slice(0, 50);\n if (/write|edit/i.test(toolName)) return `Writing: ${filePath}`;\n if (/read|view/i.test(toolName)) return `Reading: ${filePath}`;\n }\n\n return `Using ${toolName}...`;\n}\n\n/**\n * Write trigger prompt images to disk so they can be passed via --file flags.\n *\n * Note: OpenCode CLI's --file flag currently has a known MIME-type detection bug\n * (hardcodes text/plain for all files). Images are still written to the cwd so the\n * agent can access them via its tools even if the CLI doesn't render them visually.\n *\n * @param cwd - Working directory where images will be written\n * @param images - Array of images with base64 data and metadata\n * @returns Array of absolute file paths for the written images\n */\nexport async function writePromptImages(\n cwd: string,\n images: TriggerPromptImage[]\n): Promise<string[]> {\n const imagesDir = join(cwd, 'prompt-images');\n await mkdir(imagesDir, { recursive: true });\n\n const filePaths: string[] = [];\n for (let i = 0; i < images.length; i++) {\n const img = images[i];\n const ext = img.mediaType.split('/')[1] || 'png';\n const filename = `image-${i}.${ext}`;\n const filepath = join(imagesDir, filename);\n\n const buffer = Buffer.from(img.base64, 'base64');\n await writeFile(filepath, buffer);\n filePaths.push(filepath);\n }\n\n return filePaths;\n}\n\n/**\n * Create a LiveTraceEvent from an NDJSON event.\n */\nfunction createTraceEventFromNdjson(\n evt: OpenCodeEvent,\n context: TraceContext,\n stepNumber: number,\n isComplete: boolean\n): LiveTraceEvent | null {\n const base = {\n evalRunId: context.evalRunId,\n scenarioId: context.scenarioId,\n scenarioName: context.scenarioName,\n targetId: context.targetId,\n targetName: context.targetName,\n stepNumber,\n timestamp: new Date().toISOString(),\n isComplete\n };\n\n switch (evt.type) {\n case 'text': {\n const te = evt as OpenCodeTextEvent;\n return {\n ...base,\n type: LiveTraceEventType.COMPLETION,\n outputPreview: te.part.text.slice(0, 500)\n };\n }\n case 'reasoning':\n return {\n ...base,\n type: LiveTraceEventType.THINKING,\n thinking: evt.part.text.slice(0, 500)\n };\n case 'tool_use': {\n const tu = evt as OpenCodeToolUseEvent;\n const toolName = tu.part.tool;\n const args = tu.part.state.input;\n const toolArgs = JSON.stringify(args).slice(0, 500);\n\n let type: LiveTraceEventType = LiveTraceEventType.TOOL_USE;\n let filePath: string | undefined;\n\n if (args) {\n if (args.file_path || args.path || args.target_file) {\n filePath = String(args.file_path || args.path || args.target_file);\n if (/write|edit/i.test(toolName)) {\n type = LiveTraceEventType.FILE_WRITE;\n } else if (/read|view/i.test(toolName)) {\n type = LiveTraceEventType.FILE_READ;\n }\n }\n }\n\n return { ...base, type, toolName, toolArgs, filePath };\n }\n case 'step_finish':\n return {\n ...base,\n type: LiveTraceEventType.PROGRESS,\n outputPreview: 'Step completed'\n };\n default:\n return null;\n }\n}\n\n/**\n * Write all infrastructure files (sub-agents, rules, skills)\n * to the working directory. Called by the adapter's `prepareEnvironment()` so\n * that the orchestrator can take the baseline snapshot *after* infra is in place.\n *\n * Note: MCPs for OpenCode are passed inline via config, not written to filesystem.\n */\nexport async function prepareOpenCodeEnvironment(\n cwd: string,\n skills: SkillWithLatestVersion[],\n options: Pick<\n OpenCodeExecutionOptions,\n 'mcps' | 'subAgents' | 'rules' | 'systemPrompt'\n >\n): Promise<void> {\n if (options.mcps && options.mcps.length > 0) {\n console.log(\n `[MCP] ${options.mcps.length} MCP(s) will be configured inline`\n );\n }\n\n if (options.subAgents && options.subAgents.length > 0) {\n await writeSubAgentsToFilesystem(cwd, options.subAgents);\n }\n\n if (options.rules && options.rules.length > 0) {\n await writeRulesToFilesystem(cwd, options.rules);\n }\n\n try {\n await writeSkillsToFilesystem(cwd, skills);\n } catch (writeError) {\n throw new Error(\n `Failed to write skills to filesystem: ${writeError instanceof Error ? writeError.message : String(writeError)}`\n );\n }\n\n let systemPrompt: string | undefined;\n if (options.systemPrompt === null || options.systemPrompt === '') {\n // Explicitly disabled\n } else if (options.systemPrompt != null) {\n systemPrompt = options.systemPrompt;\n } else {\n systemPrompt = DEFAULT_EVALUATOR_SYSTEM_PROMPT;\n }\n if (systemPrompt) {\n await writeSystemPromptRule(cwd, systemPrompt);\n }\n}\n\n/**\n * Write the system prompt as an OpenCode rule file so it is picked up by the CLI.\n */\nasync function writeSystemPromptRule(\n cwd: string,\n systemPrompt: string\n): Promise<void> {\n const rulesDir = join(cwd, '.opencode', 'rules');\n await mkdir(rulesDir, { recursive: true });\n await writeFile(\n join(rulesDir, 'evalforge-system-prompt.md'),\n systemPrompt,\n 'utf-8'\n );\n}\n\n/**\n * Kill a process and its process group (for cleanup of MCP servers, bash, etc.).\n */\nfunction killProcess(child: ChildProcess, resolved: boolean): void {\n if (!child) return;\n\n const killSignal = (signal: NodeJS.Signals): void => {\n if (child.pid) {\n try {\n process.kill(-child.pid, signal);\n console.log(\n `[OpenCode] Sent ${signal} to process group (pid: -${child.pid})`\n );\n return;\n } catch {\n // Process group kill failed, fall back\n }\n }\n child.kill(signal);\n };\n\n killSignal('SIGTERM');\n setTimeout(() => {\n if (child && !resolved) {\n killSignal('SIGKILL');\n }\n }, KILL_GRACE_PERIOD_MS);\n}\n\n// ---------------------------------------------------------------------------\n// Retry support\n// ---------------------------------------------------------------------------\n\ninterface SpawnAttemptResult {\n events: TimestampedOpenCodeEvent[];\n success: boolean;\n isIdleTimeout: boolean;\n error?: Error;\n finalStepNumber: number;\n}\n\n/**\n * Build a summary of tool actions from events, used in the recovery prompt.\n */\nfunction summarizeToolActions(events: TimestampedOpenCodeEvent[]): string {\n const actions: string[] = [];\n for (const { event: evt } of events) {\n if (evt.type === 'tool_use') {\n const tu = evt as OpenCodeToolUseEvent;\n const tool = tu.part.tool;\n const input = tu.part.state.input;\n const filePath = input?.file_path || input?.path || input?.target_file;\n if (filePath) {\n actions.push(`- ${tool}: ${String(filePath)}`);\n } else if (input?.command) {\n actions.push(`- ${tool}: ${String(input.command).slice(0, 80)}`);\n } else {\n actions.push(`- ${tool}`);\n }\n }\n }\n return actions.length > 0 ? actions.join('\\n') : '(no tool actions recorded)';\n}\n\n/**\n * Build a recovery prompt for retrying after an idle timeout.\n * Tells the agent to continue the original task, noting what was already done.\n */\nfunction buildRecoveryPrompt(\n originalPrompt: string,\n events: TimestampedOpenCodeEvent[]\n): string {\n const toolSummary = summarizeToolActions(events);\n return `You are continuing a task that was interrupted due to a session error.\n\nORIGINAL TASK:\n${originalPrompt}\n\nACTIONS ALREADY COMPLETED IN THE PREVIOUS SESSION:\n${toolSummary}\n\nINSTRUCTIONS:\n1. Review the actions listed above that were already completed in the previous session\n2. Check the filesystem to verify what was already done\n3. Continue with any remaining work needed to fulfill the original task\n4. Do NOT redo work that is already done \u2014 only continue from where the previous session left off`;\n}\n\n/**\n * Spawn a single OpenCode process, collect NDJSON events, and return the result.\n * Always resolves (never rejects) so the caller can inspect the result and retry.\n *\n * @see https://github.com/anomalyco/opencode/issues/13230 - Memory leak causes OOM\n * @see https://github.com/anomalyco/opencode/issues/13841 - LLM connection stalls\n */\nfunction spawnOpenCodeProcess(opts: {\n args: string[];\n env: NodeJS.ProcessEnv;\n cwd: string;\n skillNames: string;\n scenarioName: string;\n sdkTimeoutMs: number;\n traceContext?: TraceContext;\n initialStepNumber: number;\n}): Promise<SpawnAttemptResult> {\n const {\n args,\n env,\n cwd,\n skillNames,\n scenarioName,\n sdkTimeoutMs,\n traceContext,\n initialStepNumber\n } = opts;\n\n return new Promise((resolve) => {\n let resolved = false;\n let stderr = '';\n let lineBuffer = '';\n let lastOutputTime = Date.now();\n let traceStepNumber = initialStepNumber;\n let lastAction = 'Starting...';\n let lastToolName: string | undefined;\n let lastFilePath: string | undefined;\n\n const events: TimestampedOpenCodeEvent[] = [];\n\n const timers: {\n timeout?: ReturnType<typeof setTimeout>;\n idleCheck?: ReturnType<typeof setInterval>;\n heartbeat?: ReturnType<typeof setInterval>;\n } = {};\n\n const cleanup = (): void => {\n if (timers.timeout) clearTimeout(timers.timeout);\n if (timers.idleCheck) clearInterval(timers.idleCheck);\n if (timers.heartbeat) clearInterval(timers.heartbeat);\n };\n\n const finalize = (\n success: boolean,\n isIdleTimeout: boolean,\n error?: Error\n ): void => {\n if (resolved) return;\n resolved = true;\n cleanup();\n\n resolve({\n events,\n success,\n isIdleTimeout,\n error,\n finalStepNumber: traceStepNumber\n });\n };\n\n // Spawn the process\n let child: ChildProcess;\n try {\n child = spawn('opencode', args, {\n cwd,\n env,\n stdio: ['ignore', 'pipe', 'pipe'],\n detached: true\n });\n } catch (spawnError) {\n resolve({\n events: [],\n success: false,\n isIdleTimeout: false,\n error: new Error(\n `Failed to spawn opencode: ${spawnError instanceof Error ? spawnError.message : String(spawnError)}`\n ),\n finalStepNumber: traceStepNumber\n });\n return;\n }\n\n // Total timeout\n timers.timeout = setTimeout(() => {\n if (!resolved) {\n console.error(`[OpenCode] Process timed out after ${sdkTimeoutMs}ms`);\n killProcess(child, resolved);\n finalize(\n false,\n false,\n new Error(\n `OpenCode execution timed out after ${sdkTimeoutMs}ms. ` +\n `Skills: ${skillNames}, Scenario: ${scenarioName}`\n )\n );\n }\n }, sdkTimeoutMs);\n\n // Idle watchdog\n timers.idleCheck = setInterval(() => {\n if (resolved) return;\n const idleTime = Date.now() - lastOutputTime;\n if (idleTime >= IDLE_TIMEOUT_MS) {\n console.warn(\n `[OpenCode] Process appears stuck - no output for ${Math.round(idleTime / 1000)}s. Killing process.`\n );\n killProcess(child, resolved);\n finalize(\n false,\n true,\n new Error(\n `OpenCode process stuck - no output for ${Math.round(idleTime / 1000)} seconds (idle timeout). ` +\n `Skills: ${skillNames}, Scenario: ${scenarioName}`\n )\n );\n }\n }, IDLE_CHECK_INTERVAL_MS);\n\n // Heartbeat for live tracing\n if (traceContext) {\n const executionStartTime = Date.now();\n let lastReportedAction = '';\n let sameActionCount = 0;\n\n timers.heartbeat = setInterval(() => {\n const elapsedMs = Date.now() - executionStartTime;\n let progressMessage = lastAction;\n\n if (lastAction === lastReportedAction) {\n sameActionCount++;\n } else {\n sameActionCount = 1;\n lastReportedAction = lastAction;\n }\n\n const isTaskTool =\n lastToolName === 'Task' || lastToolName === 'dispatch_agent';\n if (isTaskTool && sameActionCount > 1) {\n progressMessage = `Waiting for ${lastAction}`;\n } else if (lastToolName && lastFilePath) {\n progressMessage = `${lastToolName}: ${lastFilePath}`;\n } else if (lastToolName && !isTaskTool) {\n progressMessage = `Using ${lastToolName}...`;\n }\n\n const elapsedSec = Math.round(elapsedMs / 1000);\n progressMessage += ` (${elapsedSec}s, step ${traceStepNumber})`;\n\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: traceStepNumber,\n type: LiveTraceEventType.PROGRESS,\n outputPreview: progressMessage,\n toolName: lastToolName,\n filePath: lastFilePath,\n elapsedMs,\n timestamp: new Date().toISOString(),\n isComplete: false\n },\n traceContext.pushEvent\n );\n }, 10_000);\n }\n\n // Process stdout (NDJSON lines)\n child.stdout?.on('data', (data: Buffer) => {\n const text = data.toString();\n lastOutputTime = Date.now();\n\n lineBuffer += text;\n const lines = lineBuffer.split('\\n');\n lineBuffer = lines.pop() || '';\n\n for (const line of lines) {\n if (!line.trim()) continue;\n\n const evt = tryParseJson<OpenCodeEvent>(line);\n if (!evt || !evt.type) continue;\n\n events.push({ event: evt, receivedAt: Date.now() });\n\n // Live tracing\n if (traceContext) {\n traceStepNumber++;\n const traceEvt = createTraceEventFromNdjson(\n evt,\n traceContext,\n traceStepNumber,\n false\n );\n if (traceEvt) {\n lastToolName = traceEvt.toolName;\n lastFilePath = traceEvt.filePath;\n if (traceEvt.type === LiveTraceEventType.THINKING) {\n lastAction = 'Thinking...';\n } else if (traceEvt.type === LiveTraceEventType.TOOL_USE) {\n lastAction = extractToolAction(\n traceEvt.toolName ?? '',\n undefined\n );\n } else if (traceEvt.type === LiveTraceEventType.FILE_WRITE) {\n lastAction = `Writing: ${traceEvt.filePath || 'file'}`;\n } else if (traceEvt.type === LiveTraceEventType.FILE_READ) {\n lastAction = `Reading: ${traceEvt.filePath || 'file'}`;\n } else if (traceEvt.type === LiveTraceEventType.COMPLETION) {\n lastAction = 'Processing response...';\n }\n emitTraceEvent(traceEvt, traceContext.pushEvent);\n }\n }\n }\n });\n\n // Process stderr\n child.stderr?.on('data', (data: Buffer) => {\n const text = data.toString();\n stderr += text;\n lastOutputTime = Date.now();\n });\n\n // Handle process close\n child.on('close', (code) => {\n // Flush remaining line buffer\n if (lineBuffer.trim()) {\n const evt = tryParseJson<OpenCodeEvent>(lineBuffer);\n if (evt && evt.type) {\n events.push({ event: evt, receivedAt: Date.now() });\n }\n }\n\n console.log(\n `[executeWithOpenCode] Process exited with code ${code}, ${events.length} events collected`\n );\n\n if (code === 0) {\n finalize(true, false);\n } else {\n finalize(\n false,\n false,\n new Error(\n `OpenCode CLI exited with code ${code}.\\nStderr: ${stderr.slice(0, 1000)}`\n )\n );\n }\n });\n\n // Handle spawn errors\n child.on('error', (error) => {\n finalize(\n false,\n false,\n new Error(`OpenCode CLI spawn error: ${error.message}`)\n );\n });\n });\n}\n\n/**\n * Execute skills using the OpenCode CLI with automatic retry on idle timeouts.\n *\n * When the OpenCode process stalls (no output for 120s), it is killed and\n * retried with a recovery prompt that carries context about work already done.\n * This works around known OpenCode hanging issues where the upstream LLM\n * connection stalls mid-stream.\n *\n * @see https://github.com/anomalyco/opencode/issues/13230 - Memory leak causes OOM\n * @see https://github.com/anomalyco/opencode/issues/13841 - LLM connection stalls\n */\nexport async function executeWithOpenCode(\n skills: SkillWithLatestVersion[],\n scenario: TestScenario,\n options: OpenCodeExecutionOptions\n): Promise<{\n result: OpenCodeExecutionResult;\n llmTrace: LLMTrace;\n conversation: ConversationMessage[];\n}> {\n const skillNames = skills.map((s) => s.name).join(', ');\n console.log('[executeWithOpenCode] Starting execution', {\n skillCount: skills.length,\n skillNames,\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n cwd: options.cwd,\n aiGatewayUrl: options.aiGatewayUrl,\n hasAiGatewayHeaders: !!options.aiGatewayHeaders,\n model: options.model\n });\n\n const maxTurns = options.maxTurns || undefined;\n const sdkTimeoutMs = resolveTimeoutMs(maxTurns, options.maxDurationMs);\n\n const { env, providerID, modelID } = await buildOpenCodeEnv({\n model: options.model,\n temperature: options.temperature,\n topP: options.topP,\n maxTurns,\n aiGatewayUrl: options.aiGatewayUrl,\n aiGatewayHeaders: options.aiGatewayHeaders,\n mcps: options.mcps,\n rules: options.rules,\n cwd: options.cwd,\n config: options.config\n });\n\n const startTime = new Date();\n\n const traceContext = options.traceContext;\n\n // Emit pre-execution diagnostic\n if (traceContext) {\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: 0,\n type: LiveTraceEventType.DIAGNOSTIC,\n outputPreview: JSON.stringify({\n event: 'pre-cli-execution',\n model: `${providerID}/${modelID}`,\n maxTurns,\n timestamp: new Date().toISOString()\n }),\n timestamp: new Date().toISOString(),\n isComplete: false\n },\n traceContext.pushEvent\n );\n }\n\n // Build base CLI args (prompt is appended per attempt)\n // thinkingVariant: 'none' omits --thinking entirely; otherwise pass --variant value\n const variant = options.thinkingVariant ?? 'high';\n const thinkingArgs =\n variant === 'none' ? [] : ['--thinking', '--variant', variant];\n\n const baseArgs = [\n 'run',\n '--format',\n 'json',\n ...thinkingArgs,\n '--model',\n `${providerID}/${modelID}`,\n '--dir',\n options.cwd\n ];\n\n // Write images to disk and build --file flags for the CLI\n const hasImages =\n scenario.triggerPromptImages && scenario.triggerPromptImages.length > 0;\n const imageFileArgs: string[] = [];\n if (hasImages) {\n const imagePaths = await writePromptImages(\n options.cwd,\n scenario.triggerPromptImages!\n );\n for (const imgPath of imagePaths) {\n imageFileArgs.push('-f', imgPath);\n }\n }\n\n // Retry loop \u2014 on idle timeout, kill the process and retry with recovery context\n const accumulatedEvents: TimestampedOpenCodeEvent[] = [];\n let traceStepNumber = 0;\n let lastAttemptResult: SpawnAttemptResult | undefined;\n\n for (let attempt = 1; attempt <= MAX_IDLE_RETRIES; attempt++) {\n const prompt =\n attempt === 1\n ? scenario.triggerPrompt\n : buildRecoveryPrompt(scenario.triggerPrompt, accumulatedEvents);\n\n if (attempt > 1) {\n console.log(\n `[OpenCode] Retry attempt ${attempt}/${MAX_IDLE_RETRIES} \u2014 starting fresh session with recovery context`\n );\n if (traceContext) {\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: traceStepNumber + 1,\n type: LiveTraceEventType.DIAGNOSTIC,\n outputPreview: JSON.stringify({\n event: 'idle-timeout-retry',\n attempt,\n maxRetries: MAX_IDLE_RETRIES,\n eventsFromPreviousAttempts: accumulatedEvents.length\n }),\n timestamp: new Date().toISOString(),\n isComplete: false\n },\n traceContext.pushEvent\n );\n }\n }\n\n const args = [...baseArgs, ...imageFileArgs, prompt];\n console.log(\n `[executeWithOpenCode] Spawning attempt ${attempt}: opencode`,\n args.slice(0, 5)\n );\n\n lastAttemptResult = await spawnOpenCodeProcess({\n args,\n env,\n cwd: options.cwd,\n skillNames,\n scenarioName: scenario.name,\n sdkTimeoutMs,\n traceContext,\n initialStepNumber: traceStepNumber\n });\n\n accumulatedEvents.push(...lastAttemptResult.events);\n traceStepNumber = lastAttemptResult.finalStepNumber;\n\n if (lastAttemptResult.success) {\n break;\n }\n\n if (!lastAttemptResult.isIdleTimeout || attempt >= MAX_IDLE_RETRIES) {\n // Non-retryable error or all retries exhausted\n if (traceContext) {\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: traceStepNumber + 1,\n type: LiveTraceEventType.DIAGNOSTIC,\n outputPreview: JSON.stringify({\n event: 'cli-execution-failed',\n error: lastAttemptResult.error?.message ?? 'Unknown error',\n attempt,\n isIdleTimeout: lastAttemptResult.isIdleTimeout\n }).slice(0, 2000),\n timestamp: new Date().toISOString(),\n isComplete: true\n },\n traceContext.pushEvent\n );\n }\n throw (\n lastAttemptResult.error ??\n new Error(\n `OpenCode CLI execution failed.\\nAttempt: ${attempt}, Events: ${accumulatedEvents.length}`\n )\n );\n }\n\n console.warn(\n `[OpenCode] Attempt ${attempt} failed due to idle timeout, will retry`\n );\n }\n\n // Build final result from accumulated events across all attempts\n const endTime = new Date();\n const totalDurationMs = endTime.getTime() - startTime.getTime();\n\n let outputText = '';\n for (const { event: evt } of accumulatedEvents) {\n if (evt.type === 'text') {\n outputText += (evt as OpenCodeTextEvent).part.text;\n }\n }\n\n if (!outputText) {\n throw new Error(\n 'Agent produced no text output. ' +\n `Model: ${providerID}/${modelID}, Events: ${accumulatedEvents.length}`\n );\n }\n\n let inputTokens = 0;\n let outputTokens = 0;\n let costUsd = 0;\n for (const { event: evt } of accumulatedEvents) {\n if (evt.type === 'step_finish') {\n const sf = evt as OpenCodeStepFinishEvent;\n inputTokens += sf.part.tokens.input;\n outputTokens += sf.part.tokens.output;\n costUsd += sf.part.cost;\n }\n }\n\n // Emit completion trace event\n if (traceContext) {\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: traceStepNumber + 1,\n type: LiveTraceEventType.COMPLETION,\n outputPreview: 'Scenario execution completed',\n timestamp: new Date().toISOString(),\n isComplete: true\n },\n traceContext.pushEvent\n );\n }\n\n const modelStr = options.model || `${providerID}/${modelID}`;\n const llmTrace = buildLLMTrace(\n accumulatedEvents,\n totalDurationMs,\n modelStr,\n providerID,\n startTime\n );\n const conversation = buildConversation(accumulatedEvents);\n\n return {\n result: {\n outputText,\n durationMs: totalDurationMs,\n usage: {\n inputTokens,\n outputTokens,\n totalTokens: inputTokens + outputTokens\n },\n costUsd\n },\n llmTrace,\n conversation\n };\n}\n", "import type { MCPEntity, SubAgent, Rule } from '@wix/evalforge-types';\n\nexport type { TraceContext } from '@wix/evalforge-types';\n\n// ---------------------------------------------------------------------------\n// NDJSON event types emitted by `opencode run --format json`\n// ---------------------------------------------------------------------------\n\nexport interface OpenCodeTextEvent {\n type: 'text';\n part: { text: string };\n}\n\nexport interface OpenCodeReasoningEvent {\n type: 'reasoning';\n part: { text: string };\n}\n\nexport interface OpenCodeToolUseEvent {\n type: 'tool_use';\n part: {\n tool: string;\n callID: string;\n state: {\n status: string;\n input?: Record<string, unknown>;\n output?: string;\n error?: string;\n title?: string;\n metadata?: Record<string, unknown>;\n };\n };\n}\n\nexport interface OpenCodeStepFinishEvent {\n type: 'step_finish';\n part: {\n reason: string;\n cost: number;\n tokens: {\n total: number;\n input: number;\n output: number;\n reasoning: number;\n cache: { read: number; write: number };\n };\n modelID?: string;\n providerID?: string;\n };\n}\n\nexport type OpenCodeEvent =\n | OpenCodeTextEvent\n | OpenCodeReasoningEvent\n | OpenCodeToolUseEvent\n | OpenCodeStepFinishEvent;\n\nexport interface TimestampedOpenCodeEvent {\n event: OpenCodeEvent;\n receivedAt: number;\n}\n\n// ---------------------------------------------------------------------------\n// Execution options & result\n// ---------------------------------------------------------------------------\n\nexport interface OpenCodeExecutionOptions {\n cwd: string;\n mcps?: MCPEntity[];\n subAgents?: SubAgent[];\n rules?: Rule[];\n model?: string;\n temperature?: number;\n /** Nucleus sampling (0\u20131). Alternative to temperature. */\n topP?: number;\n maxTurns?: number;\n /** Thinking variant: 'high' | 'low' | 'none'. Default: 'high'. 'none' omits --thinking flag. */\n thinkingVariant?: string;\n /** Execution timeout override in milliseconds */\n maxDurationMs?: number;\n aiGatewayUrl?: string;\n aiGatewayHeaders?: Record<string, string>;\n traceContext?: import('@wix/evalforge-types').TraceContext;\n systemPrompt?: string | null;\n /** Agent config bag for passing to buildOpenCodeEnv (permission overrides, etc.) */\n config?: Record<string, unknown>;\n}\n\nexport interface OpenCodeExecutionResult {\n outputText: string;\n durationMs: number;\n usage: {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n };\n costUsd?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nexport function tryParseJson<T>(text: string): T | null {\n try {\n return JSON.parse(text) as T;\n } catch {\n return null;\n }\n}\n", "import { mkdir } from 'fs/promises';\nimport { join } from 'path';\nimport type {\n GitHubSource,\n SkillFile,\n SkillWithLatestVersion\n} from '@wix/evalforge-types';\nimport { fetchGitHubFolder } from '@wix/evalforge-github-client';\nimport { writeFilesToDirectory } from '../../utils/write-files.js';\n\nexport type FetchGitHubFolderFn = (\n source: GitHubSource,\n options?: { userAgent?: string }\n) => Promise<SkillFile[]>;\n\n/**\n * Write all skills to .opencode/skills/ so OpenCode can discover them.\n *\n * Content resolution:\n * 1. Pinned (version has `files`): writes all files from the stored snapshot\n * 2. Live (skill has `source`, no pinned files): fetches from GitHub at runtime\n */\nexport async function writeSkillsToFilesystem(\n cwd: string,\n skills: SkillWithLatestVersion[],\n fetchFn: FetchGitHubFolderFn = fetchGitHubFolder\n): Promise<void> {\n await Promise.all(\n skills.map((skill) => writeSkillToFilesystem(cwd, skill, fetchFn))\n );\n}\n\nasync function writeSkillToFilesystem(\n cwd: string,\n skill: SkillWithLatestVersion,\n fetchFn: FetchGitHubFolderFn\n): Promise<void> {\n const skillName = skill.name;\n const skillDir = join(cwd, '.opencode', 'skills', skillName);\n await mkdir(skillDir, { recursive: true });\n\n const version = skill.latestVersion;\n\n if (version?.files && version.files.length > 0) {\n await writeFilesToDirectory(skillDir, version.files);\n console.log(\n `[Skill] ${skillName}: wrote ${version.files.length} file(s) from snapshot`\n );\n } else if (skill.source) {\n try {\n const files = await fetchFn(skill.source, {\n userAgent: 'EvalForge-Evaluator'\n });\n await writeFilesToDirectory(skillDir, files);\n console.log(\n `[Skill] ${skillName}: wrote ${files.length} file(s) from GitHub (live)`\n );\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n console.error(\n `[Skill] ${skillName}: GitHub fetch failed: ${message}, no files to fall back to`\n );\n throw new Error(\n `Failed to write skill ${skillName} to filesystem: ${message}`\n );\n }\n } else {\n throw new Error(`Skill ${skillName} has no files and no source configured`);\n }\n}\n", "import { mkdir, writeFile } from 'fs/promises';\nimport { join } from 'path';\nimport type { SubAgent, GitHubSource } from '@wix/evalforge-types';\nimport {\n fetchGitHubFile,\n type FetchGitHubFolderOptions\n} from '@wix/evalforge-github-client';\n\nexport type FetchGitHubFileFn = (\n source: GitHubSource,\n options?: FetchGitHubFolderOptions\n) => Promise<string>;\n\nconst AGENTS_DIR = '.opencode/agents';\n\nfunction toAgentFilename(\n name: string,\n index: number,\n nameCount: Map<string, number>\n): string {\n const base =\n (name || '')\n .toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^a-z0-9-]/g, '')\n .replace(/^-+|-+$/g, '') || `sub-agent-${index}`;\n\n const count = nameCount.get(base) ?? 0;\n nameCount.set(base, count + 1);\n\n return count === 0 ? base : `${base}-${count + 1}`;\n}\n\nasync function resolveSubAgentContent(\n agent: SubAgent,\n fetchFn: FetchGitHubFileFn\n): Promise<string> {\n if (agent.source) {\n try {\n const content = await fetchFn(agent.source, {\n userAgent: 'EvalForge-Evaluator'\n });\n console.log(\n `[SubAgents] Fetched \"${agent.name}\" from ${agent.source.owner}/${agent.source.repo}/${agent.source.path}@${agent.source.ref}`\n );\n return content;\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n console.error(\n `[SubAgents] \"${agent.name}\": GitHub fetch failed: ${message}`\n );\n throw new Error(\n `Failed to fetch sub-agent \"${agent.name}\" from GitHub: ${message}`\n );\n }\n }\n if (!agent.subAgentMd) {\n console.warn(\n `[SubAgents] \"${agent.name}\" has empty inline content \u2013 the agent file will be blank`\n );\n }\n return agent.subAgentMd;\n}\n\n/**\n * Write sub-agent markdown files to .opencode/agents/ for OpenCode to discover.\n */\nexport async function writeSubAgentsToFilesystem(\n cwd: string,\n subAgents: SubAgent[],\n fetchFn: FetchGitHubFileFn = fetchGitHubFile\n): Promise<void> {\n if (subAgents.length === 0) return;\n\n const agentsDir = join(cwd, AGENTS_DIR);\n await mkdir(agentsDir, { recursive: true });\n\n const nameCount = new Map<string, number>();\n\n for (const [i, agent] of subAgents.entries()) {\n const filename = toAgentFilename(agent.name, i, nameCount);\n const filePath = join(agentsDir, `${filename}.md`);\n const content = await resolveSubAgentContent(agent, fetchFn);\n await writeFile(filePath, content, 'utf8');\n }\n\n console.log(`[SubAgents] Written to ${agentsDir}`);\n}\n", "import { homedir } from 'os';\nimport {\n ClaudeModel,\n AVAILABLE_OPENAI_MODEL_IDS,\n AVAILABLE_GEMINI_MODEL_IDS,\n OpenCodeConfigSchema,\n type MCPEntity,\n type OpenCodePermission,\n type Rule\n} from '@wix/evalforge-types';\nimport { resolveMcpPlaceholders } from '../shared/resolve-mcp-placeholders.js';\n\nconst DEFAULT_MODEL = `${ClaudeModel.CLAUDE_4_5_SONNET_1_0}`;\n\nexport interface OpenCodeConfigOptions {\n model?: string;\n temperature?: number;\n topP?: number;\n maxTurns?: number;\n aiGatewayUrl?: string;\n aiGatewayHeaders?: Record<string, string>;\n mcps?: MCPEntity[];\n rules?: Rule[];\n cwd: string;\n /** Agent config bag \u2014 may contain permission overrides */\n config?: Record<string, unknown>;\n}\n\n/**\n * OpenCode's provider registry requires versioned Claude model IDs\n * (e.g. `claude-sonnet-4-0` not `claude-sonnet-4`).\n * Our canonical IDs omit the patch suffix for the 4.0 family \u2014 map them here.\n */\nconst OPENCODE_MODEL_ALIASES: Record<string, string> = {\n 'claude-sonnet-4': 'claude-sonnet-4-0',\n 'claude-opus-4': 'claude-opus-4-0'\n};\n\n/**\n * Parse a model string into provider and model ID.\n * Accepts \"provider/model-id\" or bare \"model-id\" (defaults to anthropic).\n */\nfunction parseModel(model: string): { providerID: string; modelID: string } {\n const slashIndex = model.indexOf('/');\n if (slashIndex > 0) {\n const providerID = model.slice(0, slashIndex);\n const rawModelID = model.slice(slashIndex + 1);\n return {\n providerID,\n modelID: OPENCODE_MODEL_ALIASES[rawModelID] ?? rawModelID\n };\n }\n const modelID = OPENCODE_MODEL_ALIASES[model] ?? model;\n const isOpenAI = (AVAILABLE_OPENAI_MODEL_IDS as readonly string[]).includes(\n model\n );\n const isGemini = (AVAILABLE_GEMINI_MODEL_IDS as readonly string[]).includes(\n model\n );\n if (isGemini) return { providerID: 'google', modelID };\n return { providerID: isOpenAI ? 'openai' : 'anthropic', modelID };\n}\n\n/**\n * Convert generic MCP server entries into the OpenCode config format.\n */\nfunction toOpenCodeMcpConfig(\n servers: Record<string, Record<string, unknown>>\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [name, entry] of Object.entries(servers)) {\n if (entry.type === 'local' || entry.type === 'remote') {\n result[name] = entry;\n continue;\n }\n\n if (entry.url && typeof entry.url === 'string') {\n result[name] = {\n type: 'remote' as const,\n url: entry.url,\n ...(entry.headers\n ? { headers: entry.headers as Record<string, string> }\n : {}),\n ...(typeof entry.enabled === 'boolean'\n ? { enabled: entry.enabled }\n : {})\n };\n continue;\n }\n\n if (entry.command && typeof entry.command === 'string') {\n const commandArray = [\n entry.command as string,\n ...((entry.args as string[]) || [])\n ];\n result[name] = {\n type: 'local' as const,\n command: commandArray,\n ...(entry.env\n ? { environment: entry.env as Record<string, string> }\n : {}),\n ...(typeof entry.enabled === 'boolean'\n ? { enabled: entry.enabled }\n : {})\n };\n continue;\n }\n\n console.warn(\n `[MCP] Server \"${name}\" has unrecognized format, passing through as-is:`,\n JSON.stringify(entry)\n );\n result[name] = entry;\n }\n\n return result;\n}\n\n/**\n * Ensure `~/.opencode/bin` is on a PATH string.\n */\nfunction ensureOpenCodeInPath(currentPath: string): string {\n const opencodeBin = `${homedir()}/.opencode/bin`;\n if (currentPath.includes(opencodeBin)) {\n return currentPath;\n }\n return `${opencodeBin}:${currentPath}`;\n}\n\n/**\n * Build environment variables for spawning `opencode run`.\n *\n * Returns the env object (including `OPENCODE_CONFIG_CONTENT`) and the\n * parsed provider/model IDs needed by the caller.\n */\nexport async function buildOpenCodeEnv(\n options: OpenCodeConfigOptions\n): Promise<{\n env: NodeJS.ProcessEnv;\n providerID: string;\n modelID: string;\n}> {\n const modelStr = options.model || DEFAULT_MODEL;\n const { providerID, modelID } = parseModel(modelStr);\n\n // Build provider config\n const provider: Record<string, unknown> = {};\n if (options.aiGatewayUrl) {\n // @ai-sdk/google uses 'google' as its provider ID, but our proxy is\n // mounted at /proxy/gemini (matching the Gemini REST API format).\n const proxyPath = providerID === 'google' ? 'gemini' : providerID;\n const providerOptions: Record<string, unknown> = {\n baseURL: `${options.aiGatewayUrl}/proxy/${proxyPath}`,\n apiKey: 'sk-placeholder-auth-handled-by-gateway'\n };\n if (options.aiGatewayHeaders) {\n providerOptions.headers = { ...options.aiGatewayHeaders };\n }\n provider[providerID] = { options: providerOptions };\n }\n\n // Build MCP config\n let mcp: Record<string, unknown> | undefined;\n if (options.mcps && options.mcps.length > 0) {\n const mcpServers: Record<string, Record<string, unknown>> = {};\n for (const mcpEntity of options.mcps) {\n const entityConfig = mcpEntity.config as Record<string, unknown>;\n for (const [key, value] of Object.entries(entityConfig)) {\n if (\n typeof value !== 'object' ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new Error(\n `MCP \"${mcpEntity.name}\" has invalid config: value for key \"${key}\" must be an object (got ${typeof value}).`\n );\n }\n mcpServers[key] = value as Record<string, unknown>;\n }\n }\n const resolved = await resolveMcpPlaceholders(mcpServers, {\n cwd: options.cwd\n });\n mcp = toOpenCodeMcpConfig(resolved);\n }\n\n // Build agent overrides\n const agentOverrides: Record<string, unknown> = {};\n if (options.temperature != null) {\n agentOverrides.temperature = options.temperature;\n }\n if (options.topP != null) {\n agentOverrides.top_p = options.topP;\n }\n // 0 = unlimited \u2014 omit maxSteps so the CLI uses its default (unlimited)\n if (options.maxTurns != null && options.maxTurns > 0) {\n agentOverrides.maxSteps = options.maxTurns;\n }\n\n // Merge permission overrides from agent config bag (default: allow-all).\n // OpenCode CLI permission config supports a mixed format:\n // { \"*\": \"allow\", bash: { \"git *\": \"allow\", \"*\": \"deny\" }, edit: { \"*\": \"allow\" } }\n // Valid nested categories: edit, bash, external_directory, * (catch-all).\n // Keys like \"webfetch\" or \"doom_loop\" are internal permission IDs and are NOT valid\n // as nested config keys \u2014 use \"*\": \"allow\" to cover them instead.\n const parsed = options.config\n ? OpenCodeConfigSchema.passthrough().safeParse(options.config)\n : undefined;\n const configPermission: OpenCodePermission | undefined = parsed?.success\n ? parsed.data.permission\n : undefined;\n const defaultPermission: Record<string, string | Record<string, string>> = {\n '*': 'allow'\n };\n const permission: Record<string, string | Record<string, string>> = {\n ...defaultPermission,\n ...configPermission\n };\n\n // Collect unique directories from generic rules and emit as instructions globs.\n let instructions: string[] | undefined;\n if (options.rules && options.rules.length > 0) {\n const genericDirs = new Set<string>();\n for (const rule of options.rules) {\n if (rule.ruleType === 'generic') {\n genericDirs.add(rule.directory ?? '.opencode/rules');\n }\n }\n if (genericDirs.size > 0) {\n instructions = Array.from(genericDirs)\n .sort()\n .map((d) => `${d}/*.md`);\n }\n }\n\n // Assemble the full config object\n const config: Record<string, unknown> = {\n model: `${providerID}/${modelID}`,\n provider,\n ...(Object.keys(agentOverrides).length > 0\n ? { agent: { build: agentOverrides } }\n : {}),\n permission,\n // Align with ditto/codegen: LSP post-edit diagnostics can hang remote eval machines.\n lsp: false,\n ...(mcp ? { mcp } : {}),\n ...(instructions ? { instructions } : {})\n };\n\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n PATH: ensureOpenCodeInPath(process.env.PATH || ''),\n OPENCODE_CONFIG_CONTENT: JSON.stringify(config),\n OPENCODE_DISABLE_LSP_DOWNLOAD: 'true',\n OPENCODE_DISABLE_FILETIME_CHECK: 'true'\n };\n\n return { env, providerID, modelID };\n}\n", "import type {\n LLMTrace,\n LLMTraceStep,\n LLMTraceSummary\n} from '@wix/evalforge-types';\nimport { LLMStepType } from '@wix/evalforge-types';\nimport { randomUUID } from 'crypto';\nimport type {\n OpenCodeTextEvent,\n OpenCodeReasoningEvent,\n OpenCodeToolUseEvent,\n OpenCodeStepFinishEvent,\n TimestampedOpenCodeEvent\n} from './types.js';\n\n/**\n * A \"turn\" is a group of events between two step_finish boundaries.\n * Each turn produces one or more LLMTraceSteps.\n */\ninterface Turn {\n textParts: string[];\n reasoningParts: string[];\n toolCalls: Array<{ toolName: string; args: unknown }>;\n stepFinish?: OpenCodeStepFinishEvent['part'];\n receivedAt?: number;\n}\n\n/**\n * Build an LLMTrace from the NDJSON events emitted by `opencode run --format json`.\n *\n * Events are grouped into turns delimited by `step_finish` events.\n * Each turn may produce THINKING, TOOL_USE, and COMPLETION sub-steps\n * to match the claude-code trace format.\n */\n/**\n * Strip the provider prefix from a model ID if present.\n * OpenCode formats model IDs as \"provider/model\" (e.g. \"anthropic/claude-sonnet-4-6\").\n * Returns the canonical model ID without the prefix.\n */\nfunction toCanonicalModelId(modelId: string): string {\n const slashIndex = modelId.indexOf('/');\n return slashIndex > 0 ? modelId.slice(slashIndex + 1) : modelId;\n}\n\nexport function buildLLMTrace(\n timestampedEvents: TimestampedOpenCodeEvent[],\n totalDurationMs: number,\n model: string,\n provider: string,\n executionStartTime: Date\n): LLMTrace {\n const canonicalModel = toCanonicalModelId(model);\n\n // Group events into turns\n const turns: Turn[] = [];\n let current: Turn = {\n textParts: [],\n reasoningParts: [],\n toolCalls: []\n };\n\n for (const { event: evt, receivedAt } of timestampedEvents) {\n switch (evt.type) {\n case 'text':\n current.textParts.push((evt as OpenCodeTextEvent).part.text);\n break;\n case 'reasoning':\n current.reasoningParts.push((evt as OpenCodeReasoningEvent).part.text);\n break;\n case 'tool_use': {\n const tu = evt as OpenCodeToolUseEvent;\n current.toolCalls.push({\n toolName: tu.part.tool,\n args: tu.part.state.input\n });\n break;\n }\n case 'step_finish': {\n const sf = evt as OpenCodeStepFinishEvent;\n current.stepFinish = sf.part;\n current.receivedAt = receivedAt;\n turns.push(current);\n current = {\n textParts: [],\n reasoningParts: [],\n toolCalls: []\n };\n break;\n }\n }\n }\n\n // If there are remaining events with no step_finish, flush them\n if (\n current.textParts.length > 0 ||\n current.reasoningParts.length > 0 ||\n current.toolCalls.length > 0\n ) {\n // Use the last event's receivedAt for the incomplete turn\n if (timestampedEvents.length > 0) {\n current.receivedAt =\n timestampedEvents[timestampedEvents.length - 1].receivedAt;\n }\n turns.push(current);\n }\n\n // Convert turns into trace steps using real per-turn timing\n const executionStartMs = executionStartTime.getTime();\n\n const allSteps: LLMTraceStep[] = turns\n .flatMap((turn, turnIndex) => {\n const sf = turn.stepFinish;\n const stepInputTokens = sf?.tokens.input ?? 0;\n const stepOutputTokens = sf?.tokens.output ?? 0;\n const stepCost = sf?.cost ?? 0;\n const finishReason = sf?.reason ?? 'unknown';\n const stepModel = toCanonicalModelId(sf?.modelID || model);\n const stepProvider = sf?.providerID || provider;\n\n // Compute real timing from receivedAt timestamps\n const turnEndMs = turn.receivedAt ?? executionStartMs + totalDurationMs;\n const prevEndMs =\n turnIndex > 0\n ? (turns[turnIndex - 1].receivedAt ?? executionStartMs)\n : executionStartMs;\n const durationMs = Math.max(0, turnEndMs - prevEndMs);\n const startedAt = new Date(prevEndMs).toISOString();\n\n const text = turn.textParts.join('');\n const thinking = turn.reasoningParts.join('');\n const toolCallCount = turn.toolCalls.length;\n const hasThinking = !!thinking;\n const hasText = !!text;\n const isSuccess = finishReason !== 'error';\n const errorMsg =\n finishReason === 'error' ? 'Generation failed' : undefined;\n\n const subSteps: LLMTraceStep[] = [];\n const thinkingSubSteps =\n hasThinking && (hasText || toolCallCount > 0) ? 1 : 0;\n const toolSubSteps = toolCallCount;\n const textSubSteps = hasText && toolCallCount > 0 ? 1 : 0;\n const totalSubSteps = thinkingSubSteps + toolSubSteps + textSubSteps || 1;\n\n // THINKING sub-step\n if (hasThinking && (hasText || toolCallCount > 0)) {\n subSteps.push({\n id: randomUUID(),\n stepNumber: 0,\n turnIndex,\n type: LLMStepType.THINKING,\n model: stepModel,\n provider: stepProvider,\n startedAt,\n durationMs: Math.round(durationMs / totalSubSteps),\n tokenUsage: {\n prompt: Math.round(stepInputTokens / totalSubSteps),\n completion: Math.round(stepOutputTokens / totalSubSteps),\n total: Math.round(\n (stepInputTokens + stepOutputTokens) / totalSubSteps\n )\n },\n costUsd: stepCost / totalSubSteps,\n outputPreview: thinking.slice(0, 200),\n success: isSuccess,\n error: errorMsg\n });\n }\n\n // TOOL_USE sub-steps\n if (toolCallCount > 0) {\n for (let tcIdx = 0; tcIdx < toolCallCount; tcIdx++) {\n const tc = turn.toolCalls[tcIdx];\n const isLast = tcIdx === toolCallCount - 1 && textSubSteps === 0;\n const toolBudgetSteps = toolSubSteps + textSubSteps;\n const toolFraction = toolBudgetSteps > 0 ? 1 / toolBudgetSteps : 1;\n const remainingFraction =\n (totalSubSteps - thinkingSubSteps) / totalSubSteps;\n\n subSteps.push({\n id: randomUUID(),\n stepNumber: 0,\n turnIndex,\n type: LLMStepType.TOOL_USE,\n model: stepModel,\n provider: stepProvider,\n startedAt,\n durationMs: isLast\n ? durationMs - subSteps.reduce((s, ss) => s + ss.durationMs, 0)\n : Math.round(durationMs * remainingFraction * toolFraction),\n tokenUsage: {\n prompt: Math.round(\n stepInputTokens * remainingFraction * toolFraction\n ),\n completion: Math.round(\n stepOutputTokens * remainingFraction * toolFraction\n ),\n total: Math.round(\n (stepInputTokens + stepOutputTokens) *\n remainingFraction *\n toolFraction\n )\n },\n costUsd: stepCost * remainingFraction * toolFraction,\n toolName: tc.toolName,\n toolArguments: JSON.stringify(tc.args),\n outputPreview:\n tcIdx === 0 && !hasText\n ? (text || thinking)?.slice(0, 200)\n : undefined,\n success: isSuccess,\n error: errorMsg\n });\n }\n }\n\n // COMPLETION sub-step (text when tools were also present)\n if (hasText && toolCallCount > 0) {\n subSteps.push({\n id: randomUUID(),\n stepNumber: 0,\n turnIndex,\n type: LLMStepType.COMPLETION,\n model: stepModel,\n provider: stepProvider,\n startedAt,\n durationMs:\n durationMs - subSteps.reduce((s, ss) => s + ss.durationMs, 0),\n tokenUsage: {\n prompt:\n stepInputTokens -\n subSteps.reduce((s, ss) => s + ss.tokenUsage.prompt, 0),\n completion:\n stepOutputTokens -\n subSteps.reduce((s, ss) => s + ss.tokenUsage.completion, 0),\n total:\n stepInputTokens +\n stepOutputTokens -\n subSteps.reduce((s, ss) => s + ss.tokenUsage.total, 0)\n },\n costUsd: stepCost - subSteps.reduce((s, ss) => s + ss.costUsd, 0),\n outputPreview: text.slice(0, 200),\n success: isSuccess,\n error: errorMsg\n });\n }\n\n // Fallback: pure text or pure thinking\n if (subSteps.length === 0) {\n const stepType =\n hasThinking && !hasText\n ? LLMStepType.THINKING\n : LLMStepType.COMPLETION;\n subSteps.push({\n id: randomUUID(),\n stepNumber: 0,\n turnIndex,\n type: stepType,\n model: stepModel,\n provider: stepProvider,\n startedAt,\n durationMs,\n tokenUsage: {\n prompt: stepInputTokens,\n completion: stepOutputTokens,\n total: stepInputTokens + stepOutputTokens\n },\n costUsd: stepCost,\n outputPreview: (text || thinking)?.slice(0, 200),\n success: isSuccess,\n error: errorMsg\n });\n }\n\n return subSteps;\n })\n .map((s, i) => ({ ...s, stepNumber: i + 1 }));\n\n // Aggregate totals\n let totalPrompt = 0;\n let totalCompletion = 0;\n let totalCost = 0;\n for (const turn of turns) {\n if (turn.stepFinish) {\n totalPrompt += turn.stepFinish.tokens.input;\n totalCompletion += turn.stepFinish.tokens.output;\n totalCost += turn.stepFinish.cost;\n }\n }\n const totalTokens = {\n prompt: totalPrompt,\n completion: totalCompletion,\n total: totalPrompt + totalCompletion\n };\n\n const stepTypeBreakdown: Record<\n string,\n { count: number; durationMs: number; tokens: number; costUsd: number }\n > = {};\n for (const step of allSteps) {\n const entry = stepTypeBreakdown[step.type] ?? {\n count: 0,\n durationMs: 0,\n tokens: 0,\n costUsd: 0\n };\n entry.count += 1;\n entry.durationMs += step.durationMs;\n entry.tokens += step.tokenUsage.total;\n entry.costUsd += step.costUsd;\n stepTypeBreakdown[step.type] = entry;\n }\n\n const modelUsed = allSteps[0]?.model || canonicalModel;\n const summary: LLMTraceSummary = {\n totalSteps: allSteps.length,\n totalTurns: turns.length,\n totalDurationMs,\n totalTokens,\n totalCostUsd: totalCost,\n modelBreakdown: {\n [modelUsed]: {\n count: allSteps.length,\n durationMs: totalDurationMs,\n tokens: totalTokens.total,\n costUsd: totalCost\n }\n },\n modelsUsed: [modelUsed],\n stepTypeBreakdown\n };\n\n return {\n id: randomUUID(),\n steps: allSteps,\n summary\n };\n}\n", "import type { ConversationMessage } from '@wix/evalforge-types';\nimport type {\n OpenCodeTextEvent,\n OpenCodeReasoningEvent,\n OpenCodeToolUseEvent,\n TimestampedOpenCodeEvent\n} from './types.js';\n\n/**\n * Build a conversation from the NDJSON events emitted by\n * `opencode run --format json`.\n *\n * Events are grouped into assistant turns (text, reasoning, tool_use)\n * separated by step_finish events. Tool results appear as user messages.\n */\nexport function buildConversation(\n timestampedEvents: TimestampedOpenCodeEvent[]\n): ConversationMessage[] {\n const result: ConversationMessage[] = [];\n\n let assistantContent: ConversationMessage['content'] = [];\n let userContent: ConversationMessage['content'] = [];\n let latestReceivedAt = 0;\n\n const flushAssistant = (): void => {\n if (assistantContent.length > 0) {\n const timestamp =\n latestReceivedAt > 0\n ? new Date(latestReceivedAt).toISOString()\n : new Date().toISOString();\n result.push({ role: 'assistant', content: assistantContent, timestamp });\n assistantContent = [];\n }\n };\n\n const flushUser = (): void => {\n if (userContent.length > 0) {\n const timestamp =\n latestReceivedAt > 0\n ? new Date(latestReceivedAt).toISOString()\n : new Date().toISOString();\n result.push({ role: 'user', content: userContent, timestamp });\n userContent = [];\n }\n };\n\n for (const { event: evt, receivedAt } of timestampedEvents) {\n latestReceivedAt = receivedAt;\n\n switch (evt.type) {\n case 'text': {\n const te = evt as OpenCodeTextEvent;\n assistantContent.push({ type: 'text', text: te.part.text });\n break;\n }\n case 'reasoning': {\n const re = evt as OpenCodeReasoningEvent;\n assistantContent.push({ type: 'thinking', thinking: re.part.text });\n break;\n }\n case 'tool_use': {\n const tu = evt as OpenCodeToolUseEvent;\n // Tool invocation goes on the assistant side\n assistantContent.push({\n type: 'tool_use',\n toolName: tu.part.tool,\n toolId: tu.part.callID,\n input: tu.part.state.input\n });\n\n // If the tool has completed or errored, emit a user tool_result\n if (\n tu.part.state.status === 'completed' ||\n tu.part.state.status === 'error'\n ) {\n // Flush any pending assistant content first\n flushAssistant();\n\n const isError = tu.part.state.status === 'error';\n const content = isError\n ? tu.part.state.error || 'Tool execution failed'\n : tu.part.state.output || '';\n userContent.push({\n type: 'tool_result',\n toolUseId: tu.part.callID,\n content,\n ...(isError ? { isError: true } : {})\n });\n flushUser();\n }\n break;\n }\n case 'step_finish': {\n // Flush the current turn\n flushAssistant();\n flushUser();\n break;\n }\n }\n }\n\n // Flush any remaining content\n flushAssistant();\n flushUser();\n\n return result;\n}\n", "/**\n * OpenCode agent adapter module.\n *\n * Provides the OpenCode implementation of the AgentAdapter interface.\n * Spawns the `opencode` CLI and parses NDJSON events from stdout.\n *\n * The adapter is automatically registered with the default registry when\n * this module is imported.\n */\n\nexport { OpenCodeAdapter, openCodeAdapter } from './opencode-adapter.js';\nexport { executeWithOpenCode } from './execute.js';\nexport { buildConversation } from './build-conversation.js';\n\nexport type {\n OpenCodeExecutionOptions,\n OpenCodeExecutionResult\n} from './types.js';\nexport type { TraceContext } from '@wix/evalforge-types';\n\n// Register the adapter with the default registry\nimport { defaultRegistry } from '../registry.js';\nimport { openCodeAdapter } from './opencode-adapter.js';\n\ndefaultRegistry.register(openCodeAdapter);\n", "import { resolveTimeoutMs } from '../timeout.js';\nimport {\n APICallError,\n generateText,\n streamText,\n stepCountIs,\n type LanguageModel,\n type StepResult,\n type ToolSet\n} from 'ai';\nimport { createAnthropic } from '@ai-sdk/anthropic';\nimport { createGoogleGenerativeAI } from '@ai-sdk/google';\nimport { createOpenAI } from '@ai-sdk/openai';\nimport type {\n AgentExecutionContext,\n AgentExecutionResult,\n LLMTrace,\n TraceContext,\n SimpleAgentConfig\n} from '@wix/evalforge-types';\nimport {\n AVAILABLE_CLAUDE_MODEL_IDS,\n AVAILABLE_GEMINI_MODEL_IDS,\n GEMINI_THINKING_MODEL_IDS,\n OPENAI_RESPONSES_MODEL_IDS,\n LLMStepType,\n LiveTraceEventType,\n SimpleAgentConfigSchema\n} from '@wix/evalforge-types';\nimport { randomUUID } from 'crypto';\nimport { buildMcpTools, closeMcpClients } from './mcp-tools.js';\nimport { emitTraceEvent } from '../shared/trace-emit.js';\nimport { detectMcpToolError } from '../shared/detect-tool-error.js';\nimport { calculateStepCost } from './cost-calculation.js';\nimport { buildConversation } from './build-conversation.js';\n\nconst PROVIDER_ANTHROPIC = 'anthropic';\nconst PROVIDER_OPENAI = 'openai';\nconst PROVIDER_GEMINI = 'gemini';\n\n/**\n * Default agentic loop iterations when MCP tools are available.\n * Caps tool-use rounds to prevent runaway loops; a single-step\n * limit is used when no tools are present. Can be overridden via\n * config.maxTurns.\n */\nconst DEFAULT_MAX_TOOL_STEPS = 25;\n\nexport function createModel(\n modelId: string,\n baseUrl: string,\n headers: Record<string, string>\n): LanguageModel {\n if (isClaudeModelId(modelId)) {\n const anthropic = createAnthropic({\n baseURL: `${baseUrl}/proxy/anthropic`,\n apiKey: 'proxy-auth',\n headers\n });\n return anthropic(modelId);\n }\n\n if (isGeminiModelId(modelId)) {\n const google = createGoogleGenerativeAI({\n baseURL: `${baseUrl}/proxy/gemini`,\n apiKey: 'proxy-auth',\n headers\n });\n return google(modelId);\n }\n\n const openai = createOpenAI({\n baseURL: `${baseUrl}/proxy/openai`,\n apiKey: 'proxy-auth',\n headers\n });\n\n if (\n [...OPENAI_RESPONSES_MODEL_IDS].some(\n (id) => modelId === id || modelId.startsWith(id)\n )\n ) {\n return openai.responses(modelId);\n }\n\n return openai.chat(modelId);\n}\n\nexport function isClaudeModelId(modelId: string): boolean {\n return (AVAILABLE_CLAUDE_MODEL_IDS as string[]).some(\n (id) => modelId === id || modelId.startsWith(id)\n );\n}\n\nexport function isGeminiModelId(modelId: string): boolean {\n return (AVAILABLE_GEMINI_MODEL_IDS as string[]).some(\n (id) => modelId === id || modelId.startsWith(id)\n );\n}\n\n/**\n * Extract text content from a skill's latest version files.\n * Concatenates all file contents, prioritizing SKILL.md if present.\n */\nexport function extractSkillContent(\n files: Array<{ path: string; content: string }> | undefined\n): string | undefined {\n if (!files || files.length === 0) return undefined;\n\n const skillMd = files.find((f) => f.path === 'SKILL.md');\n if (skillMd) return skillMd.content;\n\n return files.map((f) => f.content).join('\\n\\n');\n}\n\nexport async function executeWithAiSdk(\n context: AgentExecutionContext\n): Promise<AgentExecutionResult> {\n const {\n scenario,\n cwd,\n config,\n aiGatewayUrl,\n aiGatewayHeaders = {},\n mcps,\n traceContext\n } = context;\n\n // Parse config with typed Zod schema \u2014 all model + agent-specific params\n const typed = config\n ? SimpleAgentConfigSchema.passthrough().safeParse(config)\n : undefined;\n const cfg: SimpleAgentConfig | undefined = typed?.success\n ? typed.data\n : undefined;\n\n // Extract unknown config keys to forward as generateText options\n const schemaKeys = new Set(Object.keys(SimpleAgentConfigSchema.shape));\n const configExtras: Record<string, unknown> = {};\n if (config) {\n for (const [key, value] of Object.entries(config)) {\n if (!schemaKeys.has(key)) configExtras[key] = value;\n }\n }\n\n if (!aiGatewayUrl) {\n throw new Error('Simple Agent requires aiGatewayUrl');\n }\n if (!cfg?.model) {\n throw new Error('Simple Agent requires a model in config');\n }\n\n const modelId = cfg.model;\n const model = createModel(modelId, aiGatewayUrl, aiGatewayHeaders);\n const provider = isClaudeModelId(modelId)\n ? PROVIDER_ANTHROPIC\n : isGeminiModelId(modelId)\n ? PROVIDER_GEMINI\n : PROVIDER_OPENAI;\n\n const systemPrompt = composeSystemPrompt(context);\n\n const { tools: mcpTools, clients } =\n mcps && mcps.length > 0\n ? await buildMcpTools(mcps, cwd)\n : { tools: undefined, clients: [] };\n\n const startTime = Date.now();\n\n if (traceContext) {\n emitStartEvent(traceContext, startTime);\n }\n\n // maxTurns: 0 = unlimited (omit stopWhen), undefined = use default\n const effectiveMaxTurns =\n cfg.maxTurns === 0 ? undefined : (cfg.maxTurns ?? DEFAULT_MAX_TOOL_STEPS);\n\n const SDK_TIMEOUT_MS = resolveTimeoutMs(\n effectiveMaxTurns,\n (cfg as { maxDurationMs?: number }).maxDurationMs\n );\n const abortController = new AbortController();\n const timeoutHandle = setTimeout(() => {\n abortController.abort(\n new Error(\n `Simple Agent generateText / streamText timed out after ${SDK_TIMEOUT_MS}ms (model=${modelId}, scenario=${scenario.name})`\n )\n );\n }, SDK_TIMEOUT_MS);\n\n try {\n const isAnthropic = provider === PROVIDER_ANTHROPIC;\n const isResponsesAPI = [...OPENAI_RESPONSES_MODEL_IDS].some(\n (id) => modelId === id || modelId.startsWith(id)\n );\n const isGemini = provider === PROVIDER_GEMINI;\n const isGeminiThinking = isGemini && GEMINI_THINKING_MODEL_IDS.has(modelId);\n const supportsThinking = isAnthropic || isResponsesAPI || isGeminiThinking;\n\n const thinkingBudgetTokens = cfg.thinkingBudgetTokens ?? 10_000;\n\n const reasoningEffort = cfg.reasoningEffort ?? 'high';\n\n const computedProviderOpts = {\n ...(isAnthropic && {\n anthropic: {\n thinking: { type: 'enabled', budgetTokens: thinkingBudgetTokens }\n }\n }),\n ...(isResponsesAPI && {\n openai: {\n // Prevent the SDK from sending item_reference inputs that the proxy can't forward\n store: false,\n forceReasoning: true,\n reasoningEffort: reasoningEffort as 'low' | 'medium' | 'high',\n reasoningSummary: 'detailed' as const\n }\n }),\n ...(isGeminiThinking && {\n google: {\n thinkingConfig: {\n includeThoughts: true,\n thinkingBudget: 10000\n }\n }\n })\n };\n\n // Deep-merge: user extras first, computed values win\n const { providerOptions: extraProviderOptions, ...topLevelExtras } =\n configExtras;\n const mergedProviderOptions = {\n ...(extraProviderOptions && typeof extraProviderOptions === 'object'\n ? (extraProviderOptions as Record<string, unknown>)\n : {}),\n ...computedProviderOpts\n };\n\n const stepTimestamps: number[] = [];\n\n // Build user content with text and optional images\n const { triggerPromptImages } = context;\n const hasImages = triggerPromptImages && triggerPromptImages.length > 0;\n\n const sdkParams = {\n ...topLevelExtras,\n model,\n abortSignal: abortController.signal,\n system: systemPrompt,\n ...(hasImages\n ? {\n messages: [\n {\n role: 'user' as const,\n content: [\n { type: 'text' as const, text: scenario.triggerPrompt },\n ...triggerPromptImages!.map((img) => ({\n type: 'image' as const,\n image: img.base64,\n mediaType: img.mediaType\n }))\n ]\n }\n ]\n }\n : { prompt: scenario.triggerPrompt }),\n temperature: supportsThinking ? undefined : cfg.temperature,\n topP: supportsThinking ? undefined : cfg.topP,\n frequencyPenalty: cfg.frequencyPenalty,\n presencePenalty: cfg.presencePenalty,\n seed: cfg.seed,\n stopSequences: cfg.stopSequences,\n maxOutputTokens: cfg.maxTokens,\n tools: mcpTools as ToolSet | undefined,\n ...(mcpTools && effectiveMaxTurns != null\n ? { stopWhen: stepCountIs(effectiveMaxTurns) }\n : !mcpTools\n ? { stopWhen: stepCountIs(1) }\n : {}),\n providerOptions: mergedProviderOptions,\n onStepFinish: (step: StepResult<ToolSet>) => {\n stepTimestamps.push(Date.now());\n if (traceContext) {\n const isToolStep = step.toolCalls.length > 0;\n const firstToolCall = step.toolCalls[0];\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: stepTimestamps.length,\n type: isToolStep\n ? LiveTraceEventType.TOOL_USE\n : LiveTraceEventType.COMPLETION,\n toolName: firstToolCall?.toolName,\n toolArgs: firstToolCall\n ? (JSON.stringify(firstToolCall.input) ?? '').slice(0, 500)\n : undefined,\n outputPreview: step.text?.slice(0, 500),\n elapsedMs: Date.now() - startTime,\n timestamp: new Date().toISOString(),\n isComplete: false\n },\n traceContext.pushEvent\n );\n }\n }\n };\n\n // ResponsesAPI models use a blocking gateway call on the proxy side \u2192 JSON response.\n // All other models use the streaming gateway path \u2192 SSE.\n const shouldStream = !isResponsesAPI;\n\n let text: string;\n let steps: StepResult<ToolSet>[];\n let rawUsage: {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n };\n\n if (shouldStream) {\n const stream = streamText(sdkParams);\n [text, steps, rawUsage] = await Promise.all([\n stream.text,\n stream.steps,\n stream.usage\n ]);\n } else {\n const result = await generateText(sdkParams);\n text = result.text;\n steps = result.steps;\n rawUsage = result.usage;\n }\n\n const durationMs = Date.now() - startTime;\n\n const usage = {\n inputTokens: rawUsage.inputTokens ?? 0,\n outputTokens: rawUsage.outputTokens ?? 0,\n totalTokens: rawUsage.totalTokens ?? 0\n };\n\n const llmTrace = buildLLMTrace(\n steps,\n durationMs,\n usage,\n modelId,\n provider,\n startTime,\n stepTimestamps\n );\n\n if (traceContext) {\n emitCompletionEvent(traceContext, stepTimestamps.length + 1);\n }\n\n const conversation = buildConversation(\n scenario.triggerPrompt,\n steps,\n startTime,\n stepTimestamps\n );\n\n return {\n outputText: text,\n durationMs,\n usage,\n llmTrace,\n conversation\n };\n } catch (err) {\n const baseMsg = err instanceof Error ? err.message : String(err);\n const ctx = extractGatewayErrorContext(err);\n const apiError = findApiCallError(err);\n console.error(\n '[AI gateway error]',\n JSON.stringify({\n provider,\n model: modelId,\n message: baseMsg,\n statusCode: apiError?.statusCode,\n xWixRequestId: getHeader(apiError?.responseHeaders, 'x-wix-request-id'),\n proxyRequestId: getProxyBodyFields(apiError?.responseBody)\n .proxy_request_id,\n failurePhase: getProxyBodyFields(apiError?.responseBody).failure_phase\n })\n );\n throw new Error(\n `AI gateway request failed (provider=${provider}, model=${modelId}): ${baseMsg}${ctx}`,\n { cause: err }\n );\n } finally {\n clearTimeout(timeoutHandle);\n await closeMcpClients(clients);\n }\n}\n\n/**\n * Header names whose values identify a request on the upstream side\n * (OpenAI / openai-proxy / Cloudflare / wix-ai-gateway). Surfacing these in\n * the wrapped error message lets the AI-tools team correlate a failure with\n * their logs without needing the evalforge run id.\n */\nconst UPSTREAM_REQUEST_ID_HEADERS = [\n 'openai-request-id',\n 'x-request-id',\n 'cf-ray',\n 'x-wix-request-id'\n] as const;\n\n/**\n * Body fields stamped by the wix-ai-gateway-proxy (this repo's proxy package)\n * on every error response. Distinct from upstream headers because they\n * reliably tell us which side (our proxy vs. wix-ai-gateway) emitted the\n * error and let us search each side's logs by id.\n */\nconst PROXY_BODY_FIELDS = [\n 'proxy_request_id',\n 'upstream_request_id',\n 'failure_phase'\n] as const;\n\nconst MAX_ERROR_WALK_DEPTH = 5;\n\nfunction findApiCallError(err: unknown, depth = 0): APICallError | undefined {\n if (err == null || depth > MAX_ERROR_WALK_DEPTH) return undefined;\n if (APICallError.isInstance(err)) return err;\n\n if (typeof err === 'object') {\n const errors = (err as { errors?: unknown }).errors;\n if (Array.isArray(errors)) {\n for (let i = errors.length - 1; i >= 0; i--) {\n const found = findApiCallError(errors[i], depth + 1);\n if (found) return found;\n }\n }\n const cause = (err as { cause?: unknown }).cause;\n if (cause != null) return findApiCallError(cause, depth + 1);\n }\n\n return undefined;\n}\n\nfunction getHeader(\n headers: Record<string, string> | undefined,\n name: string\n): string | undefined {\n if (!headers) return undefined;\n const target = name.toLowerCase();\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() === target) return value;\n }\n return undefined;\n}\n\nfunction getProxyBodyFields(\n responseBody: unknown\n): Partial<Record<(typeof PROXY_BODY_FIELDS)[number], string>> {\n if (typeof responseBody !== 'string' || responseBody.length === 0) {\n return {};\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(responseBody);\n } catch {\n return {};\n }\n if (parsed == null || typeof parsed !== 'object') return {};\n\n const out: Partial<Record<(typeof PROXY_BODY_FIELDS)[number], string>> = {};\n for (const name of PROXY_BODY_FIELDS) {\n const value = (parsed as Record<string, unknown>)[name];\n if (typeof value === 'string' && value.length > 0) {\n out[name] = value;\n }\n }\n return out;\n}\n\n/**\n * Pull status code, upstream request-id headers, and the wix-ai-gateway-proxy's\n * own body fields (`proxy_request_id` / `upstream_request_id` / `failure_phase`)\n * from any AI SDK `APICallError` reachable via `cause` or a\n * `RetryError.errors[]` chain. Formatted as\n * ` [status=503, x-request-id=..., proxy_request_id=..., failure_phase=gateway]`.\n * Returns an empty string when nothing useful is found.\n */\nexport function extractGatewayErrorContext(err: unknown): string {\n const apiError = findApiCallError(err);\n if (!apiError) return '';\n\n const fields: string[] = [];\n if (typeof apiError.statusCode === 'number') {\n fields.push(`status=${apiError.statusCode}`);\n }\n for (const name of UPSTREAM_REQUEST_ID_HEADERS) {\n const value = getHeader(apiError.responseHeaders, name);\n if (value) fields.push(`${name}=${value}`);\n }\n const bodyFields = getProxyBodyFields(apiError.responseBody);\n for (const name of PROXY_BODY_FIELDS) {\n const value = bodyFields[name];\n if (value) fields.push(`${name}=${value}`);\n }\n return fields.length > 0 ? ` [${fields.join(', ')}]` : '';\n}\n\n/**\n * Build the system prompt for Simple Agent from skills, rules, and optional override.\n *\n * Unlike CLI agents (which have DEFAULT_EVALUATOR_SYSTEM_PROMPT), the Simple Agent\n * has no built-in default instructions. The three-state `systemPrompt` contract\n * (undefined = default, null = none, string = custom) effectively collapses to\n * two states here: both undefined and null result in no base prompt being prepended,\n * while a non-empty string is included as the first segment.\n */\nexport function composeSystemPrompt(\n context: AgentExecutionContext\n): string | undefined {\n const parts: string[] = [];\n\n if (context.systemPrompt) {\n parts.push(context.systemPrompt);\n }\n\n for (const skill of context.skills) {\n const content = extractSkillContent(skill.latestVersion?.files);\n if (content) {\n parts.push(content);\n }\n }\n\n if (context.rules) {\n for (const rule of context.rules) {\n if (rule.content) {\n parts.push(rule.content);\n }\n }\n }\n\n return parts.length > 0 ? parts.join('\\n\\n---\\n\\n') : undefined;\n}\n\n/**\n * Check if any tool result in a step indicates an error.\n * Returns the error text if found, null otherwise.\n */\nfunction findToolResultError(step: StepResult<ToolSet>): string | null {\n for (const tr of step.toolResults) {\n const output = (tr as { output?: unknown }).output;\n const error = detectMcpToolError(output);\n if (error) return error;\n }\n return null;\n}\n\nexport function buildLLMTrace(\n steps: StepResult<ToolSet>[],\n totalDurationMs: number,\n totalUsage: {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n },\n modelId: string,\n provider: string,\n executionStartMs: number,\n stepTimestamps: number[]\n): LLMTrace {\n const traceSteps = steps.map((step, i) => {\n const stepFinishedAt = stepTimestamps[i] ?? executionStartMs;\n const stepStartedAt =\n i === 0 ? executionStartMs : (stepTimestamps[i - 1] ?? executionStartMs);\n const stepDurationMs = stepFinishedAt - stepStartedAt;\n const firstToolCall = step.toolCalls[0];\n\n const tokenUsage = {\n prompt: step.usage.inputTokens ?? 0,\n completion: step.usage.outputTokens ?? 0,\n total: step.usage.totalTokens ?? 0\n };\n\n const costUsd = calculateStepCost(step, modelId, provider, tokenUsage);\n\n // Check if any tool result for this step indicates an error.\n // MCP tool results embed isError in the output content.\n const toolResultError = findToolResultError(step);\n\n return {\n id: randomUUID(),\n stepNumber: i + 1,\n turnIndex: i,\n type:\n step.toolCalls.length > 0\n ? LLMStepType.TOOL_USE\n : LLMStepType.COMPLETION,\n model: modelId,\n provider,\n startedAt: new Date(stepStartedAt).toISOString(),\n durationMs: stepDurationMs,\n tokenUsage,\n costUsd,\n toolName: firstToolCall?.toolName,\n toolArguments: firstToolCall\n ? (JSON.stringify(firstToolCall.input) ?? undefined)\n : undefined,\n outputPreview: step.text?.slice(0, 200),\n success: step.finishReason !== 'error' && !toolResultError,\n error:\n step.finishReason === 'error'\n ? 'Generation failed'\n : (toolResultError ?? undefined)\n };\n });\n\n const totalCostUsd = traceSteps.reduce((sum, s) => sum + s.costUsd, 0);\n\n const finalTokens = {\n prompt: totalUsage.inputTokens,\n completion: totalUsage.outputTokens,\n total: totalUsage.totalTokens\n };\n\n return {\n id: randomUUID(),\n steps: traceSteps,\n summary: {\n totalSteps: traceSteps.length,\n totalTurns: traceSteps.length,\n totalDurationMs,\n totalTokens: finalTokens,\n totalCostUsd,\n modelBreakdown: {\n [modelId]: {\n count: traceSteps.length,\n durationMs: totalDurationMs,\n tokens: finalTokens.total,\n costUsd: totalCostUsd\n }\n },\n modelsUsed: [modelId]\n }\n };\n}\n\nfunction emitStartEvent(traceContext: TraceContext, startTime: number): void {\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: 0,\n type: LiveTraceEventType.PROGRESS,\n outputPreview: 'Starting Simple Agent execution...',\n elapsedMs: Date.now() - startTime,\n timestamp: new Date().toISOString(),\n isComplete: false\n },\n traceContext.pushEvent\n );\n}\n\nfunction emitCompletionEvent(\n traceContext: TraceContext,\n stepNumber: number\n): void {\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber,\n type: LiveTraceEventType.COMPLETION,\n outputPreview: 'Scenario execution completed',\n timestamp: new Date().toISOString(),\n isComplete: true\n },\n traceContext.pushEvent\n );\n}\n", "import { createMCPClient } from '@ai-sdk/mcp';\nimport { Experimental_StdioMCPTransport } from '@ai-sdk/mcp/mcp-stdio';\nimport type { MCPEntity } from '@wix/evalforge-types';\nimport { resolveMcpPlaceholders } from '../shared/resolve-mcp-placeholders.js';\n\ninterface McpToolsResult {\n tools: Record<string, unknown>;\n clients: Array<{ close: () => Promise<void> }>;\n}\n\n/**\n * Build AI SDK tools from MCP entity configs.\n *\n * Each `MCPEntity.config` is a keyed record matching the `.mcp.json` shape,\n * e.g. `{ \"server-name\": { \"type\": \"stdio\", \"command\": \"node\", \"args\": [\"server.js\"] } }`.\n * Each entry becomes a live MCP client whose tools are merged into the result.\n */\nexport async function buildMcpTools(\n mcps: MCPEntity[],\n cwd: string\n): Promise<McpToolsResult> {\n const allTools: Record<string, unknown> = {};\n const clients: Array<{ close: () => Promise<void> }> = [];\n\n try {\n for (const mcp of mcps) {\n const resolvedConfig = await resolveMcpPlaceholders(\n mcp.config as Record<string, Record<string, unknown>>,\n { cwd }\n );\n for (const [serverName, serverConfig] of Object.entries(resolvedConfig)) {\n const config = serverConfig as Record<string, unknown>;\n const transport = buildTransport(serverName, config, cwd);\n const client = await createMCPClient({ transport });\n clients.push(client);\n const tools = await client.tools();\n\n // Prefix with the server name so tools from different servers never collide.\n // Non-alphanumeric characters (e.g. dashes) are replaced with underscores so\n // the resulting key is a valid Gemini function name ([a-zA-Z][a-zA-Z0-9_]*).\n // A single underscore separator is used intentionally \u2014 the Wix AI Gateway\n // strips everything before __ (double underscore) from Gemini function names,\n // so double underscores must be avoided.\n const safePrefix = serverName.replace(/[^a-zA-Z0-9]/g, '_');\n for (const [toolName, tool] of Object.entries(tools)) {\n allTools[`${safePrefix}_${toolName}`] = tool;\n }\n }\n }\n } catch (err) {\n await closeMcpClients(clients);\n throw err;\n }\n\n return { tools: allTools, clients };\n}\n\nexport async function closeMcpClients(\n clients: Array<{ close: () => Promise<void> }>\n): Promise<void> {\n await Promise.allSettled(clients.map((c) => c.close()));\n}\n\n/**\n * Build an AI SDK MCP transport from a server config entry.\n *\n * Supports three transport types:\n * - stdio: local process (Experimental_StdioMCPTransport)\n * - http: streamable HTTP (config object with type: 'http')\n * - sse: Server-Sent Events (config object with type: 'sse')\n */\nexport function buildTransport(\n serverName: string,\n config: Record<string, unknown>,\n cwd: string\n) {\n const type = config.type as string | undefined;\n const headers = config.headers as Record<string, string> | undefined;\n\n if (type === 'stdio' || config.command) {\n return new Experimental_StdioMCPTransport({\n command: config.command as string,\n args: (config.args as string[]) ?? [],\n env: { ...(config.env as Record<string, string> | undefined), PWD: cwd },\n cwd\n });\n }\n\n if (type === 'http') {\n return {\n type: 'http' as const,\n url: config.url as string,\n ...(headers && { headers })\n };\n }\n\n if (type === 'sse' || config.url) {\n return {\n type: 'sse' as const,\n url: config.url as string,\n ...(headers && { headers })\n };\n }\n\n throw new Error(\n `MCP server \"${serverName}\" has unsupported transport config (type=${type ?? 'unset'}). ` +\n `Expected type \"stdio\", \"http\", or \"sse\", or a config with \"command\" or \"url\".`\n );\n}\n", "/**\n * Detect if an MCP tool result output indicates an error.\n *\n * MCP tool results embed `isError: true` in the output object.\n * We first check the structured object, then fall back to string matching\n * for cases where the output is already serialized.\n *\n * @returns The error text if found, null otherwise.\n */\nexport function detectMcpToolError(output: unknown): string | null {\n if (output == null) return null;\n\n // Structured check: output is an object with isError flag\n if (typeof output === 'object' && 'isError' in output) {\n const obj = output as {\n isError?: boolean;\n content?: Array<{ text?: string }>;\n };\n if (obj.isError === true) {\n return extractErrorText(obj.content);\n }\n }\n\n // Fallback: output is a serialized string containing the error pattern\n const str = typeof output === 'string' ? output : null;\n if (\n str &&\n (str.includes('\"isError\":true') || str.includes('\"isError\": true'))\n ) {\n try {\n const parsed = JSON.parse(str) as {\n isError?: boolean;\n content?: Array<{ text?: string }>;\n };\n if (parsed.isError === true) {\n return extractErrorText(parsed.content);\n }\n } catch {\n // Unparseable \u2014 return raw string as error\n return str.slice(0, 500);\n }\n }\n\n return null;\n}\n\nfunction extractErrorText(\n content: Array<{ text?: string }> | undefined\n): string {\n if (Array.isArray(content)) {\n const text = content\n .filter((c) => typeof c.text === 'string')\n .map((c) => c.text)\n .join('\\n');\n if (text) return text.slice(0, 500);\n }\n return 'Tool call failed';\n}\n", "import type { StepResult, ToolSet } from 'ai';\nimport { normalizeModelId } from '@wix/evalforge-types';\n\nconst PROVIDER_ANTHROPIC = 'anthropic';\nconst PROVIDER_GEMINI = 'gemini';\n\n/**\n * Per-1M-token pricing keyed by official model ID.\n * Used as fallback when the gateway doesn't report cost.\n */\nconst MODEL_PRICING: Record<string, { input: number; output: number }> = {\n // Anthropic \u2014 Claude 4.6\n 'claude-sonnet-4-6': { input: 3, output: 15 },\n 'claude-opus-4-6': { input: 15, output: 75 },\n // Anthropic \u2014 Claude 4.5\n 'claude-opus-4-5': { input: 5, output: 25 },\n 'claude-sonnet-4-5': { input: 3, output: 15 },\n 'claude-haiku-4-5': { input: 1, output: 5 },\n // Anthropic \u2014 Claude 4\n 'claude-opus-4': { input: 15, output: 75 },\n 'claude-sonnet-4': { input: 3, output: 15 },\n\n // OpenAI \u2014 GPT-5\n 'gpt-5': { input: 1.25, output: 10 },\n 'gpt-5-mini': { input: 0.25, output: 2 },\n 'gpt-5-nano': { input: 0.05, output: 0.4 },\n // OpenAI \u2014 GPT-4.1\n 'gpt-4.1': { input: 2, output: 8 },\n 'gpt-4.1-mini': { input: 0.4, output: 1.6 },\n 'gpt-4.1-nano': { input: 0.1, output: 0.4 },\n // OpenAI \u2014 GPT-4o\n 'gpt-4o': { input: 2.5, output: 10 },\n 'gpt-4o-mini': { input: 0.15, output: 0.6 },\n // OpenAI \u2014 Reasoning\n o3: { input: 2, output: 8 },\n 'o4-mini': { input: 1.1, output: 4.4 },\n 'o3-mini': { input: 1.1, output: 4.4 },\n o1: { input: 15, output: 60 },\n\n // Google Gemini 2.0\n 'gemini-2.0-flash': { input: 0.1, output: 0.4 },\n 'gemini-2.0-flash-lite': { input: 0.075, output: 0.3 },\n // Google Gemini 2.5\n 'gemini-2.5-pro': { input: 1.25, output: 10.0 },\n 'gemini-2.5-flash': { input: 0.15, output: 0.6 },\n 'gemini-2.5-flash-lite': { input: 0.075, output: 0.3 },\n // Google Gemini 3.x \u2014 standard pricing up to 200K context tokens\n 'gemini-3-pro-preview': { input: 2.0, output: 12.0 },\n 'gemini-3-flash-preview': { input: 0.5, output: 3.0 },\n 'gemini-3.1-pro-preview': { input: 2.0, output: 12.0 },\n 'gemini-3.5-flash': { input: 1.5, output: 9.0 }\n};\n\n/**\n * Extract gateway-computed cost from a Vercel AI SDK step result.\n * The Wix AI Gateway reports accurate cost (including cache discounts)\n * via `total_cost_usd` injected by the proxy into the provider response.\n *\n * - Anthropic: available in `providerMetadata.anthropic.usage.total_cost_usd`\n * - OpenAI/Gemini: available at the top level of `response.body.total_cost_usd`\n */\nfunction extractGatewayCost(\n step: StepResult<ToolSet>,\n provider: string\n): number | undefined {\n try {\n if (provider === PROVIDER_ANTHROPIC) {\n const meta = step.providerMetadata as Record<string, unknown> | undefined;\n const anthropic = meta?.anthropic as Record<string, unknown> | undefined;\n const usage = anthropic?.usage as Record<string, unknown> | undefined;\n const cost = usage?.total_cost_usd;\n return typeof cost === 'number' && cost > 0 ? cost : undefined;\n }\n\n if (provider === PROVIDER_GEMINI) {\n const meta = step.providerMetadata as Record<string, unknown> | undefined;\n const google = meta?.google as Record<string, unknown> | undefined;\n const cost = google?.total_cost_usd;\n if (typeof cost === 'number' && cost > 0) return cost;\n // Fallback: cost may also be in the raw response body\n const body = step.response?.body as Record<string, unknown> | undefined;\n const bodyCost = body?.total_cost_usd;\n return typeof bodyCost === 'number' && bodyCost > 0\n ? bodyCost\n : undefined;\n }\n\n const body = step.response?.body as Record<string, unknown> | undefined;\n const cost = body?.total_cost_usd;\n return typeof cost === 'number' && cost > 0 ? cost : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Calculate cost from the built-in pricing table.\n * Normalizes legacy gateway model IDs before lookup.\n * Returns 0 for unknown models.\n */\nfunction calculateFromPricing(\n modelId: string,\n tokenUsage: { prompt: number; completion: number }\n): number {\n const normalized = normalizeModelId(modelId);\n const pricing =\n MODEL_PRICING[normalized] ??\n MODEL_PRICING[\n Object.keys(MODEL_PRICING).find((key) => normalized.startsWith(key)) ?? ''\n ];\n if (!pricing) return 0;\n\n return (\n (tokenUsage.prompt / 1_000_000) * pricing.input +\n (tokenUsage.completion / 1_000_000) * pricing.output\n );\n}\n\n/**\n * Calculate the cost for a single LLM step.\n * Prefers the gateway-reported cost (accurate with cache discounts),\n * falling back to the built-in pricing table.\n */\nexport function calculateStepCost(\n step: StepResult<ToolSet>,\n modelId: string,\n provider: string,\n tokenUsage: { prompt: number; completion: number }\n): number {\n return (\n extractGatewayCost(step, provider) ??\n calculateFromPricing(modelId, tokenUsage)\n );\n}\n", "import type {\n ConversationBlock,\n ConversationMessage\n} from '@wix/evalforge-types';\nimport type { StepResult, ToolSet } from 'ai';\nimport { detectMcpToolError } from '../shared/detect-tool-error.js';\n\n/**\n * Build a serializable conversation from Vercel AI SDK step results.\n *\n * Maps the step-based execution model to the same ConversationMessage\n * format used by the Claude Code adapter, so both agent types render\n * identically in the Conversation tab.\n */\nexport function buildConversation(\n triggerPrompt: string,\n steps: StepResult<ToolSet>[],\n executionStartMs: number,\n stepTimestamps: number[]\n): ConversationMessage[] {\n const messages: ConversationMessage[] = [];\n\n messages.push({\n role: 'user',\n content: [{ type: 'text', text: triggerPrompt }],\n timestamp: new Date(executionStartMs).toISOString()\n });\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n const stepStartedAt =\n i === 0 ? executionStartMs : (stepTimestamps[i - 1] ?? executionStartMs);\n const stepFinishedAt = stepTimestamps[i] ?? executionStartMs;\n const assistantTimestamp = new Date(stepStartedAt).toISOString();\n const toolResultTimestamp = new Date(stepFinishedAt).toISOString();\n\n const assistantContent: ConversationBlock[] = [];\n\n if (step.reasoningText) {\n assistantContent.push({ type: 'thinking', thinking: step.reasoningText });\n }\n\n if (step.text) {\n assistantContent.push({ type: 'text', text: step.text });\n }\n\n for (const tc of step.toolCalls) {\n assistantContent.push({\n type: 'tool_use',\n toolName: tc.toolName,\n toolId: tc.toolCallId,\n input: tc.input\n });\n }\n\n if (assistantContent.length > 0) {\n messages.push({\n role: 'assistant',\n content: assistantContent,\n timestamp: assistantTimestamp\n });\n }\n\n if (step.toolResults.length > 0) {\n const resultBlocks: ConversationBlock[] = step.toolResults.map((tr) => {\n const outputStr =\n typeof tr.output === 'string' ? tr.output : JSON.stringify(tr.output);\n const isError = detectMcpToolError(tr.output) !== null;\n return {\n type: 'tool_result' as const,\n toolUseId: tr.toolCallId,\n content: outputStr,\n ...(isError ? { isError: true } : {})\n };\n });\n messages.push({\n role: 'user',\n content: resultBlocks,\n timestamp: toolResultTimestamp\n });\n }\n }\n\n return messages;\n}\n", "import type {\n AgentAdapter,\n AgentExecutionContext,\n AgentExecutionResult\n} from '@wix/evalforge-types';\nimport type { AgentRunCommand } from '@wix/evalforge-types';\nimport { executeWithAiSdk } from './execute.js';\n\n/**\n * Simple Agent adapter.\n *\n * Executes LLM calls in-process via the Vercel AI SDK, routing through\n * our proxy to support both Claude and OpenAI models. Supports MCP tools\n * for interacting with the working directory.\n *\n * Looked up by adapter ID (not CLI command) since SDK agents have\n * empty supportedCommands.\n */\nexport class SimpleAgentAdapter implements AgentAdapter {\n readonly id = 'simple-agent';\n readonly name = 'Simple Agent';\n readonly supportedCommands: readonly AgentRunCommand[] = [];\n\n async execute(context: AgentExecutionContext): Promise<AgentExecutionResult> {\n return executeWithAiSdk(context);\n }\n}\n\nexport const simpleAgentAdapter = new SimpleAgentAdapter();\n", "import { defaultRegistry } from '../registry.js';\nimport { simpleAgentAdapter } from './simple-agent-adapter.js';\n\ndefaultRegistry.register(simpleAgentAdapter);\n", "/**\n * File diff utilities for capturing and comparing file changes.\n *\n * Used to track changes made by Claude during scenario execution\n * when running against a template.\n */\n\nimport { readdirSync, readFileSync, statSync, existsSync } from 'fs';\nimport { join, relative } from 'path';\nimport { diffLines as computeDiff } from 'diff';\nimport type { DiffContent, DiffLine, TemplateFile } from '@wix/evalforge-types';\n\n/**\n * Derive the set of infrastructure file paths by comparing a pre-prepare\n * snapshot with the post-prepare (baseline) snapshot.\n * Any file that was created or modified by `prepareEnvironment()` is infrastructure.\n */\nexport function deriveInfrastructurePaths(\n prePrep: FileSnapshot,\n postPrep: FileSnapshot\n): Set<string> {\n const infraPaths = new Set<string>();\n for (const path of Object.keys(postPrep)) {\n if (prePrep[path] === undefined || prePrep[path] !== postPrep[path]) {\n infraPaths.add(path);\n }\n }\n return infraPaths;\n}\n\n/**\n * A snapshot of file contents in a directory.\n * Maps relative file paths to their contents.\n */\nexport interface FileSnapshot {\n [relativePath: string]: string;\n}\n\n/**\n * Directories and patterns to ignore when snapshotting.\n */\nconst IGNORED_PATTERNS = [\n 'node_modules',\n '.git',\n '.cursor',\n 'dist',\n 'build',\n '.next',\n '.turbo',\n '__pycache__',\n '.pytest_cache',\n '.venv',\n 'venv',\n '.DS_Store'\n];\n\n/**\n * File extensions to treat as binary (skip content reading).\n */\nconst BINARY_EXTENSIONS = [\n '.png',\n '.jpg',\n '.jpeg',\n '.gif',\n '.webp',\n '.ico',\n '.svg',\n '.woff',\n '.woff2',\n '.ttf',\n '.eot',\n '.mp3',\n '.mp4',\n '.wav',\n '.avi',\n '.mov',\n '.pdf',\n '.zip',\n '.tar',\n '.gz',\n '.rar',\n '.7z',\n '.exe',\n '.dll',\n '.so',\n '.dylib'\n];\n\n/**\n * Maximum file size to read (100KB).\n * Larger files are skipped to avoid memory issues.\n */\nconst MAX_FILE_SIZE = 100 * 1024;\n\n/**\n * Check if a path should be ignored.\n */\nfunction shouldIgnore(name: string): boolean {\n return IGNORED_PATTERNS.some(\n (pattern) => name === pattern || name.startsWith(pattern + '/')\n );\n}\n\n/**\n * Check if a file is binary based on extension.\n */\nfunction isBinaryFile(filename: string): boolean {\n const lower = filename.toLowerCase();\n return BINARY_EXTENSIONS.some((ext) => lower.endsWith(ext));\n}\n\n/**\n * Recursively snapshot a directory.\n *\n * @param dir - The directory to snapshot\n * @param baseDir - The base directory for computing relative paths\n * @returns A map of relative paths to file contents\n */\nexport function snapshotDirectory(dir: string, baseDir?: string): FileSnapshot {\n const snapshot: FileSnapshot = {};\n const base = baseDir || dir;\n\n if (!existsSync(dir)) {\n return snapshot;\n }\n\n const entries = readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n const relativePath = relative(base, fullPath);\n\n // Skip ignored directories and files\n if (shouldIgnore(entry.name)) {\n continue;\n }\n\n if (entry.isDirectory()) {\n // Recursively snapshot subdirectories\n const subSnapshot = snapshotDirectory(fullPath, base);\n Object.assign(snapshot, subSnapshot);\n } else if (entry.isFile()) {\n // Skip binary files\n if (isBinaryFile(entry.name)) {\n continue;\n }\n\n // Skip files that are too large\n try {\n const stats = statSync(fullPath);\n if (stats.size > MAX_FILE_SIZE) {\n continue;\n }\n\n // Read file contents\n const content = readFileSync(fullPath, 'utf-8');\n snapshot[relativePath] = content;\n } catch {\n // Skip files that can't be read\n continue;\n }\n }\n }\n\n return snapshot;\n}\n\n/**\n * Generate diff lines from before/after content using the Myers diff algorithm.\n * This correctly identifies the minimal set of changes by comparing content,\n * not just line positions.\n */\nfunction generateDiffLines(before: string, after: string): DiffLine[] {\n const changes = computeDiff(before, after);\n const result: DiffLine[] = [];\n let lineNumber = 1;\n\n for (const change of changes) {\n // Remove trailing newline and split into individual lines\n const lines = change.value.replace(/\\n$/, '').split('\\n');\n const type: DiffLine['type'] = change.added\n ? 'added'\n : change.removed\n ? 'removed'\n : 'unchanged';\n\n for (const content of lines) {\n result.push({\n type,\n content,\n lineNumber: lineNumber++\n });\n }\n }\n\n return result;\n}\n\n/**\n * Compare two snapshots and generate diffs for changed files.\n * Includes new empty files and detects file renames.\n *\n * @param before - Snapshot before execution\n * @param after - Snapshot after execution\n * @param infrastructurePaths - Optional set of paths known to be infrastructure files\n * @returns Array of DiffContent for files that were created, modified, or renamed\n */\nexport function diffSnapshots(\n before: FileSnapshot,\n after: FileSnapshot,\n infrastructurePaths?: Set<string>\n): DiffContent[] {\n const diffs: DiffContent[] = [];\n const allPaths = new Set([...Object.keys(before), ...Object.keys(after)]);\n\n for (const path of allPaths) {\n const beforeContent = before[path] ?? '';\n const afterContent = after[path] ?? '';\n\n // Skip when it's an existing file with no changes.\n if (before[path] !== undefined && beforeContent === afterContent) {\n continue;\n }\n\n // Generate diff\n const diffLines = generateDiffLines(beforeContent, afterContent);\n\n diffs.push({\n path,\n expected: beforeContent,\n actual: afterContent,\n diffLines,\n ...(infrastructurePaths?.has(path) && { isInfrastructure: true })\n });\n }\n\n const deletedPaths = [...allPaths].filter((p) => after[p] === undefined);\n const addedPaths = [...allPaths].filter((p) => before[p] === undefined);\n\n const renamedFromByNewPath = new Map<string, string>();\n const deletedPathsToRemove = new Set<string>();\n\n for (const addedPath of addedPaths) {\n const addedContent = after[addedPath] ?? '';\n const deletedMatch = deletedPaths.find(\n (dp) =>\n (before[dp] ?? '') === addedContent && !deletedPathsToRemove.has(dp)\n );\n if (deletedMatch) {\n renamedFromByNewPath.set(addedPath, deletedMatch);\n deletedPathsToRemove.add(deletedMatch);\n }\n }\n\n const result = diffs\n .filter((d) => !deletedPathsToRemove.has(d.path))\n .map((d) => {\n const renamedFrom = renamedFromByNewPath.get(d.path);\n return renamedFrom ? { ...d, renamedFrom } : d;\n });\n\n // Sort by path for consistent ordering\n result.sort((a, b) => a.path.localeCompare(b.path));\n\n return result;\n}\n\n/**\n * Extract template files with their status from before/after snapshots.\n *\n * @param before - Snapshot before execution\n * @param after - Snapshot after execution\n * @param infrastructurePaths - Optional set of paths known to be infrastructure files\n * @returns Array of TemplateFile with status indicators\n */\nexport function extractTemplateFiles(\n before: FileSnapshot,\n after: FileSnapshot,\n infrastructurePaths?: Set<string>\n): TemplateFile[] {\n const files: TemplateFile[] = [];\n const allPaths = new Set([...Object.keys(before), ...Object.keys(after)]);\n\n for (const path of allPaths) {\n const beforeContent = before[path];\n const afterContent = after[path];\n\n // Only include files that exist after execution (skip deleted files)\n if (afterContent === undefined) {\n continue;\n }\n\n let status: 'new' | 'modified' | 'unchanged';\n if (beforeContent === undefined) {\n status = 'new';\n } else if (beforeContent !== afterContent) {\n status = 'modified';\n } else {\n status = 'unchanged';\n }\n\n files.push({\n path,\n content: afterContent,\n status,\n ...(infrastructurePaths?.has(path) && { isInfrastructure: true })\n });\n }\n\n // Sort by path for consistent ordering\n files.sort((a, b) => a.path.localeCompare(b.path));\n\n return files;\n}\n", "function Diff() {}\nDiff.prototype = {\n diff: function diff(oldString, newString) {\n var _options$timeout;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = options.callback;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n var self = this;\n function done(value) {\n value = self.postProcess(value, options);\n if (callback) {\n setTimeout(function () {\n callback(value);\n }, 0);\n return true;\n } else {\n return value;\n }\n }\n\n // Allow subclasses to massage the input prior to running\n oldString = this.castInput(oldString, options);\n newString = this.castInput(newString, options);\n oldString = this.removeEmpty(this.tokenize(oldString, options));\n newString = this.removeEmpty(this.tokenize(newString, options));\n var newLen = newString.length,\n oldLen = oldString.length;\n var editLength = 1;\n var maxEditLength = newLen + oldLen;\n if (options.maxEditLength != null) {\n maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n }\n var maxExecutionTime = (_options$timeout = options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity;\n var abortAfterTimestamp = Date.now() + maxExecutionTime;\n var bestPath = [{\n oldPos: -1,\n lastComponent: undefined\n }];\n\n // Seed editLength = 0, i.e. the content starts with the same values\n var newPos = this.extractCommon(bestPath[0], newString, oldString, 0, options);\n if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // Identity per the equality and tokenizer\n return done(buildValues(self, bestPath[0].lastComponent, newString, oldString, self.useLongestToken));\n }\n\n // Once we hit the right edge of the edit graph on some diagonal k, we can\n // definitely reach the end of the edit graph in no more than k edits, so\n // there's no point in considering any moves to diagonal k+1 any more (from\n // which we're guaranteed to need at least k+1 more edits).\n // Similarly, once we've reached the bottom of the edit graph, there's no\n // point considering moves to lower diagonals.\n // We record this fact by setting minDiagonalToConsider and\n // maxDiagonalToConsider to some finite value once we've hit the edge of\n // the edit graph.\n // This optimization is not faithful to the original algorithm presented in\n // Myers's paper, which instead pointlessly extends D-paths off the end of\n // the edit graph - see page 7 of Myers's paper which notes this point\n // explicitly and illustrates it with a diagram. This has major performance\n // implications for some common scenarios. For instance, to compute a diff\n // where the new text simply appends d characters on the end of the\n // original text of length n, the true Myers algorithm will take O(n+d^2)\n // time while this optimization needs only O(n+d) time.\n var minDiagonalToConsider = -Infinity,\n maxDiagonalToConsider = Infinity;\n\n // Main worker method. checks all permutations of a given edit length for acceptance.\n function execEditLength() {\n for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {\n var basePath = void 0;\n var removePath = bestPath[diagonalPath - 1],\n addPath = bestPath[diagonalPath + 1];\n if (removePath) {\n // No one else is going to attempt to use this value, clear it\n bestPath[diagonalPath - 1] = undefined;\n }\n var canAdd = false;\n if (addPath) {\n // what newPos will be after we do an insertion:\n var addPathNewPos = addPath.oldPos - diagonalPath;\n canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;\n }\n var canRemove = removePath && removePath.oldPos + 1 < oldLen;\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\n }\n\n // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the old string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canRemove || canAdd && removePath.oldPos < addPath.oldPos) {\n basePath = self.addToPath(addPath, true, false, 0, options);\n } else {\n basePath = self.addToPath(removePath, false, true, 1, options);\n }\n newPos = self.extractCommon(basePath, newString, oldString, diagonalPath, options);\n if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // If we have hit the end of both strings, then we are done\n return done(buildValues(self, basePath.lastComponent, newString, oldString, self.useLongestToken));\n } else {\n bestPath[diagonalPath] = basePath;\n if (basePath.oldPos + 1 >= oldLen) {\n maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);\n }\n if (newPos + 1 >= newLen) {\n minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);\n }\n }\n }\n editLength++;\n }\n\n // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced, or until the edit length exceeds options.maxEditLength (if given),\n // in which case it will return undefined.\n if (callback) {\n (function exec() {\n setTimeout(function () {\n if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {\n return callback();\n }\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n })();\n } else {\n while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {\n var ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n }\n },\n addToPath: function addToPath(path, added, removed, oldPosInc, options) {\n var last = path.lastComponent;\n if (last && !options.oneChangePerToken && last.added === added && last.removed === removed) {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: {\n count: last.count + 1,\n added: added,\n removed: removed,\n previousComponent: last.previousComponent\n }\n };\n } else {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: {\n count: 1,\n added: added,\n removed: removed,\n previousComponent: last\n }\n };\n }\n },\n extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath, options) {\n var newLen = newString.length,\n oldLen = oldString.length,\n oldPos = basePath.oldPos,\n newPos = oldPos - diagonalPath,\n commonCount = 0;\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(oldString[oldPos + 1], newString[newPos + 1], options)) {\n newPos++;\n oldPos++;\n commonCount++;\n if (options.oneChangePerToken) {\n basePath.lastComponent = {\n count: 1,\n previousComponent: basePath.lastComponent,\n added: false,\n removed: false\n };\n }\n }\n if (commonCount && !options.oneChangePerToken) {\n basePath.lastComponent = {\n count: commonCount,\n previousComponent: basePath.lastComponent,\n added: false,\n removed: false\n };\n }\n basePath.oldPos = oldPos;\n return newPos;\n },\n equals: function equals(left, right, options) {\n if (options.comparator) {\n return options.comparator(left, right);\n } else {\n return left === right || options.ignoreCase && left.toLowerCase() === right.toLowerCase();\n }\n },\n removeEmpty: function removeEmpty(array) {\n var ret = [];\n for (var i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n return ret;\n },\n castInput: function castInput(value) {\n return value;\n },\n tokenize: function tokenize(value) {\n return Array.from(value);\n },\n join: function join(chars) {\n return chars.join('');\n },\n postProcess: function postProcess(changeObjects) {\n return changeObjects;\n }\n};\nfunction buildValues(diff, lastComponent, newString, oldString, useLongestToken) {\n // First we convert our linked list of components in reverse order to an\n // array in the right order:\n var components = [];\n var nextComponent;\n while (lastComponent) {\n components.push(lastComponent);\n nextComponent = lastComponent.previousComponent;\n delete lastComponent.previousComponent;\n lastComponent = nextComponent;\n }\n components.reverse();\n var componentPos = 0,\n componentLen = components.length,\n newPos = 0,\n oldPos = 0;\n for (; componentPos < componentLen; componentPos++) {\n var component = components[componentPos];\n if (!component.removed) {\n if (!component.added && useLongestToken) {\n var value = newString.slice(newPos, newPos + component.count);\n value = value.map(function (value, i) {\n var oldValue = oldString[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = diff.join(value);\n } else {\n component.value = diff.join(newString.slice(newPos, newPos + component.count));\n }\n newPos += component.count;\n\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n } else {\n component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));\n oldPos += component.count;\n }\n }\n return components;\n}\n\nvar characterDiff = new Diff();\nfunction diffChars(oldStr, newStr, options) {\n return characterDiff.diff(oldStr, newStr, options);\n}\n\nfunction longestCommonPrefix(str1, str2) {\n var i;\n for (i = 0; i < str1.length && i < str2.length; i++) {\n if (str1[i] != str2[i]) {\n return str1.slice(0, i);\n }\n }\n return str1.slice(0, i);\n}\nfunction longestCommonSuffix(str1, str2) {\n var i;\n\n // Unlike longestCommonPrefix, we need a special case to handle all scenarios\n // where we return the empty string since str1.slice(-0) will return the\n // entire string.\n if (!str1 || !str2 || str1[str1.length - 1] != str2[str2.length - 1]) {\n return '';\n }\n for (i = 0; i < str1.length && i < str2.length; i++) {\n if (str1[str1.length - (i + 1)] != str2[str2.length - (i + 1)]) {\n return str1.slice(-i);\n }\n }\n return str1.slice(-i);\n}\nfunction replacePrefix(string, oldPrefix, newPrefix) {\n if (string.slice(0, oldPrefix.length) != oldPrefix) {\n throw Error(\"string \".concat(JSON.stringify(string), \" doesn't start with prefix \").concat(JSON.stringify(oldPrefix), \"; this is a bug\"));\n }\n return newPrefix + string.slice(oldPrefix.length);\n}\nfunction replaceSuffix(string, oldSuffix, newSuffix) {\n if (!oldSuffix) {\n return string + newSuffix;\n }\n if (string.slice(-oldSuffix.length) != oldSuffix) {\n throw Error(\"string \".concat(JSON.stringify(string), \" doesn't end with suffix \").concat(JSON.stringify(oldSuffix), \"; this is a bug\"));\n }\n return string.slice(0, -oldSuffix.length) + newSuffix;\n}\nfunction removePrefix(string, oldPrefix) {\n return replacePrefix(string, oldPrefix, '');\n}\nfunction removeSuffix(string, oldSuffix) {\n return replaceSuffix(string, oldSuffix, '');\n}\nfunction maximumOverlap(string1, string2) {\n return string2.slice(0, overlapCount(string1, string2));\n}\n\n// Nicked from https://stackoverflow.com/a/60422853/1709587\nfunction overlapCount(a, b) {\n // Deal with cases where the strings differ in length\n var startA = 0;\n if (a.length > b.length) {\n startA = a.length - b.length;\n }\n var endB = b.length;\n if (a.length < b.length) {\n endB = a.length;\n }\n // Create a back-reference for each index\n // that should be followed in case of a mismatch.\n // We only need B to make these references:\n var map = Array(endB);\n var k = 0; // Index that lags behind j\n map[0] = 0;\n for (var j = 1; j < endB; j++) {\n if (b[j] == b[k]) {\n map[j] = map[k]; // skip over the same character (optional optimisation)\n } else {\n map[j] = k;\n }\n while (k > 0 && b[j] != b[k]) {\n k = map[k];\n }\n if (b[j] == b[k]) {\n k++;\n }\n }\n // Phase 2: use these references while iterating over A\n k = 0;\n for (var i = startA; i < a.length; i++) {\n while (k > 0 && a[i] != b[k]) {\n k = map[k];\n }\n if (a[i] == b[k]) {\n k++;\n }\n }\n return k;\n}\n\n/**\n * Returns true if the string consistently uses Windows line endings.\n */\nfunction hasOnlyWinLineEndings(string) {\n return string.includes('\\r\\n') && !string.startsWith('\\n') && !string.match(/[^\\r]\\n/);\n}\n\n/**\n * Returns true if the string consistently uses Unix line endings.\n */\nfunction hasOnlyUnixLineEndings(string) {\n return !string.includes('\\r\\n') && string.includes('\\n');\n}\n\n// Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode\n//\n// Ranges and exceptions:\n// Latin-1 Supplement, 0080\u201300FF\n// - U+00D7 \u00D7 Multiplication sign\n// - U+00F7 \u00F7 Division sign\n// Latin Extended-A, 0100\u2013017F\n// Latin Extended-B, 0180\u2013024F\n// IPA Extensions, 0250\u201302AF\n// Spacing Modifier Letters, 02B0\u201302FF\n// - U+02C7 \u02C7 &#711; Caron\n// - U+02D8 \u02D8 &#728; Breve\n// - U+02D9 \u02D9 &#729; Dot Above\n// - U+02DA \u02DA &#730; Ring Above\n// - U+02DB \u02DB &#731; Ogonek\n// - U+02DC \u02DC &#732; Small Tilde\n// - U+02DD \u02DD &#733; Double Acute Accent\n// Latin Extended Additional, 1E00\u20131EFF\nvar extendedWordChars = \"a-zA-Z0-9_\\\\u{C0}-\\\\u{FF}\\\\u{D8}-\\\\u{F6}\\\\u{F8}-\\\\u{2C6}\\\\u{2C8}-\\\\u{2D7}\\\\u{2DE}-\\\\u{2FF}\\\\u{1E00}-\\\\u{1EFF}\";\n\n// Each token is one of the following:\n// - A punctuation mark plus the surrounding whitespace\n// - A word plus the surrounding whitespace\n// - Pure whitespace (but only in the special case where this the entire text\n// is just whitespace)\n//\n// We have to include surrounding whitespace in the tokens because the two\n// alternative approaches produce horribly broken results:\n// * If we just discard the whitespace, we can't fully reproduce the original\n// text from the sequence of tokens and any attempt to render the diff will\n// get the whitespace wrong.\n// * If we have separate tokens for whitespace, then in a typical text every\n// second token will be a single space character. But this often results in\n// the optimal diff between two texts being a perverse one that preserves\n// the spaces between words but deletes and reinserts actual common words.\n// See https://github.com/kpdecker/jsdiff/issues/160#issuecomment-1866099640\n// for an example.\n//\n// Keeping the surrounding whitespace of course has implications for .equals\n// and .join, not just .tokenize.\n\n// This regex does NOT fully implement the tokenization rules described above.\n// Instead, it gives runs of whitespace their own \"token\". The tokenize method\n// then handles stitching whitespace tokens onto adjacent word or punctuation\n// tokens.\nvar tokenizeIncludingWhitespace = new RegExp(\"[\".concat(extendedWordChars, \"]+|\\\\s+|[^\").concat(extendedWordChars, \"]\"), 'ug');\nvar wordDiff = new Diff();\nwordDiff.equals = function (left, right, options) {\n if (options.ignoreCase) {\n left = left.toLowerCase();\n right = right.toLowerCase();\n }\n return left.trim() === right.trim();\n};\nwordDiff.tokenize = function (value) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var parts;\n if (options.intlSegmenter) {\n if (options.intlSegmenter.resolvedOptions().granularity != 'word') {\n throw new Error('The segmenter passed must have a granularity of \"word\"');\n }\n parts = Array.from(options.intlSegmenter.segment(value), function (segment) {\n return segment.segment;\n });\n } else {\n parts = value.match(tokenizeIncludingWhitespace) || [];\n }\n var tokens = [];\n var prevPart = null;\n parts.forEach(function (part) {\n if (/\\s/.test(part)) {\n if (prevPart == null) {\n tokens.push(part);\n } else {\n tokens.push(tokens.pop() + part);\n }\n } else if (/\\s/.test(prevPart)) {\n if (tokens[tokens.length - 1] == prevPart) {\n tokens.push(tokens.pop() + part);\n } else {\n tokens.push(prevPart + part);\n }\n } else {\n tokens.push(part);\n }\n prevPart = part;\n });\n return tokens;\n};\nwordDiff.join = function (tokens) {\n // Tokens being joined here will always have appeared consecutively in the\n // same text, so we can simply strip off the leading whitespace from all the\n // tokens except the first (and except any whitespace-only tokens - but such\n // a token will always be the first and only token anyway) and then join them\n // and the whitespace around words and punctuation will end up correct.\n return tokens.map(function (token, i) {\n if (i == 0) {\n return token;\n } else {\n return token.replace(/^\\s+/, '');\n }\n }).join('');\n};\nwordDiff.postProcess = function (changes, options) {\n if (!changes || options.oneChangePerToken) {\n return changes;\n }\n var lastKeep = null;\n // Change objects representing any insertion or deletion since the last\n // \"keep\" change object. There can be at most one of each.\n var insertion = null;\n var deletion = null;\n changes.forEach(function (change) {\n if (change.added) {\n insertion = change;\n } else if (change.removed) {\n deletion = change;\n } else {\n if (insertion || deletion) {\n // May be false at start of text\n dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, change);\n }\n lastKeep = change;\n insertion = null;\n deletion = null;\n }\n });\n if (insertion || deletion) {\n dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, null);\n }\n return changes;\n};\nfunction diffWords(oldStr, newStr, options) {\n // This option has never been documented and never will be (it's clearer to\n // just call `diffWordsWithSpace` directly if you need that behavior), but\n // has existed in jsdiff for a long time, so we retain support for it here\n // for the sake of backwards compatibility.\n if ((options === null || options === void 0 ? void 0 : options.ignoreWhitespace) != null && !options.ignoreWhitespace) {\n return diffWordsWithSpace(oldStr, newStr, options);\n }\n return wordDiff.diff(oldStr, newStr, options);\n}\nfunction dedupeWhitespaceInChangeObjects(startKeep, deletion, insertion, endKeep) {\n // Before returning, we tidy up the leading and trailing whitespace of the\n // change objects to eliminate cases where trailing whitespace in one object\n // is repeated as leading whitespace in the next.\n // Below are examples of the outcomes we want here to explain the code.\n // I=insert, K=keep, D=delete\n // 1. diffing 'foo bar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz'\n // After cleanup, we want: K:'foo ' D:'bar ' K:'baz'\n //\n // 2. Diffing 'foo bar baz' vs 'foo qux baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' I:' qux ' K:' baz'\n // After cleanup, we want K:'foo ' D:'bar' I:'qux' K:' baz'\n //\n // 3. Diffing 'foo\\nbar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:'\\nbar ' K:' baz'\n // After cleanup, we want K'foo' D:'\\nbar' K:' baz'\n //\n // 4. Diffing 'foo baz' vs 'foo\\nbar baz'\n // Prior to cleanup, we have K:'foo\\n' I:'\\nbar ' K:' baz'\n // After cleanup, we ideally want K'foo' I:'\\nbar' K:' baz'\n // but don't actually manage this currently (the pre-cleanup change\n // objects don't contain enough information to make it possible).\n //\n // 5. Diffing 'foo bar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz'\n // After cleanup, we want K:'foo ' D:' bar ' K:'baz'\n //\n // Our handling is unavoidably imperfect in the case where there's a single\n // indel between keeps and the whitespace has changed. For instance, consider\n // diffing 'foo\\tbar\\nbaz' vs 'foo baz'. Unless we create an extra change\n // object to represent the insertion of the space character (which isn't even\n // a token), we have no way to avoid losing information about the texts'\n // original whitespace in the result we return. Still, we do our best to\n // output something that will look sensible if we e.g. print it with\n // insertions in green and deletions in red.\n\n // Between two \"keep\" change objects (or before the first or after the last\n // change object), we can have either:\n // * A \"delete\" followed by an \"insert\"\n // * Just an \"insert\"\n // * Just a \"delete\"\n // We handle the three cases separately.\n if (deletion && insertion) {\n var oldWsPrefix = deletion.value.match(/^\\s*/)[0];\n var oldWsSuffix = deletion.value.match(/\\s*$/)[0];\n var newWsPrefix = insertion.value.match(/^\\s*/)[0];\n var newWsSuffix = insertion.value.match(/\\s*$/)[0];\n if (startKeep) {\n var commonWsPrefix = longestCommonPrefix(oldWsPrefix, newWsPrefix);\n startKeep.value = replaceSuffix(startKeep.value, newWsPrefix, commonWsPrefix);\n deletion.value = removePrefix(deletion.value, commonWsPrefix);\n insertion.value = removePrefix(insertion.value, commonWsPrefix);\n }\n if (endKeep) {\n var commonWsSuffix = longestCommonSuffix(oldWsSuffix, newWsSuffix);\n endKeep.value = replacePrefix(endKeep.value, newWsSuffix, commonWsSuffix);\n deletion.value = removeSuffix(deletion.value, commonWsSuffix);\n insertion.value = removeSuffix(insertion.value, commonWsSuffix);\n }\n } else if (insertion) {\n // The whitespaces all reflect what was in the new text rather than\n // the old, so we essentially have no information about whitespace\n // insertion or deletion. We just want to dedupe the whitespace.\n // We do that by having each change object keep its trailing\n // whitespace and deleting duplicate leading whitespace where\n // present.\n if (startKeep) {\n insertion.value = insertion.value.replace(/^\\s*/, '');\n }\n if (endKeep) {\n endKeep.value = endKeep.value.replace(/^\\s*/, '');\n }\n // otherwise we've got a deletion and no insertion\n } else if (startKeep && endKeep) {\n var newWsFull = endKeep.value.match(/^\\s*/)[0],\n delWsStart = deletion.value.match(/^\\s*/)[0],\n delWsEnd = deletion.value.match(/\\s*$/)[0];\n\n // Any whitespace that comes straight after startKeep in both the old and\n // new texts, assign to startKeep and remove from the deletion.\n var newWsStart = longestCommonPrefix(newWsFull, delWsStart);\n deletion.value = removePrefix(deletion.value, newWsStart);\n\n // Any whitespace that comes straight before endKeep in both the old and\n // new texts, and hasn't already been assigned to startKeep, assign to\n // endKeep and remove from the deletion.\n var newWsEnd = longestCommonSuffix(removePrefix(newWsFull, newWsStart), delWsEnd);\n deletion.value = removeSuffix(deletion.value, newWsEnd);\n endKeep.value = replacePrefix(endKeep.value, newWsFull, newWsEnd);\n\n // If there's any whitespace from the new text that HASN'T already been\n // assigned, assign it to the start:\n startKeep.value = replaceSuffix(startKeep.value, newWsFull, newWsFull.slice(0, newWsFull.length - newWsEnd.length));\n } else if (endKeep) {\n // We are at the start of the text. Preserve all the whitespace on\n // endKeep, and just remove whitespace from the end of deletion to the\n // extent that it overlaps with the start of endKeep.\n var endKeepWsPrefix = endKeep.value.match(/^\\s*/)[0];\n var deletionWsSuffix = deletion.value.match(/\\s*$/)[0];\n var overlap = maximumOverlap(deletionWsSuffix, endKeepWsPrefix);\n deletion.value = removeSuffix(deletion.value, overlap);\n } else if (startKeep) {\n // We are at the END of the text. Preserve all the whitespace on\n // startKeep, and just remove whitespace from the start of deletion to\n // the extent that it overlaps with the end of startKeep.\n var startKeepWsSuffix = startKeep.value.match(/\\s*$/)[0];\n var deletionWsPrefix = deletion.value.match(/^\\s*/)[0];\n var _overlap = maximumOverlap(startKeepWsSuffix, deletionWsPrefix);\n deletion.value = removePrefix(deletion.value, _overlap);\n }\n}\nvar wordWithSpaceDiff = new Diff();\nwordWithSpaceDiff.tokenize = function (value) {\n // Slightly different to the tokenizeIncludingWhitespace regex used above in\n // that this one treats each individual newline as a distinct tokens, rather\n // than merging them into other surrounding whitespace. This was requested\n // in https://github.com/kpdecker/jsdiff/issues/180 &\n // https://github.com/kpdecker/jsdiff/issues/211\n var regex = new RegExp(\"(\\\\r?\\\\n)|[\".concat(extendedWordChars, \"]+|[^\\\\S\\\\n\\\\r]+|[^\").concat(extendedWordChars, \"]\"), 'ug');\n return value.match(regex) || [];\n};\nfunction diffWordsWithSpace(oldStr, newStr, options) {\n return wordWithSpaceDiff.diff(oldStr, newStr, options);\n}\n\nfunction generateOptions(options, defaults) {\n if (typeof options === 'function') {\n defaults.callback = options;\n } else if (options) {\n for (var name in options) {\n /* istanbul ignore else */\n if (options.hasOwnProperty(name)) {\n defaults[name] = options[name];\n }\n }\n }\n return defaults;\n}\n\nvar lineDiff = new Diff();\nlineDiff.tokenize = function (value, options) {\n if (options.stripTrailingCr) {\n // remove one \\r before \\n to match GNU diff's --strip-trailing-cr behavior\n value = value.replace(/\\r\\n/g, '\\n');\n }\n var retLines = [],\n linesAndNewlines = value.split(/(\\n|\\r\\n)/);\n\n // Ignore the final empty token that occurs if the string ends with a new line\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n }\n\n // Merge the content and line separators into single tokens\n for (var i = 0; i < linesAndNewlines.length; i++) {\n var line = linesAndNewlines[i];\n if (i % 2 && !options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n } else {\n retLines.push(line);\n }\n }\n return retLines;\n};\nlineDiff.equals = function (left, right, options) {\n // If we're ignoring whitespace, we need to normalise lines by stripping\n // whitespace before checking equality. (This has an annoying interaction\n // with newlineIsToken that requires special handling: if newlines get their\n // own token, then we DON'T want to trim the *newline* tokens down to empty\n // strings, since this would cause us to treat whitespace-only line content\n // as equal to a separator between lines, which would be weird and\n // inconsistent with the documented behavior of the options.)\n if (options.ignoreWhitespace) {\n if (!options.newlineIsToken || !left.includes('\\n')) {\n left = left.trim();\n }\n if (!options.newlineIsToken || !right.includes('\\n')) {\n right = right.trim();\n }\n } else if (options.ignoreNewlineAtEof && !options.newlineIsToken) {\n if (left.endsWith('\\n')) {\n left = left.slice(0, -1);\n }\n if (right.endsWith('\\n')) {\n right = right.slice(0, -1);\n }\n }\n return Diff.prototype.equals.call(this, left, right, options);\n};\nfunction diffLines(oldStr, newStr, callback) {\n return lineDiff.diff(oldStr, newStr, callback);\n}\n\n// Kept for backwards compatibility. This is a rather arbitrary wrapper method\n// that just calls `diffLines` with `ignoreWhitespace: true`. It's confusing to\n// have two ways to do exactly the same thing in the API, so we no longer\n// document this one (library users should explicitly use `diffLines` with\n// `ignoreWhitespace: true` instead) but we keep it around to maintain\n// compatibility with code that used old versions.\nfunction diffTrimmedLines(oldStr, newStr, callback) {\n var options = generateOptions(callback, {\n ignoreWhitespace: true\n });\n return lineDiff.diff(oldStr, newStr, options);\n}\n\nvar sentenceDiff = new Diff();\nsentenceDiff.tokenize = function (value) {\n return value.split(/(\\S.+?[.!?])(?=\\s+|$)/);\n};\nfunction diffSentences(oldStr, newStr, callback) {\n return sentenceDiff.diff(oldStr, newStr, callback);\n}\n\nvar cssDiff = new Diff();\ncssDiff.tokenize = function (value) {\n return value.split(/([{}:;,]|\\s+)/);\n};\nfunction diffCss(oldStr, newStr, callback) {\n return cssDiff.diff(oldStr, newStr, callback);\n}\n\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar jsonDiff = new Diff();\n// Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\njsonDiff.useLongestToken = true;\njsonDiff.tokenize = lineDiff.tokenize;\njsonDiff.castInput = function (value, options) {\n var undefinedReplacement = options.undefinedReplacement,\n _options$stringifyRep = options.stringifyReplacer,\n stringifyReplacer = _options$stringifyRep === void 0 ? function (k, v) {\n return typeof v === 'undefined' ? undefinedReplacement : v;\n } : _options$stringifyRep;\n return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' ');\n};\njsonDiff.equals = function (left, right, options) {\n return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\\r\\n])/g, '$1'), right.replace(/,([\\r\\n])/g, '$1'), options);\n};\nfunction diffJson(oldObj, newObj, options) {\n return jsonDiff.diff(oldObj, newObj, options);\n}\n\n// This function handles the presence of circular references by bailing out when encountering an\n// object that is already on the \"stack\" of items being processed. Accepts an optional replacer\nfunction canonicalize(obj, stack, replacementStack, replacer, key) {\n stack = stack || [];\n replacementStack = replacementStack || [];\n if (replacer) {\n obj = replacer(key, obj);\n }\n var i;\n for (i = 0; i < stack.length; i += 1) {\n if (stack[i] === obj) {\n return replacementStack[i];\n }\n }\n var canonicalizedObj;\n if ('[object Array]' === Object.prototype.toString.call(obj)) {\n stack.push(obj);\n canonicalizedObj = new Array(obj.length);\n replacementStack.push(canonicalizedObj);\n for (i = 0; i < obj.length; i += 1) {\n canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);\n }\n stack.pop();\n replacementStack.pop();\n return canonicalizedObj;\n }\n if (obj && obj.toJSON) {\n obj = obj.toJSON();\n }\n if (_typeof(obj) === 'object' && obj !== null) {\n stack.push(obj);\n canonicalizedObj = {};\n replacementStack.push(canonicalizedObj);\n var sortedKeys = [],\n _key;\n for (_key in obj) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(obj, _key)) {\n sortedKeys.push(_key);\n }\n }\n sortedKeys.sort();\n for (i = 0; i < sortedKeys.length; i += 1) {\n _key = sortedKeys[i];\n canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);\n }\n stack.pop();\n replacementStack.pop();\n } else {\n canonicalizedObj = obj;\n }\n return canonicalizedObj;\n}\n\nvar arrayDiff = new Diff();\narrayDiff.tokenize = function (value) {\n return value.slice();\n};\narrayDiff.join = arrayDiff.removeEmpty = function (value) {\n return value;\n};\nfunction diffArrays(oldArr, newArr, callback) {\n return arrayDiff.diff(oldArr, newArr, callback);\n}\n\nfunction unixToWin(patch) {\n if (Array.isArray(patch)) {\n return patch.map(unixToWin);\n }\n return _objectSpread2(_objectSpread2({}, patch), {}, {\n hunks: patch.hunks.map(function (hunk) {\n return _objectSpread2(_objectSpread2({}, hunk), {}, {\n lines: hunk.lines.map(function (line, i) {\n var _hunk$lines;\n return line.startsWith('\\\\') || line.endsWith('\\r') || (_hunk$lines = hunk.lines[i + 1]) !== null && _hunk$lines !== void 0 && _hunk$lines.startsWith('\\\\') ? line : line + '\\r';\n })\n });\n })\n });\n}\nfunction winToUnix(patch) {\n if (Array.isArray(patch)) {\n return patch.map(winToUnix);\n }\n return _objectSpread2(_objectSpread2({}, patch), {}, {\n hunks: patch.hunks.map(function (hunk) {\n return _objectSpread2(_objectSpread2({}, hunk), {}, {\n lines: hunk.lines.map(function (line) {\n return line.endsWith('\\r') ? line.substring(0, line.length - 1) : line;\n })\n });\n })\n });\n}\n\n/**\n * Returns true if the patch consistently uses Unix line endings (or only involves one line and has\n * no line endings).\n */\nfunction isUnix(patch) {\n if (!Array.isArray(patch)) {\n patch = [patch];\n }\n return !patch.some(function (index) {\n return index.hunks.some(function (hunk) {\n return hunk.lines.some(function (line) {\n return !line.startsWith('\\\\') && line.endsWith('\\r');\n });\n });\n });\n}\n\n/**\n * Returns true if the patch uses Windows line endings and only Windows line endings.\n */\nfunction isWin(patch) {\n if (!Array.isArray(patch)) {\n patch = [patch];\n }\n return patch.some(function (index) {\n return index.hunks.some(function (hunk) {\n return hunk.lines.some(function (line) {\n return line.endsWith('\\r');\n });\n });\n }) && patch.every(function (index) {\n return index.hunks.every(function (hunk) {\n return hunk.lines.every(function (line, i) {\n var _hunk$lines2;\n return line.startsWith('\\\\') || line.endsWith('\\r') || ((_hunk$lines2 = hunk.lines[i + 1]) === null || _hunk$lines2 === void 0 ? void 0 : _hunk$lines2.startsWith('\\\\'));\n });\n });\n });\n}\n\nfunction parsePatch(uniDiff) {\n var diffstr = uniDiff.split(/\\n/),\n list = [],\n i = 0;\n function parseIndex() {\n var index = {};\n list.push(index);\n\n // Parse diff metadata\n while (i < diffstr.length) {\n var line = diffstr[i];\n\n // File header found, end parsing diff metadata\n if (/^(\\-\\-\\-|\\+\\+\\+|@@)\\s/.test(line)) {\n break;\n }\n\n // Diff index\n var header = /^(?:Index:|diff(?: -r \\w+)+)\\s+(.+?)\\s*$/.exec(line);\n if (header) {\n index.index = header[1];\n }\n i++;\n }\n\n // Parse file headers if they are defined. Unified diff requires them, but\n // there's no technical issues to have an isolated hunk without file header\n parseFileHeader(index);\n parseFileHeader(index);\n\n // Parse hunks\n index.hunks = [];\n while (i < diffstr.length) {\n var _line = diffstr[i];\n if (/^(Index:\\s|diff\\s|\\-\\-\\-\\s|\\+\\+\\+\\s|===================================================================)/.test(_line)) {\n break;\n } else if (/^@@/.test(_line)) {\n index.hunks.push(parseHunk());\n } else if (_line) {\n throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));\n } else {\n i++;\n }\n }\n }\n\n // Parses the --- and +++ headers, if none are found, no lines\n // are consumed.\n function parseFileHeader(index) {\n var fileHeader = /^(---|\\+\\+\\+)\\s+(.*)\\r?$/.exec(diffstr[i]);\n if (fileHeader) {\n var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';\n var data = fileHeader[2].split('\\t', 2);\n var fileName = data[0].replace(/\\\\\\\\/g, '\\\\');\n if (/^\".*\"$/.test(fileName)) {\n fileName = fileName.substr(1, fileName.length - 2);\n }\n index[keyPrefix + 'FileName'] = fileName;\n index[keyPrefix + 'Header'] = (data[1] || '').trim();\n i++;\n }\n }\n\n // Parses a hunk\n // This assumes that we are at the start of a hunk.\n function parseHunk() {\n var chunkHeaderIndex = i,\n chunkHeaderLine = diffstr[i++],\n chunkHeader = chunkHeaderLine.split(/@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/);\n var hunk = {\n oldStart: +chunkHeader[1],\n oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2],\n newStart: +chunkHeader[3],\n newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4],\n lines: []\n };\n\n // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart += 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart += 1;\n }\n var addCount = 0,\n removeCount = 0;\n for (; i < diffstr.length && (removeCount < hunk.oldLines || addCount < hunk.newLines || (_diffstr$i = diffstr[i]) !== null && _diffstr$i !== void 0 && _diffstr$i.startsWith('\\\\')); i++) {\n var _diffstr$i;\n var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0];\n if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\\\') {\n hunk.lines.push(diffstr[i]);\n if (operation === '+') {\n addCount++;\n } else if (operation === '-') {\n removeCount++;\n } else if (operation === ' ') {\n addCount++;\n removeCount++;\n }\n } else {\n throw new Error(\"Hunk at line \".concat(chunkHeaderIndex + 1, \" contained invalid line \").concat(diffstr[i]));\n }\n }\n\n // Handle the empty block count case\n if (!addCount && hunk.newLines === 1) {\n hunk.newLines = 0;\n }\n if (!removeCount && hunk.oldLines === 1) {\n hunk.oldLines = 0;\n }\n\n // Perform sanity checking\n if (addCount !== hunk.newLines) {\n throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n if (removeCount !== hunk.oldLines) {\n throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n return hunk;\n }\n while (i < diffstr.length) {\n parseIndex();\n }\n return list;\n}\n\n// Iterator that traverses in the range of [min, max], stepping\n// by distance from a given start position. I.e. for [0, 4], with\n// start of 2, this will iterate 2, 3, 1, 4, 0.\nfunction distanceIterator (start, minLine, maxLine) {\n var wantForward = true,\n backwardExhausted = false,\n forwardExhausted = false,\n localOffset = 1;\n return function iterator() {\n if (wantForward && !forwardExhausted) {\n if (backwardExhausted) {\n localOffset++;\n } else {\n wantForward = false;\n }\n\n // Check if trying to fit beyond text length, and if not, check it fits\n // after offset location (or desired location on first iteration)\n if (start + localOffset <= maxLine) {\n return start + localOffset;\n }\n forwardExhausted = true;\n }\n if (!backwardExhausted) {\n if (!forwardExhausted) {\n wantForward = true;\n }\n\n // Check if trying to fit before text beginning, and if not, check it fits\n // before offset location\n if (minLine <= start - localOffset) {\n return start - localOffset++;\n }\n backwardExhausted = true;\n return iterator();\n }\n\n // We tried to fit hunk before text beginning and beyond text length, then\n // hunk can't fit on the text. Return undefined\n };\n}\n\nfunction applyPatch(source, uniDiff) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (typeof uniDiff === 'string') {\n uniDiff = parsePatch(uniDiff);\n }\n if (Array.isArray(uniDiff)) {\n if (uniDiff.length > 1) {\n throw new Error('applyPatch only works with a single input.');\n }\n uniDiff = uniDiff[0];\n }\n if (options.autoConvertLineEndings || options.autoConvertLineEndings == null) {\n if (hasOnlyWinLineEndings(source) && isUnix(uniDiff)) {\n uniDiff = unixToWin(uniDiff);\n } else if (hasOnlyUnixLineEndings(source) && isWin(uniDiff)) {\n uniDiff = winToUnix(uniDiff);\n }\n }\n\n // Apply the diff to the input\n var lines = source.split('\\n'),\n hunks = uniDiff.hunks,\n compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) {\n return line === patchContent;\n },\n fuzzFactor = options.fuzzFactor || 0,\n minLine = 0;\n if (fuzzFactor < 0 || !Number.isInteger(fuzzFactor)) {\n throw new Error('fuzzFactor must be a non-negative integer');\n }\n\n // Special case for empty patch.\n if (!hunks.length) {\n return source;\n }\n\n // Before anything else, handle EOFNL insertion/removal. If the patch tells us to make a change\n // to the EOFNL that is redundant/impossible - i.e. to remove a newline that's not there, or add a\n // newline that already exists - then we either return false and fail to apply the patch (if\n // fuzzFactor is 0) or simply ignore the problem and do nothing (if fuzzFactor is >0).\n // If we do need to remove/add a newline at EOF, this will always be in the final hunk:\n var prevLine = '',\n removeEOFNL = false,\n addEOFNL = false;\n for (var i = 0; i < hunks[hunks.length - 1].lines.length; i++) {\n var line = hunks[hunks.length - 1].lines[i];\n if (line[0] == '\\\\') {\n if (prevLine[0] == '+') {\n removeEOFNL = true;\n } else if (prevLine[0] == '-') {\n addEOFNL = true;\n }\n }\n prevLine = line;\n }\n if (removeEOFNL) {\n if (addEOFNL) {\n // This means the final line gets changed but doesn't have a trailing newline in either the\n // original or patched version. In that case, we do nothing if fuzzFactor > 0, and if\n // fuzzFactor is 0, we simply validate that the source file has no trailing newline.\n if (!fuzzFactor && lines[lines.length - 1] == '') {\n return false;\n }\n } else if (lines[lines.length - 1] == '') {\n lines.pop();\n } else if (!fuzzFactor) {\n return false;\n }\n } else if (addEOFNL) {\n if (lines[lines.length - 1] != '') {\n lines.push('');\n } else if (!fuzzFactor) {\n return false;\n }\n }\n\n /**\n * Checks if the hunk can be made to fit at the provided location with at most `maxErrors`\n * insertions, substitutions, or deletions, while ensuring also that:\n * - lines deleted in the hunk match exactly, and\n * - wherever an insertion operation or block of insertion operations appears in the hunk, the\n * immediately preceding and following lines of context match exactly\n *\n * `toPos` should be set such that lines[toPos] is meant to match hunkLines[0].\n *\n * If the hunk can be applied, returns an object with properties `oldLineLastI` and\n * `replacementLines`. Otherwise, returns null.\n */\n function applyHunk(hunkLines, toPos, maxErrors) {\n var hunkLinesI = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var lastContextLineMatched = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var patchedLines = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];\n var patchedLinesLength = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n var nConsecutiveOldContextLines = 0;\n var nextContextLineMustMatch = false;\n for (; hunkLinesI < hunkLines.length; hunkLinesI++) {\n var hunkLine = hunkLines[hunkLinesI],\n operation = hunkLine.length > 0 ? hunkLine[0] : ' ',\n content = hunkLine.length > 0 ? hunkLine.substr(1) : hunkLine;\n if (operation === '-') {\n if (compareLine(toPos + 1, lines[toPos], operation, content)) {\n toPos++;\n nConsecutiveOldContextLines = 0;\n } else {\n if (!maxErrors || lines[toPos] == null) {\n return null;\n }\n patchedLines[patchedLinesLength] = lines[toPos];\n return applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1);\n }\n }\n if (operation === '+') {\n if (!lastContextLineMatched) {\n return null;\n }\n patchedLines[patchedLinesLength] = content;\n patchedLinesLength++;\n nConsecutiveOldContextLines = 0;\n nextContextLineMustMatch = true;\n }\n if (operation === ' ') {\n nConsecutiveOldContextLines++;\n patchedLines[patchedLinesLength] = lines[toPos];\n if (compareLine(toPos + 1, lines[toPos], operation, content)) {\n patchedLinesLength++;\n lastContextLineMatched = true;\n nextContextLineMustMatch = false;\n toPos++;\n } else {\n if (nextContextLineMustMatch || !maxErrors) {\n return null;\n }\n\n // Consider 3 possibilities in sequence:\n // 1. lines contains a *substitution* not included in the patch context, or\n // 2. lines contains an *insertion* not included in the patch context, or\n // 3. lines contains a *deletion* not included in the patch context\n // The first two options are of course only possible if the line from lines is non-null -\n // i.e. only option 3 is possible if we've overrun the end of the old file.\n return lines[toPos] && (applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength + 1) || applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1)) || applyHunk(hunkLines, toPos, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength);\n }\n }\n }\n\n // Before returning, trim any unmodified context lines off the end of patchedLines and reduce\n // toPos (and thus oldLineLastI) accordingly. This allows later hunks to be applied to a region\n // that starts in this hunk's trailing context.\n patchedLinesLength -= nConsecutiveOldContextLines;\n toPos -= nConsecutiveOldContextLines;\n patchedLines.length = patchedLinesLength;\n return {\n patchedLines: patchedLines,\n oldLineLastI: toPos - 1\n };\n }\n var resultLines = [];\n\n // Search best fit offsets for each hunk based on the previous ones\n var prevHunkOffset = 0;\n for (var _i = 0; _i < hunks.length; _i++) {\n var hunk = hunks[_i];\n var hunkResult = void 0;\n var maxLine = lines.length - hunk.oldLines + fuzzFactor;\n var toPos = void 0;\n for (var maxErrors = 0; maxErrors <= fuzzFactor; maxErrors++) {\n toPos = hunk.oldStart + prevHunkOffset - 1;\n var iterator = distanceIterator(toPos, minLine, maxLine);\n for (; toPos !== undefined; toPos = iterator()) {\n hunkResult = applyHunk(hunk.lines, toPos, maxErrors);\n if (hunkResult) {\n break;\n }\n }\n if (hunkResult) {\n break;\n }\n }\n if (!hunkResult) {\n return false;\n }\n\n // Copy everything from the end of where we applied the last hunk to the start of this hunk\n for (var _i2 = minLine; _i2 < toPos; _i2++) {\n resultLines.push(lines[_i2]);\n }\n\n // Add the lines produced by applying the hunk:\n for (var _i3 = 0; _i3 < hunkResult.patchedLines.length; _i3++) {\n var _line = hunkResult.patchedLines[_i3];\n resultLines.push(_line);\n }\n\n // Set lower text limit to end of the current hunk, so next ones don't try\n // to fit over already patched text\n minLine = hunkResult.oldLineLastI + 1;\n\n // Note the offset between where the patch said the hunk should've applied and where we\n // applied it, so we can adjust future hunks accordingly:\n prevHunkOffset = toPos + 1 - hunk.oldStart;\n }\n\n // Copy over the rest of the lines from the old text\n for (var _i4 = minLine; _i4 < lines.length; _i4++) {\n resultLines.push(lines[_i4]);\n }\n return resultLines.join('\\n');\n}\n\n// Wrapper that supports multiple file patches via callbacks.\nfunction applyPatches(uniDiff, options) {\n if (typeof uniDiff === 'string') {\n uniDiff = parsePatch(uniDiff);\n }\n var currentIndex = 0;\n function processIndex() {\n var index = uniDiff[currentIndex++];\n if (!index) {\n return options.complete();\n }\n options.loadFile(index, function (err, data) {\n if (err) {\n return options.complete(err);\n }\n var updatedContent = applyPatch(data, index, options);\n options.patched(index, updatedContent, function (err) {\n if (err) {\n return options.complete(err);\n }\n processIndex();\n });\n });\n }\n processIndex();\n}\n\nfunction structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n if (!options) {\n options = {};\n }\n if (typeof options === 'function') {\n options = {\n callback: options\n };\n }\n if (typeof options.context === 'undefined') {\n options.context = 4;\n }\n if (options.newlineIsToken) {\n throw new Error('newlineIsToken may not be used with patch-generation functions, only with diffing functions');\n }\n if (!options.callback) {\n return diffLinesResultToPatch(diffLines(oldStr, newStr, options));\n } else {\n var _options = options,\n _callback = _options.callback;\n diffLines(oldStr, newStr, _objectSpread2(_objectSpread2({}, options), {}, {\n callback: function callback(diff) {\n var patch = diffLinesResultToPatch(diff);\n _callback(patch);\n }\n }));\n }\n function diffLinesResultToPatch(diff) {\n // STEP 1: Build up the patch with no \"\\" lines and with the arrays\n // of lines containing trailing newline characters. We'll tidy up later...\n\n if (!diff) {\n return;\n }\n diff.push({\n value: '',\n lines: []\n }); // Append an empty value to make cleanup easier\n\n function contextLines(lines) {\n return lines.map(function (entry) {\n return ' ' + entry;\n });\n }\n var hunks = [];\n var oldRangeStart = 0,\n newRangeStart = 0,\n curRange = [],\n oldLine = 1,\n newLine = 1;\n var _loop = function _loop() {\n var current = diff[i],\n lines = current.lines || splitLines(current.value);\n current.lines = lines;\n if (current.added || current.removed) {\n var _curRange;\n // If we have previous context, start with that\n if (!oldRangeStart) {\n var prev = diff[i - 1];\n oldRangeStart = oldLine;\n newRangeStart = newLine;\n if (prev) {\n curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];\n oldRangeStart -= curRange.length;\n newRangeStart -= curRange.length;\n }\n }\n\n // Output our changes\n (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) {\n return (current.added ? '+' : '-') + entry;\n })));\n\n // Track the updated file position\n if (current.added) {\n newLine += lines.length;\n } else {\n oldLine += lines.length;\n }\n } else {\n // Identical context lines. Track line changes\n if (oldRangeStart) {\n // Close out any changes that have been output (or join overlapping)\n if (lines.length <= options.context * 2 && i < diff.length - 2) {\n var _curRange2;\n // Overlapping\n (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines)));\n } else {\n var _curRange3;\n // end the range and output\n var contextSize = Math.min(lines.length, options.context);\n (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize))));\n var _hunk = {\n oldStart: oldRangeStart,\n oldLines: oldLine - oldRangeStart + contextSize,\n newStart: newRangeStart,\n newLines: newLine - newRangeStart + contextSize,\n lines: curRange\n };\n hunks.push(_hunk);\n oldRangeStart = 0;\n newRangeStart = 0;\n curRange = [];\n }\n }\n oldLine += lines.length;\n newLine += lines.length;\n }\n };\n for (var i = 0; i < diff.length; i++) {\n _loop();\n }\n\n // Step 2: eliminate the trailing `\\n` from each line of each hunk, and, where needed, add\n // \"\\".\n for (var _i = 0, _hunks = hunks; _i < _hunks.length; _i++) {\n var hunk = _hunks[_i];\n for (var _i2 = 0; _i2 < hunk.lines.length; _i2++) {\n if (hunk.lines[_i2].endsWith('\\n')) {\n hunk.lines[_i2] = hunk.lines[_i2].slice(0, -1);\n } else {\n hunk.lines.splice(_i2 + 1, 0, '\\\');\n _i2++; // Skip the line we just added, then continue iterating\n }\n }\n }\n return {\n oldFileName: oldFileName,\n newFileName: newFileName,\n oldHeader: oldHeader,\n newHeader: newHeader,\n hunks: hunks\n };\n }\n}\nfunction formatPatch(diff) {\n if (Array.isArray(diff)) {\n return diff.map(formatPatch).join('\\n');\n }\n var ret = [];\n if (diff.oldFileName == diff.newFileName) {\n ret.push('Index: ' + diff.oldFileName);\n }\n ret.push('===================================================================');\n ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\\t' + diff.oldHeader));\n ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\\t' + diff.newHeader));\n for (var i = 0; i < diff.hunks.length; i++) {\n var hunk = diff.hunks[i];\n // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart -= 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart -= 1;\n }\n ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');\n ret.push.apply(ret, hunk.lines);\n }\n return ret.join('\\n') + '\\n';\n}\nfunction createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n var _options2;\n if (typeof options === 'function') {\n options = {\n callback: options\n };\n }\n if (!((_options2 = options) !== null && _options2 !== void 0 && _options2.callback)) {\n var patchObj = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options);\n if (!patchObj) {\n return;\n }\n return formatPatch(patchObj);\n } else {\n var _options3 = options,\n _callback2 = _options3.callback;\n structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, _objectSpread2(_objectSpread2({}, options), {}, {\n callback: function callback(patchObj) {\n if (!patchObj) {\n _callback2();\n } else {\n _callback2(formatPatch(patchObj));\n }\n }\n }));\n }\n}\nfunction createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n}\n\n/**\n * Split `text` into an array of lines, including the trailing newline character (where present)\n */\nfunction splitLines(text) {\n var hasTrailingNl = text.endsWith('\\n');\n var result = text.split('\\n').map(function (line) {\n return line + '\\n';\n });\n if (hasTrailingNl) {\n result.pop();\n } else {\n result.push(result.pop().slice(0, -1));\n }\n return result;\n}\n\nfunction arrayEqual(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n return arrayStartsWith(a, b);\n}\nfunction arrayStartsWith(array, start) {\n if (start.length > array.length) {\n return false;\n }\n for (var i = 0; i < start.length; i++) {\n if (start[i] !== array[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction calcLineCount(hunk) {\n var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines),\n oldLines = _calcOldNewLineCount.oldLines,\n newLines = _calcOldNewLineCount.newLines;\n if (oldLines !== undefined) {\n hunk.oldLines = oldLines;\n } else {\n delete hunk.oldLines;\n }\n if (newLines !== undefined) {\n hunk.newLines = newLines;\n } else {\n delete hunk.newLines;\n }\n}\nfunction merge(mine, theirs, base) {\n mine = loadPatch(mine, base);\n theirs = loadPatch(theirs, base);\n var ret = {};\n\n // For index we just let it pass through as it doesn't have any necessary meaning.\n // Leaving sanity checks on this to the API consumer that may know more about the\n // meaning in their own context.\n if (mine.index || theirs.index) {\n ret.index = mine.index || theirs.index;\n }\n if (mine.newFileName || theirs.newFileName) {\n if (!fileNameChanged(mine)) {\n // No header or no change in ours, use theirs (and ours if theirs does not exist)\n ret.oldFileName = theirs.oldFileName || mine.oldFileName;\n ret.newFileName = theirs.newFileName || mine.newFileName;\n ret.oldHeader = theirs.oldHeader || mine.oldHeader;\n ret.newHeader = theirs.newHeader || mine.newHeader;\n } else if (!fileNameChanged(theirs)) {\n // No header or no change in theirs, use ours\n ret.oldFileName = mine.oldFileName;\n ret.newFileName = mine.newFileName;\n ret.oldHeader = mine.oldHeader;\n ret.newHeader = mine.newHeader;\n } else {\n // Both changed... figure it out\n ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName);\n ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName);\n ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader);\n ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader);\n }\n }\n ret.hunks = [];\n var mineIndex = 0,\n theirsIndex = 0,\n mineOffset = 0,\n theirsOffset = 0;\n while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) {\n var mineCurrent = mine.hunks[mineIndex] || {\n oldStart: Infinity\n },\n theirsCurrent = theirs.hunks[theirsIndex] || {\n oldStart: Infinity\n };\n if (hunkBefore(mineCurrent, theirsCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(mineCurrent, mineOffset));\n mineIndex++;\n theirsOffset += mineCurrent.newLines - mineCurrent.oldLines;\n } else if (hunkBefore(theirsCurrent, mineCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset));\n theirsIndex++;\n mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines;\n } else {\n // Overlap, merge as best we can\n var mergedHunk = {\n oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart),\n oldLines: 0,\n newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset),\n newLines: 0,\n lines: []\n };\n mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines);\n theirsIndex++;\n mineIndex++;\n ret.hunks.push(mergedHunk);\n }\n }\n return ret;\n}\nfunction loadPatch(param, base) {\n if (typeof param === 'string') {\n if (/^@@/m.test(param) || /^Index:/m.test(param)) {\n return parsePatch(param)[0];\n }\n if (!base) {\n throw new Error('Must provide a base reference or pass in a patch');\n }\n return structuredPatch(undefined, undefined, base, param);\n }\n return param;\n}\nfunction fileNameChanged(patch) {\n return patch.newFileName && patch.newFileName !== patch.oldFileName;\n}\nfunction selectField(index, mine, theirs) {\n if (mine === theirs) {\n return mine;\n } else {\n index.conflict = true;\n return {\n mine: mine,\n theirs: theirs\n };\n }\n}\nfunction hunkBefore(test, check) {\n return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;\n}\nfunction cloneHunk(hunk, offset) {\n return {\n oldStart: hunk.oldStart,\n oldLines: hunk.oldLines,\n newStart: hunk.newStart + offset,\n newLines: hunk.newLines,\n lines: hunk.lines\n };\n}\nfunction mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) {\n // This will generally result in a conflicted hunk, but there are cases where the context\n // is the only overlap where we can successfully merge the content here.\n var mine = {\n offset: mineOffset,\n lines: mineLines,\n index: 0\n },\n their = {\n offset: theirOffset,\n lines: theirLines,\n index: 0\n };\n\n // Handle any leading content\n insertLeading(hunk, mine, their);\n insertLeading(hunk, their, mine);\n\n // Now in the overlap content. Scan through and select the best changes from each.\n while (mine.index < mine.lines.length && their.index < their.lines.length) {\n var mineCurrent = mine.lines[mine.index],\n theirCurrent = their.lines[their.index];\n if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) {\n // Both modified ...\n mutualChange(hunk, mine, their);\n } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') {\n var _hunk$lines;\n // Mine inserted\n (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine)));\n } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') {\n var _hunk$lines2;\n // Theirs inserted\n (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their)));\n } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') {\n // Mine removed or edited\n removal(hunk, mine, their);\n } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') {\n // Their removed or edited\n removal(hunk, their, mine, true);\n } else if (mineCurrent === theirCurrent) {\n // Context identity\n hunk.lines.push(mineCurrent);\n mine.index++;\n their.index++;\n } else {\n // Context mismatch\n conflict(hunk, collectChange(mine), collectChange(their));\n }\n }\n\n // Now push anything that may be remaining\n insertTrailing(hunk, mine);\n insertTrailing(hunk, their);\n calcLineCount(hunk);\n}\nfunction mutualChange(hunk, mine, their) {\n var myChanges = collectChange(mine),\n theirChanges = collectChange(their);\n if (allRemoves(myChanges) && allRemoves(theirChanges)) {\n // Special case for remove changes that are supersets of one another\n if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) {\n var _hunk$lines3;\n (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges));\n return;\n } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {\n var _hunk$lines4;\n (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges));\n return;\n }\n } else if (arrayEqual(myChanges, theirChanges)) {\n var _hunk$lines5;\n (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges));\n return;\n }\n conflict(hunk, myChanges, theirChanges);\n}\nfunction removal(hunk, mine, their, swap) {\n var myChanges = collectChange(mine),\n theirChanges = collectContext(their, myChanges);\n if (theirChanges.merged) {\n var _hunk$lines6;\n (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged));\n } else {\n conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges);\n }\n}\nfunction conflict(hunk, mine, their) {\n hunk.conflict = true;\n hunk.lines.push({\n conflict: true,\n mine: mine,\n theirs: their\n });\n}\nfunction insertLeading(hunk, insert, their) {\n while (insert.offset < their.offset && insert.index < insert.lines.length) {\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n insert.offset++;\n }\n}\nfunction insertTrailing(hunk, insert) {\n while (insert.index < insert.lines.length) {\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n }\n}\nfunction collectChange(state) {\n var ret = [],\n operation = state.lines[state.index][0];\n while (state.index < state.lines.length) {\n var line = state.lines[state.index];\n\n // Group additions that are immediately after subtractions and treat them as one \"atomic\" modify change.\n if (operation === '-' && line[0] === '+') {\n operation = '+';\n }\n if (operation === line[0]) {\n ret.push(line);\n state.index++;\n } else {\n break;\n }\n }\n return ret;\n}\nfunction collectContext(state, matchChanges) {\n var changes = [],\n merged = [],\n matchIndex = 0,\n contextChanges = false,\n conflicted = false;\n while (matchIndex < matchChanges.length && state.index < state.lines.length) {\n var change = state.lines[state.index],\n match = matchChanges[matchIndex];\n\n // Once we've hit our add, then we are done\n if (match[0] === '+') {\n break;\n }\n contextChanges = contextChanges || change[0] !== ' ';\n merged.push(match);\n matchIndex++;\n\n // Consume any additions in the other block as a conflict to attempt\n // to pull in the remaining context after this\n if (change[0] === '+') {\n conflicted = true;\n while (change[0] === '+') {\n changes.push(change);\n change = state.lines[++state.index];\n }\n }\n if (match.substr(1) === change.substr(1)) {\n changes.push(change);\n state.index++;\n } else {\n conflicted = true;\n }\n }\n if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) {\n conflicted = true;\n }\n if (conflicted) {\n return changes;\n }\n while (matchIndex < matchChanges.length) {\n merged.push(matchChanges[matchIndex++]);\n }\n return {\n merged: merged,\n changes: changes\n };\n}\nfunction allRemoves(changes) {\n return changes.reduce(function (prev, change) {\n return prev && change[0] === '-';\n }, true);\n}\nfunction skipRemoveSuperset(state, removeChanges, delta) {\n for (var i = 0; i < delta; i++) {\n var changeContent = removeChanges[removeChanges.length - delta + i].substr(1);\n if (state.lines[state.index + i] !== ' ' + changeContent) {\n return false;\n }\n }\n state.index += delta;\n return true;\n}\nfunction calcOldNewLineCount(lines) {\n var oldLines = 0;\n var newLines = 0;\n lines.forEach(function (line) {\n if (typeof line !== 'string') {\n var myCount = calcOldNewLineCount(line.mine);\n var theirCount = calcOldNewLineCount(line.theirs);\n if (oldLines !== undefined) {\n if (myCount.oldLines === theirCount.oldLines) {\n oldLines += myCount.oldLines;\n } else {\n oldLines = undefined;\n }\n }\n if (newLines !== undefined) {\n if (myCount.newLines === theirCount.newLines) {\n newLines += myCount.newLines;\n } else {\n newLines = undefined;\n }\n }\n } else {\n if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) {\n newLines++;\n }\n if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) {\n oldLines++;\n }\n }\n });\n return {\n oldLines: oldLines,\n newLines: newLines\n };\n}\n\nfunction reversePatch(structuredPatch) {\n if (Array.isArray(structuredPatch)) {\n return structuredPatch.map(reversePatch).reverse();\n }\n return _objectSpread2(_objectSpread2({}, structuredPatch), {}, {\n oldFileName: structuredPatch.newFileName,\n oldHeader: structuredPatch.newHeader,\n newFileName: structuredPatch.oldFileName,\n newHeader: structuredPatch.oldHeader,\n hunks: structuredPatch.hunks.map(function (hunk) {\n return {\n oldLines: hunk.newLines,\n oldStart: hunk.newStart,\n newLines: hunk.oldLines,\n newStart: hunk.oldStart,\n lines: hunk.lines.map(function (l) {\n if (l.startsWith('-')) {\n return \"+\".concat(l.slice(1));\n }\n if (l.startsWith('+')) {\n return \"-\".concat(l.slice(1));\n }\n return l;\n })\n };\n })\n });\n}\n\n// See: http://code.google.com/p/google-diff-match-patch/wiki/API\nfunction convertChangesToDMP(changes) {\n var ret = [],\n change,\n operation;\n for (var i = 0; i < changes.length; i++) {\n change = changes[i];\n if (change.added) {\n operation = 1;\n } else if (change.removed) {\n operation = -1;\n } else {\n operation = 0;\n }\n ret.push([operation, change.value]);\n }\n return ret;\n}\n\nfunction convertChangesToXML(changes) {\n var ret = [];\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n if (change.added) {\n ret.push('<ins>');\n } else if (change.removed) {\n ret.push('<del>');\n }\n ret.push(escapeHTML(change.value));\n if (change.added) {\n ret.push('</ins>');\n } else if (change.removed) {\n ret.push('</del>');\n }\n }\n return ret.join('');\n}\nfunction escapeHTML(s) {\n var n = s;\n n = n.replace(/&/g, '&amp;');\n n = n.replace(/</g, '&lt;');\n n = n.replace(/>/g, '&gt;');\n n = n.replace(/\"/g, '&quot;');\n return n;\n}\n\nexport { Diff, applyPatch, applyPatches, canonicalize, convertChangesToDMP, convertChangesToXML, createPatch, createTwoFilesPatch, diffArrays, diffChars, diffCss, diffJson, diffLines, diffSentences, diffTrimmedLines, diffWords, diffWordsWithSpace, formatPatch, merge, parsePatch, reversePatch, structuredPatch };\n", "export function substituteVariables(\n prompt: string,\n variables: Record<string, string> | undefined\n): string {\n if (!variables || Object.keys(variables).length === 0) return prompt;\n return prompt.replace(/\\{\\{([\\w-]+)\\}\\}/g, (original, key: string) =>\n key in variables ? variables[key] : original\n );\n}\n", "import { randomUUID } from 'crypto';\nimport type {\n EvalRunResult,\n TestScenario,\n Template,\n Assertion\n} from '@wix/evalforge-types';\nimport type { ScenarioItem, EvaluationData } from './fetch-evaluation-data.js';\n\nexport interface EvaluationLoopCallbacks {\n runScenario: (\n scenario: TestScenario,\n template: Template | undefined,\n resolvedAssertions: Assertion[] | undefined\n ) => Promise<EvalRunResult>;\n addResult: (result: EvalRunResult) => Promise<void>;\n onProgress: (completed: number, total: number, iterLabel: string) => void;\n}\n\nexport interface EvaluationLoopResult {\n completedExecutions: number;\n totalExecutions: number;\n erroredExecutions: number;\n /**\n * `outputText` of the first errored iteration (already prefixed with\n * `\"Execution error: \"`). Captured so the entry-point can surface a\n * representative error on the eval run row when every iteration errors.\n */\n firstErrorMessage?: string;\n}\n\n/**\n * Run all scenarios with iteration support.\n *\n * Per-iteration execution errors are caught and recorded as failed results\n * (passRate: 0, outputText containing the error) rather than aborting the run.\n * This enables flakiness detection: all N iterations of every scenario complete\n * even when some iterations fail transiently.\n *\n * Infrastructure errors (e.g. failure to persist a result) are not caught and\n * will propagate up to abort the run.\n */\nexport async function runEvaluationLoop(\n scenarioItems: ScenarioItem[],\n evalData: EvaluationData,\n callbacks: EvaluationLoopCallbacks\n): Promise<EvaluationLoopResult> {\n const runsPerScenario = evalData.evalRun.runsPerScenario ?? 1;\n let completedExecutions = 0;\n let erroredExecutions = 0;\n let firstErrorMessage: string | undefined;\n const totalExecutions = scenarioItems.length * runsPerScenario;\n const targetId =\n evalData.evalRun.presetId ?? evalData.agent?.id ?? evalData.evalRun.id;\n const targetName = evalData.presetName ?? evalData.agent?.name ?? '';\n\n for (const { scenario, template, resolvedAssertions } of scenarioItems) {\n for (\n let iterationIndex = 0;\n iterationIndex < runsPerScenario;\n iterationIndex++\n ) {\n const iterLabel =\n runsPerScenario > 1\n ? ` [run ${iterationIndex + 1}/${runsPerScenario}]`\n : '';\n\n callbacks.onProgress(completedExecutions + 1, totalExecutions, iterLabel);\n\n let scenarioResult: EvalRunResult | null = null;\n try {\n scenarioResult = await callbacks.runScenario(\n scenario,\n template,\n resolvedAssertions\n );\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n console.error(\n `[Evaluator] Scenario iteration failed, recording as error result: \"${scenario.name}\"${iterLabel} \u2014 ${errorMsg}`\n );\n const errorResult: EvalRunResult = {\n id: randomUUID(),\n targetId,\n targetName,\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n assertionResults: [],\n passed: 0,\n failed: 0,\n passRate: 0,\n duration: 0,\n outputText: `Execution error: ${errorMsg}`,\n startedAt: new Date().toISOString(),\n completedAt: new Date().toISOString(),\n iterationIndex\n };\n await callbacks.addResult(errorResult);\n erroredExecutions++;\n if (firstErrorMessage === undefined) {\n firstErrorMessage = errorResult.outputText;\n }\n }\n\n if (scenarioResult !== null) {\n await callbacks.addResult({ ...scenarioResult, iterationIndex });\n }\n\n completedExecutions++;\n }\n }\n\n return {\n completedExecutions,\n totalExecutions,\n erroredExecutions,\n firstErrorMessage\n };\n}\n", "/**\n * Error Reporter Module\n *\n * Provides comprehensive error reporting functionality for the evaluator.\n * Captures detailed error information including stack traces and context,\n * and sends it to the server so failures can be debugged without accessing\n * the remote machine logs.\n */\n\nimport { EvalStatus } from '@wix/evalforge-types';\nimport type { EvaluatorConfig } from './config.js';\nimport { createApiClient } from './api-client.js';\n\n/**\n * Detailed error information to send to the server.\n */\nexport interface ErrorDetails {\n /** Short error message */\n message: string;\n /** Full stack trace if available */\n stack?: string;\n /** Error name/type (e.g., \"TypeError\", \"Error\") */\n errorType?: string;\n /** Phase of execution where the error occurred */\n phase?: string;\n /** Additional context about what was happening */\n context?: Record<string, unknown>;\n /** Timestamp when the error occurred */\n timestamp: string;\n}\n\n/**\n * Format an error into detailed error information.\n *\n * @param error - The error to format\n * @param phase - The phase of execution (e.g., \"config\", \"fetch\", \"execution\")\n * @param context - Additional context about what was happening\n * @returns Formatted error details\n */\nexport function formatError(\n error: unknown,\n phase?: string,\n context?: Record<string, unknown>\n): ErrorDetails {\n const timestamp = new Date().toISOString();\n\n if (error instanceof Error) {\n return {\n message: error.message,\n stack: error.stack,\n errorType: error.constructor.name,\n phase,\n context,\n timestamp\n };\n }\n\n // Handle non-Error types (strings, objects, etc.)\n return {\n message: String(error),\n errorType: typeof error,\n phase,\n context,\n timestamp\n };\n}\n\n/**\n * Format error details into a string suitable for the jobError field.\n * Includes the message, stack trace, and context in a readable format.\n *\n * @param details - The error details to format\n * @returns A formatted string with all error information\n */\nexport function formatErrorForJobError(details: ErrorDetails): string {\n const parts: string[] = [];\n\n // Add phase context\n if (details.phase) {\n parts.push(`[Phase: ${details.phase}]`);\n }\n\n // Add error type and message\n if (details.errorType && details.errorType !== 'Error') {\n parts.push(`${details.errorType}: ${details.message}`);\n } else {\n parts.push(details.message);\n }\n\n // Add context if present\n if (details.context && Object.keys(details.context).length > 0) {\n parts.push(`\\nContext: ${JSON.stringify(details.context)}`);\n }\n\n // Add stack trace (first 5 lines to keep it manageable)\n if (details.stack) {\n const stackLines = details.stack.split('\\n').slice(0, 6);\n parts.push(`\\nStack:\\n${stackLines.join('\\n')}`);\n }\n\n return parts.join(' ');\n}\n\n/**\n * Report an error to the server.\n *\n * This function attempts to update the eval run status to FAILED\n * with detailed error information. If the update fails, it logs\n * the error to stderr.\n *\n * @param config - Evaluator configuration (can be partial if config loading failed)\n * @param projectId - The project ID\n * @param evalRunId - The eval run ID\n * @param error - The error to report\n * @param phase - The phase where the error occurred\n * @param context - Additional context\n */\nexport async function reportError(\n config: Partial<EvaluatorConfig> | null,\n projectId: string,\n evalRunId: string,\n error: unknown,\n phase?: string,\n context?: Record<string, unknown>\n): Promise<void> {\n const errorDetails = formatError(error, phase, context);\n const jobError = formatErrorForJobError(errorDetails);\n\n // Log to stderr for local debugging\n console.error('[EVALUATOR-ERROR]', JSON.stringify(errorDetails, null, 2));\n\n // If we don't have a valid config, we can't report to the server\n if (!config?.serverUrl) {\n console.error('[EVALUATOR-ERROR] Cannot report to server: no serverUrl');\n return;\n }\n\n try {\n const api = createApiClient(config.serverUrl, {\n apiPrefix: config.apiPrefix,\n routeHeader: config.routeHeader,\n authToken: config.authToken\n });\n\n await api.updateEvalRun(projectId, evalRunId, {\n status: EvalStatus.FAILED,\n completedAt: new Date().toISOString(),\n jobError,\n jobStatus: 'FAILED'\n });\n\n console.error('[EVALUATOR-ERROR] Successfully reported error to server');\n } catch (reportErr) {\n console.error(\n '[EVALUATOR-ERROR] Failed to report error to server:',\n reportErr\n );\n }\n}\n\n/**\n * Execution phases for error context.\n */\nexport const ExecutionPhase = {\n /** Environment diagnostics phase (runs before execution) */\n DIAGNOSTICS: 'diagnostics',\n CONFIG: 'config-loading',\n API_CLIENT: 'api-client-creation',\n FETCH_EVAL_RUN: 'fetch-eval-run',\n FETCH_SKILLS: 'fetch-skills',\n FETCH_AGENT: 'fetch-agent',\n FETCH_SCENARIOS: 'fetch-scenarios',\n VALIDATION: 'validation',\n PREPARE_WORKSPACE: 'prepare-workspace',\n EXECUTE_SKILL: 'execute-skill',\n EXECUTE_AGENT: 'execute-agent',\n CLAUDE_SDK_IMPORT: 'claude-sdk-import',\n CLAUDE_SDK_EXECUTION: 'claude-sdk-execution',\n ADD_RESULT: 'add-result',\n UPDATE_STATUS: 'update-status'\n} as const;\n"],
5
- "mappings": "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",
6
- "names": ["resolve", "v", "path", "d", "b", "__assign", "o", "exports", "maybeGetDocument", "document", "undefined", "maybeGetGlobal", "self", "global", "_globals", "require", "readCookie", "name", "cookieValue", "getCookieByName", "split", "loadCookies", "documentObj", "maybeGetDocument", "cookie", "decodeURIComponent", "filter", "trim", "_cookies", "require", "XSRF_TOKEN_COOKIE_NAME", "exports", "XSRF_HEADER_NAME", "csrf", "value", "readCookie", "_globals", "require", "X_WIX_BRAND_NAME", "xWixBrand", "value", "extractBrand", "globalObj", "maybeGetGlobal", "commonConfig", "brand", "_globals", "require", "consentPolicy", "tryResolveNativeAPI", "tryResolveJsSDK", "none", "globalObj", "maybeGetGlobal", "Wix", "Utils", "_getConsentPolicyHeader", "undefined", "consentPolicyManager", "authorization", "signedInstance", "isCI", "isNode", "process", "env", "TEAMCITY_VERSION", "BUILDKITE", "_process$versions", "versions", "node", "_utils", "require", "artifactId", "override", "artifactIdToUse", "isNode", "process", "env", "ARTIFACT_ID", "APP_NAME", "isCI", "_globals", "require", "IGNORE_KEYS", "COMMON_CONFIG_NAME", "MAP_KEYS", "bsi", "extractCommonConfigValues", "globalObj", "maybeGetGlobal", "commonConfigObj", "commonConfig", "res", "addedKeys", "Object", "keys", "forEach", "key", "newKey", "indexOf", "commonConfigValues", "value", "JSON", "stringify", "encodeURIComponent", "exports", "exports", "module", "exports", "module", "encode", "_base", "_interopRequireDefault", "require", "LINGUIST_HEADER_KEY", "linguistHeader", "lang", "locale", "isPrimaryLanguage", "signedInstance", "isMultilingualOptionsAreValid", "instanceId", "getInstanceIdFromSignedInstance", "undefined", "toString", "join", "test", "encodedInstance", "startsWith", "split", "JSON", "parse", "base64", "decode", "e", "Brand", "exports", "WixHeadersParsingError", "Error", "constructor", "header", "value", "JSON", "stringify", "exports", "WixHeadersValidationError", "type", "key", "_errors", "require", "assertBoolean", "key", "value", "WixHeadersValidationError", "assertString", "_csrf", "require", "_xWixBrand", "_consentPolicy", "_authorization", "_artifactId", "_commonConfig", "_linguist", "_domain", "exports", "MultilingualOptions", "_assert", "createHeaders", "opts", "csrf", "signedInstance", "verifyOptsOrThrow", "headers", "xWixBrand", "consentPolicy", "authorization", "artifactId", "commonConfig", "linguistHeader", "multilingualOptions", "push", "filter", "hdrs", "Object", "values", "every", "v", "reduce", "result", "assertBoolean", "assertString", "exports", "exports", "path", "exports", "module", "exports", "exports", "exports", "module", "require_utils", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "resolve", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "encode", "exports", "module", "exports", "module", "self", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "useColors", "exports", "module", "exports", "module", "exports", "module", "URL", "self", "resolveUrl", "relative", "exports", "module", "exports", "module", "resolve", "reject", "__importStar", "exports", "req", "resolve", "__importStar", "__exportStar", "exports", "__importStar", "__importDefault", "exports", "__importDefault", "resolve", "exports", "__importStar", "__importDefault", "exports", "exports", "module", "exports", "module", "require_cookies", "exports", "module", "path", "exports", "module", "exports", "module", "exports", "module", "resolve", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "resolve", "exports", "module", "exports", "module", "exports", "module", "require_axios", "exports", "module", "exports", "HttpClient", "exports", "exports", "exports", "exports", "import_evalforge_types", "path", "path", "path", "resolvePath", "ConverterType", "_a", "_a", "_a", "_a", "_a", "_a", "_a", "_a", "_a", "diff", "projectId", "path", "projectId", "evalRunId", "projectId", "evalRunId", "import_evalforge_types", "import_fs", "import_promises", "import_path", "import_path", "path", "path", "evalRunId", "workDir", "import_crypto", "import_evalforge_types", "import_evalforge_types", "import_promises", "import_path", "import_evalforge_github_client", "import_crypto", "import_promises", "import_path", "import_evalforge_types", "import_promises", "import_path", "import_os", "import_promises", "import_path", "import_evalforge_github_client", "import_promises", "import_path", "timestamp", "import_evalforge_types", "path", "isAssistantMessage", "writeFile", "errObj", "sdkErrorKeys", "import_evalforge_types", "import_child_process", "import_evalforge_types", "import_promises", "import_path", "import_evalforge_github_client", "writeSkillsToFilesystem", "writeSkillToFilesystem", "import_promises", "import_path", "import_evalforge_github_client", "AGENTS_DIR", "toAgentFilename", "resolveSubAgentContent", "writeSubAgentsToFilesystem", "import_os", "import_evalforge_types", "DEFAULT_MODEL", "import_evalforge_types", "import_crypto", "buildConversation", "timestamp", "import_promises", "import_path", "writeSubAgentsToFilesystem", "writeSkillsToFilesystem", "resolve", "buildConversation", "import_evalforge_types", "import_crypto", "import_evalforge_types", "cost", "body", "buildConversation", "PROVIDER_ANTHROPIC", "PROVIDER_GEMINI", "buildLLMTrace", "buildConversation", "import_fs", "import_path", "self", "path", "join", "diff", "value", "o", "path", "diffLines", "import_evalforge_types", "evalRunId", "evalRunId", "evaluateAssertionsBase", "import_crypto", "import_evalforge_types", "timestamp", "projectId", "evalRunId"]
3
+ "sources": ["../../../node_modules/tslib/tslib.es6.mjs", "../../../node_modules/@wix/http-client/src/constants.ts", "../../../node_modules/@wix/headers/src/globals.ts", "../../../node_modules/@wix/headers/src/cookies.ts", "../../../node_modules/@wix/headers/src/headers/csrf.ts", "../../../node_modules/@wix/headers/src/headers/x-wix-brand.ts", "../../../node_modules/@wix/headers/src/headers/consent-policy.ts", "../../../node_modules/@wix/headers/src/headers/authorization.ts", "../../../node_modules/@wix/headers/src/utils.ts", "../../../node_modules/@wix/headers/src/headers/artifact-id.ts", "../../../node_modules/@wix/headers/src/headers/common-config.ts", "../../../node_modules/@babel/runtime/helpers/interopRequireDefault.js", "../../../node_modules/base-64/base64.js", "../../../node_modules/@wix/headers/src/headers/linguist.ts", "../../../node_modules/@wix/headers/src/domain.ts", "../../../node_modules/@wix/headers/src/errors.ts", "../../../node_modules/@wix/headers/src/assert.ts", "../../../node_modules/@wix/headers/src/index.ts", "../../../node_modules/@wix/http-client/src/env-util.ts", "../../../node_modules/@wix/http-client/src/utils.ts", "../../../node_modules/@wix/http-client/dist/src/whitelist.json", "../../../node_modules/@wix/http-client/src/headers.ts", "../../../node_modules/@wix/http-client/src/error.ts", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/bind.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/utils.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/enhanceError.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/createError.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/settle.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/isAbsoluteURL.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/combineURLs.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/buildFullPath.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/buildURL.js", "../../../node_modules/ms/index.js", "../../../node_modules/debug/src/common.js", "../../../node_modules/debug/src/browser.js", "../../../node_modules/supports-color/node_modules/has-flag/index.js", "../../../node_modules/supports-color/index.js", "../../../node_modules/debug/src/node.js", "../../../node_modules/debug/src/index.js", "../../../node_modules/follow-redirects/debug.js", "../../../node_modules/follow-redirects/index.js", "../../../node_modules/@wix/http-client/node_modules/axios/package.json", "../../../node_modules/@wix/http-client/node_modules/axios/lib/adapters/http.js", "../../../node_modules/agent-base/src/helpers.ts", "../../../node_modules/agent-base/src/index.ts", "../../../node_modules/http-proxy-agent/src/index.ts", "../../../node_modules/https-proxy-agent/src/parse-proxy-response.ts", "../../../node_modules/https-proxy-agent/src/index.ts", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/InterceptorManager.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/normalizeHeaderName.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/cookies.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/parseHeaders.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/isURLSameOrigin.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/adapters/xhr.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/defaults.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/transformData.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/cancel/isCancel.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/dispatchRequest.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/mergeConfig.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/validator.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/core/Axios.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/cancel/Cancel.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/cancel/CancelToken.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/spread.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/helpers/isAxiosError.js", "../../../node_modules/@wix/http-client/node_modules/axios/lib/axios.js", "../../../node_modules/@wix/http-client/node_modules/axios/index.js", "../../../node_modules/@wix/http-client/src/options.ts", "../../../node_modules/@wix/http-client/src/http-client.ts", "../../../node_modules/@wix/http-client/src/http-client-node.ts", "../../../node_modules/@wix/http-client/dist/src/types.js", "../../../node_modules/@wix/http-client/src/index-node.ts", "../src/index.ts", "../src/config.ts", "../src/api-client.ts", "../../../node_modules/@wix/metro-runtime/src/serialization/utils.ts", "../../../node_modules/@wix/metro-runtime/src/utils.ts", "../../../node_modules/@wix/metro-runtime/src/url-resolver.ts", "../../../node_modules/js-base64/base64.mjs", "../../../node_modules/@wix/metro-runtime/src/flatten-params.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/domain.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/serializer.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/protobuf-converters/timestamp.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/protobuf-converters/field-mask.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/protobuf-converters/bytes.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/protobuf-converters/duration.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/protobuf-converters/float.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/protobuf-converters/converters.ts", "../../../node_modules/@wix/metro-runtime/src/serializer/utils.ts", "../../../node_modules/@wix/metro-runtime/src/ambassador-index.ts", "../../../node_modules/@wix/ambassador-evalforge-v1-test-scenario/http.impl.ts", "../../../node_modules/@wix/ambassador-evalforge-v1-eval-run/http.impl.ts", "../../../node_modules/@wix/ambassador-evalforge-v1-agent/http.impl.ts", "../../../node_modules/@wix/ambassador-evalforge-v1-project/http.impl.ts", "../../../node_modules/@wix/ambassador-evalforge-v1-preset/http.impl.ts", "../../../node_modules/@wix/ambassador-evalforge-v1-capability/http.impl.ts", "../src/ambassador-converters.ts", "../src/fetch-evaluation-data.ts", "../src/resolve-placeholders.ts", "../src/run-scenario/index.ts", "../src/run-scenario/environment.ts", "../src/run-scenario/utils/write-files.ts", "../src/run-scenario/install-dependencies.ts", "../src/run-scenario/run-agent-with-context.ts", "../src/run-scenario/agents/registry.ts", "../src/run-scenario/agents/claude-code/claude-code-adapter.ts", "../src/run-scenario/agents/claude-code/execute.ts", "../src/run-scenario/agents/claude-code/write-skills.ts", "../src/run-scenario/agents/shared/resolve-capability-content.ts", "../src/run-scenario/agents/timeout.ts", "../src/run-scenario/agents/claude-code/write-mcp.ts", "../src/run-scenario/agents/shared/resolve-mcp-placeholders.ts", "../src/run-scenario/agents/claude-code/write-sub-agents.ts", "../src/run-scenario/agents/claude-code/write-rules.ts", "../src/run-scenario/agents/claude-code/build-conversation.ts", "../src/run-scenario/agents/shared/trace-emit.ts", "../src/run-scenario/agents/claude-code/index.ts", "../src/run-scenario/agents/opencode/opencode-adapter.ts", "../src/run-scenario/agents/opencode/execute.ts", "../src/run-scenario/agents/opencode/types.ts", "../src/run-scenario/agents/opencode/write-skills.ts", "../src/run-scenario/agents/opencode/write-sub-agents.ts", "../src/run-scenario/agents/opencode/config.ts", "../src/run-scenario/agents/opencode/build-trace.ts", "../src/run-scenario/agents/opencode/build-conversation.ts", "../src/run-scenario/agents/opencode/index.ts", "../src/run-scenario/agents/simple-agent/execute.ts", "../src/run-scenario/agents/simple-agent/mcp-tools.ts", "../src/run-scenario/agents/shared/detect-tool-error.ts", "../src/run-scenario/agents/simple-agent/cost-calculation.ts", "../src/run-scenario/agents/simple-agent/build-conversation.ts", "../src/run-scenario/agents/simple-agent/simple-agent-adapter.ts", "../src/run-scenario/agents/simple-agent/index.ts", "../src/run-scenario/file-diff.ts", "../../../node_modules/diff/lib/index.mjs", "../src/substitute-variables.ts", "../src/evaluation-loop.ts", "../src/error-reporter.ts"],
4
+ "sourcesContent": ["/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n", null, "export function maybeGetDocument() {\n if (typeof document === 'object') {\n return document;\n }\n\n return undefined;\n}\n\nexport function maybeGetGlobal(): any {\n if (typeof self === 'object') {\n return self;\n } else {\n return global;\n }\n}\n", "import { maybeGetDocument } from './globals';\n\nexport function readCookie(name: string): string {\n const cookieValue = getCookieByName(name);\n\n if (cookieValue) {\n return cookieValue.split('=')[1];\n }\n\n return '';\n}\n\nfunction loadCookies(): string[] {\n const documentObj = maybeGetDocument();\n\n if (documentObj && documentObj.cookie) {\n return decodeURIComponent(documentObj.cookie).split(';');\n }\n\n return [];\n}\n\nfunction getCookieByName(name: string): string {\n return loadCookies().filter(\n (cookie) => name === cookie.split('=')[0].trim(),\n )[0];\n}\n", "import { readCookie } from '../cookies';\n\nexport const XSRF_TOKEN_COOKIE_NAME = 'XSRF-TOKEN';\nexport const XSRF_HEADER_NAME = 'x-xsrf-token';\n\nexport function csrf() {\n const value = readCookie(XSRF_TOKEN_COOKIE_NAME);\n return { [XSRF_HEADER_NAME]: value };\n}\n", "import { maybeGetGlobal } from '../globals';\n\nconst X_WIX_BRAND_NAME = 'x-wix-brand';\n\nexport function xWixBrand() {\n const value = extractBrand();\n\n return { [X_WIX_BRAND_NAME]: value };\n}\n\nfunction extractBrand(): string {\n const globalObj = maybeGetGlobal();\n\n if (\n globalObj &&\n globalObj.commonConfig &&\n typeof globalObj.commonConfig.brand === 'string'\n ) {\n return globalObj.commonConfig.brand;\n }\n\n return '';\n}\n", "import { maybeGetGlobal } from '../globals';\n\nexport function consentPolicy() {\n return tryResolveNativeAPI() || tryResolveJsSDK() || none();\n}\n\nfunction tryResolveJsSDK() {\n const globalObj = maybeGetGlobal();\n\n if (\n globalObj &&\n globalObj.Wix &&\n globalObj.Wix.Utils &&\n typeof globalObj.Wix.Utils._getConsentPolicyHeader === 'function'\n ) {\n return globalObj.Wix.Utils._getConsentPolicyHeader();\n }\n\n return undefined;\n}\n\nfunction tryResolveNativeAPI() {\n const globalObj = maybeGetGlobal();\n\n if (\n globalObj &&\n globalObj.consentPolicyManager &&\n typeof globalObj.consentPolicyManager._getConsentPolicyHeader === 'function'\n ) {\n return globalObj.consentPolicyManager._getConsentPolicyHeader();\n }\n\n return undefined;\n}\n\nfunction none() {\n return {};\n}\n", "export function authorization(signedInstance?: string) {\n return { authorization: signedInstance };\n}\n", "export function isCI() {\n if (isNode()) {\n return !!process.env.TEAMCITY_VERSION || !!process.env.BUILDKITE;\n }\n\n return false;\n}\n\nexport function isNode() {\n // todo: need to add a browser test\n return typeof process !== 'undefined' && process.versions?.node != null;\n}\n", "import { isCI, isNode } from '../utils';\n\nexport function artifactId(override?: string) {\n const artifactIdToUse = isNode()\n ? process.env.ARTIFACT_ID ?? process.env.APP_NAME ?? ''\n : '';\n\n return {\n 'X-Wix-Client-Artifact-Id': override ?? (!isCI() ? artifactIdToUse : ''),\n };\n}\n", "import { maybeGetGlobal } from '../globals';\nimport { CommonConfigServer } from '../domain';\n\nconst IGNORE_KEYS = ['consentPolicy', 'consentPolicyHeader'];\nconst COMMON_CONFIG_NAME = 'commonConfig';\nconst MAP_KEYS = {\n bsi: 'BSI',\n};\n\nfunction extractCommonConfigValues(): CommonConfigServer | null {\n const globalObj = maybeGetGlobal();\n const commonConfigObj = globalObj?.commonConfig;\n\n if (!commonConfigObj) {\n return null;\n }\n\n const res: any = {};\n let addedKeys = false;\n Object.keys(commonConfigObj).forEach((key) => {\n // @ts-expect-error\n const newKey: string | undefined = MAP_KEYS[key];\n if (newKey) {\n res[newKey] = commonConfigObj[key];\n addedKeys = true;\n } else if (\n IGNORE_KEYS.indexOf(key) < 0 &&\n typeof commonConfigObj[key] !== 'function'\n ) {\n res[key] = commonConfigObj[key];\n addedKeys = true;\n }\n });\n\n return addedKeys ? (res as CommonConfigServer) : null;\n}\n\nexport const commonConfig = () => {\n const commonConfigValues = extractCommonConfigValues();\n const value = commonConfigValues ? JSON.stringify(commonConfigValues) : '';\n\n return { [COMMON_CONFIG_NAME]: encodeURIComponent(value) };\n};\n", "function _interopRequireDefault(e) {\n return e && e.__esModule ? e : {\n \"default\": e\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;", "/*! https://mths.be/base64 v1.0.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk\u2019s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters\u2026\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// \u2026convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '1.0.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n", "import base64 from 'base-64';\nimport { MultilingualOptions, Headers } from '../domain';\n\nconst LINGUIST_HEADER_KEY = 'x-wix-linguist';\n\nexport function linguistHeader({\n lang,\n locale,\n isPrimaryLanguage,\n signedInstance,\n}: MultilingualOptions & { signedInstance?: string }): Headers {\n // Validate all parameters exists in order to create the linguist header.\n if (isMultilingualOptionsAreValid({ lang, locale, isPrimaryLanguage })) {\n const instanceId = getInstanceIdFromSignedInstance(signedInstance);\n\n if (instanceId !== undefined) {\n return {\n [LINGUIST_HEADER_KEY]: [\n lang,\n locale,\n isPrimaryLanguage?.toString(),\n instanceId,\n ].join('|'),\n };\n }\n }\n\n return {};\n}\n\nfunction isMultilingualOptionsAreValid({\n lang,\n locale,\n isPrimaryLanguage,\n}: MultilingualOptions) {\n return (\n lang && locale && /^(true|false)$/.test(isPrimaryLanguage?.toString() || '')\n );\n}\n\nfunction getInstanceIdFromSignedInstance(signedInstance?: string) {\n try {\n const encodedInstance = signedInstance?.startsWith('wixcode')\n ? signedInstance?.split('.')[2]\n : signedInstance?.split('.')[1];\n\n if (encodedInstance) {\n return JSON.parse(base64.decode(encodedInstance)).instanceId;\n }\n } catch (e) {}\n}\n", "import type proto from '@wix/fed-infra-protos/dist/proto-generated';\n\nexport type CommonConfigServerProto = proto.wix.fedinfra.commons.CommonConfig;\n\nexport enum Brand {\n wix = 0,\n editorx = 1,\n dayful = 2,\n studio = 3,\n}\n\nexport interface CommonConfigServer\n extends Omit<CommonConfigServerProto, 'brand'> {\n brand?: 'wix' | 'editorx' | 'dayful' | 'studio';\n}\n\nexport interface CommonConfig extends Omit<CommonConfigServer, 'BSI'> {\n bsi?: string | null;\n}\n\nexport interface ConsentPolicyManager {\n _getConsentPolicyHeader(): Headers;\n}\n\nexport interface Wix {\n Utils: {\n _getConsentPolicyHeader(): Headers;\n };\n}\n\nexport type Headers = { [header: string]: string | undefined };\n\nexport type WixHeaders = {\n 'x-wix-brand'?: string;\n 'x-xsrf-token'?: string;\n authorization?: string;\n 'X-Wix-Client-Artifact-Id'?: string;\n commonConfig?: string;\n 'x-wix-linguist'?: string;\n};\n\nexport interface MultilingualOptions {\n lang?: string;\n locale?: string;\n isPrimaryLanguage?: string | boolean;\n}\n", "export class WixHeadersParsingError extends Error {\n constructor(header: string, value: any) {\n super(\n `WixHeadersParsingError: ${header} evaluated with ${JSON.stringify(\n value,\n )} but should be a string!`,\n );\n }\n}\n\nexport class WixHeadersValidationError extends Error {\n constructor(type: string, key: string, value: any) {\n super(\n `WixHeadersValidationError: expected ${key} to be ${type} but got ${JSON.stringify(\n value,\n )}`,\n );\n }\n}\n", "import { WixHeadersValidationError } from './errors';\n\nexport function assertBoolean(key: string, value: any) {\n if (typeof value !== 'boolean') {\n throw new WixHeadersValidationError('boolean', key, value);\n }\n}\n\nexport function assertString(key: string, value: any) {\n if (typeof value !== 'string') {\n throw new WixHeadersValidationError('string', key, value);\n }\n}\n", "import { csrf } from './headers/csrf';\nimport { xWixBrand } from './headers/x-wix-brand';\nimport { consentPolicy } from './headers/consent-policy';\nimport { authorization } from './headers/authorization';\nimport { artifactId } from './headers/artifact-id';\nimport { commonConfig } from './headers/common-config';\nimport { linguistHeader } from './headers/linguist';\nimport { MultilingualOptions, WixHeaders, Headers } from './domain';\nimport { assertBoolean, assertString } from './assert';\n\nexport { MultilingualOptions };\n\nexport type WixHeadersOpts = {\n csrf?: boolean;\n signedInstance?: string;\n artifactId?: string;\n multilingualOptions?: MultilingualOptions;\n};\n\nexport function createHeaders(opts: WixHeadersOpts = {}): WixHeaders {\n opts = { csrf: true, signedInstance: '', ...opts };\n\n verifyOptsOrThrow(opts);\n\n const headers: Headers[] = [\n xWixBrand(),\n consentPolicy(),\n authorization(opts.signedInstance),\n artifactId(opts.artifactId),\n commonConfig(),\n linguistHeader({\n signedInstance: opts.signedInstance,\n ...opts.multilingualOptions,\n }),\n ];\n\n if (opts.csrf) {\n headers.push(csrf());\n }\n\n return headers\n .filter((hdrs) => Object.values(hdrs).every((v) => v))\n .reduce(\n (result, hdrs) => ({\n ...result,\n ...hdrs,\n }),\n {} as WixHeaders,\n );\n}\n\nfunction verifyOptsOrThrow(opts: WixHeadersOpts) {\n assertBoolean('opts.csrf', opts.csrf);\n assertString('opts.signedInstance', opts.signedInstance);\n}\n", null, null, "[\n \"wix.com\",\n \"editorx.com\",\n \"wix-code.com\",\n \"wixapps.net\",\n \"wixprod.net\"\n]\n", null, null, "'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n", "'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n", "'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n", "'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n", "'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n", "'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n", "'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n", "'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n", "'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\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';\nmodule.exports = (flag, argv) => {\n\targv = argv || process.argv;\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst pos = argv.indexOf(prefix + flag);\n\tconst terminatorPos = argv.indexOf('--');\n\treturn pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);\n};\n", "'use strict';\nconst os = require('os');\nconst hasFlag = require('has-flag');\n\nconst env = process.env;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false')) {\n\tforceColor = false;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = true;\n}\nif ('FORCE_COLOR' in env) {\n\tforceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0;\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(stream) {\n\tif (forceColor === false) {\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 (stream && !stream.isTTY && forceColor !== true) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor ? 1 : 0;\n\n\tif (process.platform === 'win32') {\n\t\t// Node.js 7.5.0 is the first version of Node.js to include a patch to\n\t\t// libuv that enables 256 color output on Windows. Anything earlier and it\n\t\t// won't work. However, here we target Node.js 8 at minimum as it is an LTS\n\t\t// release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows\n\t\t// release that supports 256 colors. Windows 10 build 14931 is the first release\n\t\t// that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(process.versions.node.split('.')[0]) >= 8 &&\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'].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\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: getSupportLevel(process.stdout),\n\tstderr: getSupportLevel(process.stderr)\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", "var debug;\n\nmodule.exports = function () {\n if (!debug) {\n try {\n /* eslint global-require: off */\n debug = require(\"debug\")(\"follow-redirects\");\n }\n catch (error) { /* */ }\n if (typeof debug !== \"function\") {\n debug = function () { /* */ };\n }\n }\n debug.apply(null, arguments);\n};\n", "var url = require(\"url\");\nvar URL = url.URL;\nvar http = require(\"http\");\nvar https = require(\"https\");\nvar Writable = require(\"stream\").Writable;\nvar assert = require(\"assert\");\nvar debug = require(\"./debug\");\n\n// Preventive platform detection\n// istanbul ignore next\n(function detectUnsupportedEnvironment() {\n var looksLikeNode = typeof process !== \"undefined\";\n var looksLikeBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n var looksLikeV8 = isFunction(Error.captureStackTrace);\n if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) {\n console.warn(\"The follow-redirects package should be excluded from browser builds.\");\n }\n}());\n\n// Whether to use the native URL object or the legacy url module\nvar useNativeURL = false;\ntry {\n assert(new URL(\"\"));\n}\ncatch (error) {\n useNativeURL = error.code === \"ERR_INVALID_URL\";\n}\n\n// URL fields to preserve in copy operations\nvar preservedUrlFields = [\n \"auth\",\n \"host\",\n \"hostname\",\n \"href\",\n \"path\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"query\",\n \"search\",\n \"hash\",\n];\n\n// Create handlers that pass events from native requests\nvar events = [\"abort\", \"aborted\", \"connect\", \"error\", \"socket\", \"timeout\"];\nvar eventHandlers = Object.create(null);\nevents.forEach(function (event) {\n eventHandlers[event] = function (arg1, arg2, arg3) {\n this._redirectable.emit(event, arg1, arg2, arg3);\n };\n});\n\n// Error types with codes\nvar InvalidUrlError = createErrorType(\n \"ERR_INVALID_URL\",\n \"Invalid URL\",\n TypeError\n);\nvar RedirectionError = createErrorType(\n \"ERR_FR_REDIRECTION_FAILURE\",\n \"Redirected request failed\"\n);\nvar TooManyRedirectsError = createErrorType(\n \"ERR_FR_TOO_MANY_REDIRECTS\",\n \"Maximum number of redirects exceeded\",\n RedirectionError\n);\nvar MaxBodyLengthExceededError = createErrorType(\n \"ERR_FR_MAX_BODY_LENGTH_EXCEEDED\",\n \"Request body larger than maxBodyLength limit\"\n);\nvar WriteAfterEndError = createErrorType(\n \"ERR_STREAM_WRITE_AFTER_END\",\n \"write after end\"\n);\n\n// istanbul ignore next\nvar destroy = Writable.prototype.destroy || noop;\n\n// An HTTP(S) request that can be redirected\nfunction RedirectableRequest(options, responseCallback) {\n // Initialize the request\n Writable.call(this);\n this._sanitizeOptions(options);\n this._options = options;\n this._ended = false;\n this._ending = false;\n this._redirectCount = 0;\n this._redirects = [];\n this._requestBodyLength = 0;\n this._requestBodyBuffers = [];\n\n // Attach a callback if passed\n if (responseCallback) {\n this.on(\"response\", responseCallback);\n }\n\n // React to responses of native requests\n var self = this;\n this._onNativeResponse = function (response) {\n try {\n self._processResponse(response);\n }\n catch (cause) {\n self.emit(\"error\", cause instanceof RedirectionError ?\n cause : new RedirectionError({ cause: cause }));\n }\n };\n\n // Perform the first request\n this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\nRedirectableRequest.prototype.abort = function () {\n destroyRequest(this._currentRequest);\n this._currentRequest.abort();\n this.emit(\"abort\");\n};\n\nRedirectableRequest.prototype.destroy = function (error) {\n destroyRequest(this._currentRequest, error);\n destroy.call(this, error);\n return this;\n};\n\n// Writes buffered data to the current native request\nRedirectableRequest.prototype.write = function (data, encoding, callback) {\n // Writing is not allowed if end has been called\n if (this._ending) {\n throw new WriteAfterEndError();\n }\n\n // Validate input and shift parameters if necessary\n if (!isString(data) && !isBuffer(data)) {\n throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n }\n if (isFunction(encoding)) {\n callback = encoding;\n encoding = null;\n }\n\n // Ignore empty buffers, since writing them doesn't invoke the callback\n // https://github.com/nodejs/node/issues/22066\n if (data.length === 0) {\n if (callback) {\n callback();\n }\n return;\n }\n // Only write when we don't exceed the maximum body length\n if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n this._requestBodyLength += data.length;\n this._requestBodyBuffers.push({ data: data, encoding: encoding });\n this._currentRequest.write(data, encoding, callback);\n }\n // Error when we exceed the maximum body length\n else {\n this.emit(\"error\", new MaxBodyLengthExceededError());\n this.abort();\n }\n};\n\n// Ends the current native request\nRedirectableRequest.prototype.end = function (data, encoding, callback) {\n // Shift parameters if necessary\n if (isFunction(data)) {\n callback = data;\n data = encoding = null;\n }\n else if (isFunction(encoding)) {\n callback = encoding;\n encoding = null;\n }\n\n // Write data if needed and end\n if (!data) {\n this._ended = this._ending = true;\n this._currentRequest.end(null, null, callback);\n }\n else {\n var self = this;\n var currentRequest = this._currentRequest;\n this.write(data, encoding, function () {\n self._ended = true;\n currentRequest.end(null, null, callback);\n });\n this._ending = true;\n }\n};\n\n// Sets a header value on the current native request\nRedirectableRequest.prototype.setHeader = function (name, value) {\n this._options.headers[name] = value;\n this._currentRequest.setHeader(name, value);\n};\n\n// Clears a header value on the current native request\nRedirectableRequest.prototype.removeHeader = function (name) {\n delete this._options.headers[name];\n this._currentRequest.removeHeader(name);\n};\n\n// Global timeout for all underlying requests\nRedirectableRequest.prototype.setTimeout = function (msecs, callback) {\n var self = this;\n\n // Destroys the socket on timeout\n function destroyOnTimeout(socket) {\n socket.setTimeout(msecs);\n socket.removeListener(\"timeout\", socket.destroy);\n socket.addListener(\"timeout\", socket.destroy);\n }\n\n // Sets up a timer to trigger a timeout event\n function startTimer(socket) {\n if (self._timeout) {\n clearTimeout(self._timeout);\n }\n self._timeout = setTimeout(function () {\n self.emit(\"timeout\");\n clearTimer();\n }, msecs);\n destroyOnTimeout(socket);\n }\n\n // Stops a timeout from triggering\n function clearTimer() {\n // Clear the timeout\n if (self._timeout) {\n clearTimeout(self._timeout);\n self._timeout = null;\n }\n\n // Clean up all attached listeners\n self.removeListener(\"abort\", clearTimer);\n self.removeListener(\"error\", clearTimer);\n self.removeListener(\"response\", clearTimer);\n self.removeListener(\"close\", clearTimer);\n if (callback) {\n self.removeListener(\"timeout\", callback);\n }\n if (!self.socket) {\n self._currentRequest.removeListener(\"socket\", startTimer);\n }\n }\n\n // Attach callback if passed\n if (callback) {\n this.on(\"timeout\", callback);\n }\n\n // Start the timer if or when the socket is opened\n if (this.socket) {\n startTimer(this.socket);\n }\n else {\n this._currentRequest.once(\"socket\", startTimer);\n }\n\n // Clean up on events\n this.on(\"socket\", destroyOnTimeout);\n this.on(\"abort\", clearTimer);\n this.on(\"error\", clearTimer);\n this.on(\"response\", clearTimer);\n this.on(\"close\", clearTimer);\n\n return this;\n};\n\n// Proxy all other public ClientRequest methods\n[\n \"flushHeaders\", \"getHeader\",\n \"setNoDelay\", \"setSocketKeepAlive\",\n].forEach(function (method) {\n RedirectableRequest.prototype[method] = function (a, b) {\n return this._currentRequest[method](a, b);\n };\n});\n\n// Proxy all public ClientRequest properties\n[\"aborted\", \"connection\", \"socket\"].forEach(function (property) {\n Object.defineProperty(RedirectableRequest.prototype, property, {\n get: function () { return this._currentRequest[property]; },\n });\n});\n\nRedirectableRequest.prototype._sanitizeOptions = function (options) {\n // Ensure headers are always present\n if (!options.headers) {\n options.headers = {};\n }\n\n // Since http.request treats host as an alias of hostname,\n // but the url module interprets host as hostname plus port,\n // eliminate the host property to avoid confusion.\n if (options.host) {\n // Use hostname if set, because it has precedence\n if (!options.hostname) {\n options.hostname = options.host;\n }\n delete options.host;\n }\n\n // Complete the URL object when necessary\n if (!options.pathname && options.path) {\n var searchPos = options.path.indexOf(\"?\");\n if (searchPos < 0) {\n options.pathname = options.path;\n }\n else {\n options.pathname = options.path.substring(0, searchPos);\n options.search = options.path.substring(searchPos);\n }\n }\n};\n\n\n// Executes the next native request (initial or redirect)\nRedirectableRequest.prototype._performRequest = function () {\n // Load the native protocol\n var protocol = this._options.protocol;\n var nativeProtocol = this._options.nativeProtocols[protocol];\n if (!nativeProtocol) {\n throw new TypeError(\"Unsupported protocol \" + protocol);\n }\n\n // If specified, use the agent corresponding to the protocol\n // (HTTP and HTTPS use different types of agents)\n if (this._options.agents) {\n var scheme = protocol.slice(0, -1);\n this._options.agent = this._options.agents[scheme];\n }\n\n // Create the native request and set up its event handlers\n var request = this._currentRequest =\n nativeProtocol.request(this._options, this._onNativeResponse);\n request._redirectable = this;\n for (var event of events) {\n request.on(event, eventHandlers[event]);\n }\n\n // RFC7230\u00A75.3.1: When making a request directly to an origin server, [\u2026]\n // a client MUST send only the absolute path [\u2026] as the request-target.\n this._currentUrl = /^\\//.test(this._options.path) ?\n url.format(this._options) :\n // When making a request to a proxy, [\u2026]\n // a client MUST send the target URI in absolute-form [\u2026].\n this._options.path;\n\n // End a redirected request\n // (The first request must be ended explicitly with RedirectableRequest#end)\n if (this._isRedirect) {\n // Write the request entity and end\n var i = 0;\n var self = this;\n var buffers = this._requestBodyBuffers;\n (function writeNext(error) {\n // Only write if this request has not been redirected yet\n // istanbul ignore else\n if (request === self._currentRequest) {\n // Report any write errors\n // istanbul ignore if\n if (error) {\n self.emit(\"error\", error);\n }\n // Write the next buffer if there are still left\n else if (i < buffers.length) {\n var buffer = buffers[i++];\n // istanbul ignore else\n if (!request.finished) {\n request.write(buffer.data, buffer.encoding, writeNext);\n }\n }\n // End the request if `end` has been called on us\n else if (self._ended) {\n request.end();\n }\n }\n }());\n }\n};\n\n// Processes a response from the current native request\nRedirectableRequest.prototype._processResponse = function (response) {\n // Store the redirected response\n var statusCode = response.statusCode;\n if (this._options.trackRedirects) {\n this._redirects.push({\n url: this._currentUrl,\n headers: response.headers,\n statusCode: statusCode,\n });\n }\n\n // RFC7231\u00A76.4: The 3xx (Redirection) class of status code indicates\n // that further action needs to be taken by the user agent in order to\n // fulfill the request. If a Location header field is provided,\n // the user agent MAY automatically redirect its request to the URI\n // referenced by the Location field value,\n // even if the specific status code is not understood.\n\n // If the response is not a redirect; return it as-is\n var location = response.headers.location;\n if (!location || this._options.followRedirects === false ||\n statusCode < 300 || statusCode >= 400) {\n response.responseUrl = this._currentUrl;\n response.redirects = this._redirects;\n this.emit(\"response\", response);\n\n // Clean up\n this._requestBodyBuffers = [];\n return;\n }\n\n // The response is a redirect, so abort the current request\n destroyRequest(this._currentRequest);\n // Discard the remainder of the response to avoid waiting for data\n response.destroy();\n\n // RFC7231\u00A76.4: A client SHOULD detect and intervene\n // in cyclical redirections (i.e., \"infinite\" redirection loops).\n if (++this._redirectCount > this._options.maxRedirects) {\n throw new TooManyRedirectsError();\n }\n\n // Store the request headers if applicable\n var requestHeaders;\n var beforeRedirect = this._options.beforeRedirect;\n if (beforeRedirect) {\n requestHeaders = Object.assign({\n // The Host header was set by nativeProtocol.request\n Host: response.req.getHeader(\"host\"),\n }, this._options.headers);\n }\n\n // RFC7231\u00A76.4: Automatic redirection needs to done with\n // care for methods not known to be safe, [\u2026]\n // RFC7231\u00A76.4.2\u20133: For historical reasons, a user agent MAY change\n // the request method from POST to GET for the subsequent request.\n var method = this._options.method;\n if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" ||\n // RFC7231\u00A76.4.4: The 303 (See Other) status code indicates that\n // the server is redirecting the user agent to a different resource [\u2026]\n // A user agent can perform a retrieval request targeting that URI\n // (a GET or HEAD request if using HTTP) [\u2026]\n (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {\n this._options.method = \"GET\";\n // Drop a possible entity and headers related to it\n this._requestBodyBuffers = [];\n removeMatchingHeaders(/^content-/i, this._options.headers);\n }\n\n // Drop the Host header, as the redirect might lead to a different host\n var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);\n\n // If the redirect is relative, carry over the host of the last request\n var currentUrlParts = parseUrl(this._currentUrl);\n var currentHost = currentHostHeader || currentUrlParts.host;\n var currentUrl = /^\\w+:/.test(location) ? this._currentUrl :\n url.format(Object.assign(currentUrlParts, { host: currentHost }));\n\n // Create the redirected request\n var redirectUrl = resolveUrl(location, currentUrl);\n debug(\"redirecting to\", redirectUrl.href);\n this._isRedirect = true;\n spreadUrlObject(redirectUrl, this._options);\n\n // Drop confidential headers when redirecting to a less secure protocol\n // or to a different domain that is not a superdomain\n if (redirectUrl.protocol !== currentUrlParts.protocol &&\n redirectUrl.protocol !== \"https:\" ||\n redirectUrl.host !== currentHost &&\n !isSubdomain(redirectUrl.host, currentHost)) {\n removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers);\n }\n\n // Evaluate the beforeRedirect callback\n if (isFunction(beforeRedirect)) {\n var responseDetails = {\n headers: response.headers,\n statusCode: statusCode,\n };\n var requestDetails = {\n url: currentUrl,\n method: method,\n headers: requestHeaders,\n };\n beforeRedirect(this._options, responseDetails, requestDetails);\n this._sanitizeOptions(this._options);\n }\n\n // Perform the redirected request\n this._performRequest();\n};\n\n// Wraps the key/value object of protocols with redirect functionality\nfunction wrap(protocols) {\n // Default settings\n var exports = {\n maxRedirects: 21,\n maxBodyLength: 10 * 1024 * 1024,\n };\n\n // Wrap each protocol\n var nativeProtocols = {};\n Object.keys(protocols).forEach(function (scheme) {\n var protocol = scheme + \":\";\n var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);\n\n // Executes a request, following redirects\n function request(input, options, callback) {\n // Parse parameters, ensuring that input is an object\n if (isURL(input)) {\n input = spreadUrlObject(input);\n }\n else if (isString(input)) {\n input = spreadUrlObject(parseUrl(input));\n }\n else {\n callback = options;\n options = validateUrl(input);\n input = { protocol: protocol };\n }\n if (isFunction(options)) {\n callback = options;\n options = null;\n }\n\n // Set defaults\n options = Object.assign({\n maxRedirects: exports.maxRedirects,\n maxBodyLength: exports.maxBodyLength,\n }, input, options);\n options.nativeProtocols = nativeProtocols;\n if (!isString(options.host) && !isString(options.hostname)) {\n options.hostname = \"::1\";\n }\n\n assert.equal(options.protocol, protocol, \"protocol mismatch\");\n debug(\"options\", options);\n return new RedirectableRequest(options, callback);\n }\n\n // Executes a GET request, following redirects\n function get(input, options, callback) {\n var wrappedRequest = wrappedProtocol.request(input, options, callback);\n wrappedRequest.end();\n return wrappedRequest;\n }\n\n // Expose the properties on the wrapped protocol\n Object.defineProperties(wrappedProtocol, {\n request: { value: request, configurable: true, enumerable: true, writable: true },\n get: { value: get, configurable: true, enumerable: true, writable: true },\n });\n });\n return exports;\n}\n\nfunction noop() { /* empty */ }\n\nfunction parseUrl(input) {\n var parsed;\n // istanbul ignore else\n if (useNativeURL) {\n parsed = new URL(input);\n }\n else {\n // Ensure the URL is valid and absolute\n parsed = validateUrl(url.parse(input));\n if (!isString(parsed.protocol)) {\n throw new InvalidUrlError({ input });\n }\n }\n return parsed;\n}\n\nfunction resolveUrl(relative, base) {\n // istanbul ignore next\n return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative));\n}\n\nfunction validateUrl(input) {\n if (/^\\[/.test(input.hostname) && !/^\\[[:0-9a-f]+\\]$/i.test(input.hostname)) {\n throw new InvalidUrlError({ input: input.href || input });\n }\n if (/^\\[/.test(input.host) && !/^\\[[:0-9a-f]+\\](:\\d+)?$/i.test(input.host)) {\n throw new InvalidUrlError({ input: input.href || input });\n }\n return input;\n}\n\nfunction spreadUrlObject(urlObject, target) {\n var spread = target || {};\n for (var key of preservedUrlFields) {\n spread[key] = urlObject[key];\n }\n\n // Fix IPv6 hostname\n if (spread.hostname.startsWith(\"[\")) {\n spread.hostname = spread.hostname.slice(1, -1);\n }\n // Ensure port is a number\n if (spread.port !== \"\") {\n spread.port = Number(spread.port);\n }\n // Concatenate path\n spread.path = spread.search ? spread.pathname + spread.search : spread.pathname;\n\n return spread;\n}\n\nfunction removeMatchingHeaders(regex, headers) {\n var lastValue;\n for (var header in headers) {\n if (regex.test(header)) {\n lastValue = headers[header];\n delete headers[header];\n }\n }\n return (lastValue === null || typeof lastValue === \"undefined\") ?\n undefined : String(lastValue).trim();\n}\n\nfunction createErrorType(code, message, baseClass) {\n // Create constructor\n function CustomError(properties) {\n // istanbul ignore else\n if (isFunction(Error.captureStackTrace)) {\n Error.captureStackTrace(this, this.constructor);\n }\n Object.assign(this, properties || {});\n this.code = code;\n this.message = this.cause ? message + \": \" + this.cause.message : message;\n }\n\n // Attach constructor and set default properties\n CustomError.prototype = new (baseClass || Error)();\n Object.defineProperties(CustomError.prototype, {\n constructor: {\n value: CustomError,\n enumerable: false,\n },\n name: {\n value: \"Error [\" + code + \"]\",\n enumerable: false,\n },\n });\n return CustomError;\n}\n\nfunction destroyRequest(request, error) {\n for (var event of events) {\n request.removeListener(event, eventHandlers[event]);\n }\n request.on(\"error\", noop);\n request.destroy(error);\n}\n\nfunction isSubdomain(subdomain, domain) {\n assert(isString(subdomain) && isString(domain));\n var dot = subdomain.length - domain.length - 1;\n return dot > 0 && subdomain[dot] === \".\" && subdomain.endsWith(domain);\n}\n\nfunction isString(value) {\n return typeof value === \"string\" || value instanceof String;\n}\n\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\nfunction isBuffer(value) {\n return typeof value === \"object\" && (\"length\" in value);\n}\n\nfunction isURL(value) {\n return URL && value instanceof URL;\n}\n\n// Exports\nmodule.exports = wrap({ http: http, https: https });\nmodule.exports.wrap = wrap;\n", "{\n \"name\": \"axios\",\n \"version\": \"0.21.4\",\n \"description\": \"Promise based HTTP client for the browser and node.js\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"grunt test\",\n \"start\": \"node ./sandbox/server.js\",\n \"build\": \"NODE_ENV=production grunt build\",\n \"preversion\": \"npm test\",\n \"version\": \"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json\",\n \"postversion\": \"git push && git push --tags\",\n \"examples\": \"node ./examples/server.js\",\n \"coveralls\": \"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js\",\n \"fix\": \"eslint --fix lib/**/*.js\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/axios/axios.git\"\n },\n \"keywords\": [\n \"xhr\",\n \"http\",\n \"ajax\",\n \"promise\",\n \"node\"\n ],\n \"author\": \"Matt Zabriskie\",\n \"license\": \"MIT\",\n \"bugs\": {\n \"url\": \"https://github.com/axios/axios/issues\"\n },\n \"homepage\": \"https://axios-http.com\",\n \"devDependencies\": {\n \"coveralls\": \"^3.0.0\",\n \"es6-promise\": \"^4.2.4\",\n \"grunt\": \"^1.3.0\",\n \"grunt-banner\": \"^0.6.0\",\n \"grunt-cli\": \"^1.2.0\",\n \"grunt-contrib-clean\": \"^1.1.0\",\n \"grunt-contrib-watch\": \"^1.0.0\",\n \"grunt-eslint\": \"^23.0.0\",\n \"grunt-karma\": \"^4.0.0\",\n \"grunt-mocha-test\": \"^0.13.3\",\n \"grunt-ts\": \"^6.0.0-beta.19\",\n \"grunt-webpack\": \"^4.0.2\",\n \"istanbul-instrumenter-loader\": \"^1.0.0\",\n \"jasmine-core\": \"^2.4.1\",\n \"karma\": \"^6.3.2\",\n \"karma-chrome-launcher\": \"^3.1.0\",\n \"karma-firefox-launcher\": \"^2.1.0\",\n \"karma-jasmine\": \"^1.1.1\",\n \"karma-jasmine-ajax\": \"^0.1.13\",\n \"karma-safari-launcher\": \"^1.0.0\",\n \"karma-sauce-launcher\": \"^4.3.6\",\n \"karma-sinon\": \"^1.0.5\",\n \"karma-sourcemap-loader\": \"^0.3.8\",\n \"karma-webpack\": \"^4.0.2\",\n \"load-grunt-tasks\": \"^3.5.2\",\n \"minimist\": \"^1.2.0\",\n \"mocha\": \"^8.2.1\",\n \"sinon\": \"^4.5.0\",\n \"terser-webpack-plugin\": \"^4.2.3\",\n \"typescript\": \"^4.0.5\",\n \"url-search-params\": \"^0.10.0\",\n \"webpack\": \"^4.44.2\",\n \"webpack-dev-server\": \"^3.11.0\"\n },\n \"browser\": {\n \"./lib/adapters/http.js\": \"./lib/adapters/xhr.js\"\n },\n \"jsdelivr\": \"dist/axios.min.js\",\n \"unpkg\": \"dist/axios.min.js\",\n \"typings\": \"./index.d.ts\",\n \"dependencies\": {\n \"follow-redirects\": \"^1.14.0\"\n },\n \"bundlesize\": [\n {\n \"path\": \"./dist/axios.min.js\",\n \"threshold\": \"5kB\"\n }\n ]\n}\n", "'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildFullPath = require('../core/buildFullPath');\nvar buildURL = require('./../helpers/buildURL');\nvar http = require('http');\nvar https = require('https');\nvar httpFollow = require('follow-redirects').http;\nvar httpsFollow = require('follow-redirects').https;\nvar url = require('url');\nvar zlib = require('zlib');\nvar pkg = require('./../../package.json');\nvar createError = require('../core/createError');\nvar enhanceError = require('../core/enhanceError');\n\nvar isHttps = /https:?/;\n\n/**\n *\n * @param {http.ClientRequestArgs} options\n * @param {AxiosProxyConfig} proxy\n * @param {string} location\n */\nfunction setProxy(options, proxy, location) {\n options.hostname = proxy.host;\n options.host = proxy.host;\n options.port = proxy.port;\n options.path = location;\n\n // Basic proxy authorization\n if (proxy.auth) {\n var base64 = Buffer.from(proxy.auth.username + ':' + proxy.auth.password, 'utf8').toString('base64');\n options.headers['Proxy-Authorization'] = 'Basic ' + base64;\n }\n\n // If a proxy is used, any redirects must also pass through the proxy\n options.beforeRedirect = function beforeRedirect(redirection) {\n redirection.headers.host = redirection.host;\n setProxy(redirection, proxy, redirection.href);\n };\n}\n\n/*eslint consistent-return:0*/\nmodule.exports = function httpAdapter(config) {\n return new Promise(function dispatchHttpRequest(resolvePromise, rejectPromise) {\n var resolve = function resolve(value) {\n resolvePromise(value);\n };\n var reject = function reject(value) {\n rejectPromise(value);\n };\n var data = config.data;\n var headers = config.headers;\n\n // Set User-Agent (required by some servers)\n // See https://github.com/axios/axios/issues/69\n if ('User-Agent' in headers || 'user-agent' in headers) {\n // User-Agent is specified; handle case where no UA header is desired\n if (!headers['User-Agent'] && !headers['user-agent']) {\n delete headers['User-Agent'];\n delete headers['user-agent'];\n }\n // Otherwise, use specified value\n } else {\n // Only set header if it hasn't been set in config\n headers['User-Agent'] = 'axios/' + pkg.version;\n }\n\n if (data && !utils.isStream(data)) {\n if (Buffer.isBuffer(data)) {\n // Nothing to do...\n } else if (utils.isArrayBuffer(data)) {\n data = Buffer.from(new Uint8Array(data));\n } else if (utils.isString(data)) {\n data = Buffer.from(data, 'utf-8');\n } else {\n return reject(createError(\n 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',\n config\n ));\n }\n\n // Add Content-Length header if data exists\n headers['Content-Length'] = data.length;\n }\n\n // HTTP basic authentication\n var auth = undefined;\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n auth = username + ':' + password;\n }\n\n // Parse url\n var fullPath = buildFullPath(config.baseURL, config.url);\n var parsed = url.parse(fullPath);\n var protocol = parsed.protocol || 'http:';\n\n if (!auth && parsed.auth) {\n var urlAuth = parsed.auth.split(':');\n var urlUsername = urlAuth[0] || '';\n var urlPassword = urlAuth[1] || '';\n auth = urlUsername + ':' + urlPassword;\n }\n\n if (auth) {\n delete headers.Authorization;\n }\n\n var isHttpsRequest = isHttps.test(protocol);\n var agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;\n\n var options = {\n path: buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\\?/, ''),\n method: config.method.toUpperCase(),\n headers: headers,\n agent: agent,\n agents: { http: config.httpAgent, https: config.httpsAgent },\n auth: auth\n };\n\n if (config.socketPath) {\n options.socketPath = config.socketPath;\n } else {\n options.hostname = parsed.hostname;\n options.port = parsed.port;\n }\n\n var proxy = config.proxy;\n if (!proxy && proxy !== false) {\n var proxyEnv = protocol.slice(0, -1) + '_proxy';\n var proxyUrl = process.env[proxyEnv] || process.env[proxyEnv.toUpperCase()];\n if (proxyUrl) {\n var parsedProxyUrl = url.parse(proxyUrl);\n var noProxyEnv = process.env.no_proxy || process.env.NO_PROXY;\n var shouldProxy = true;\n\n if (noProxyEnv) {\n var noProxy = noProxyEnv.split(',').map(function trim(s) {\n return s.trim();\n });\n\n shouldProxy = !noProxy.some(function proxyMatch(proxyElement) {\n if (!proxyElement) {\n return false;\n }\n if (proxyElement === '*') {\n return true;\n }\n if (proxyElement[0] === '.' &&\n parsed.hostname.substr(parsed.hostname.length - proxyElement.length) === proxyElement) {\n return true;\n }\n\n return parsed.hostname === proxyElement;\n });\n }\n\n if (shouldProxy) {\n proxy = {\n host: parsedProxyUrl.hostname,\n port: parsedProxyUrl.port,\n protocol: parsedProxyUrl.protocol\n };\n\n if (parsedProxyUrl.auth) {\n var proxyUrlAuth = parsedProxyUrl.auth.split(':');\n proxy.auth = {\n username: proxyUrlAuth[0],\n password: proxyUrlAuth[1]\n };\n }\n }\n }\n }\n\n if (proxy) {\n options.headers.host = parsed.hostname + (parsed.port ? ':' + parsed.port : '');\n setProxy(options, proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path);\n }\n\n var transport;\n var isHttpsProxy = isHttpsRequest && (proxy ? isHttps.test(proxy.protocol) : true);\n if (config.transport) {\n transport = config.transport;\n } else if (config.maxRedirects === 0) {\n transport = isHttpsProxy ? https : http;\n } else {\n if (config.maxRedirects) {\n options.maxRedirects = config.maxRedirects;\n }\n transport = isHttpsProxy ? httpsFollow : httpFollow;\n }\n\n if (config.maxBodyLength > -1) {\n options.maxBodyLength = config.maxBodyLength;\n }\n\n // Create the request\n var req = transport.request(options, function handleResponse(res) {\n if (req.aborted) return;\n\n // uncompress the response body transparently if required\n var stream = res;\n\n // return the last request in case of redirects\n var lastRequest = res.req || req;\n\n\n // if no content, is HEAD request or decompress disabled we should not decompress\n if (res.statusCode !== 204 && lastRequest.method !== 'HEAD' && config.decompress !== false) {\n switch (res.headers['content-encoding']) {\n /*eslint default-case:0*/\n case 'gzip':\n case 'compress':\n case 'deflate':\n // add the unzipper to the body stream processing pipeline\n stream = stream.pipe(zlib.createUnzip());\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n }\n }\n\n var response = {\n status: res.statusCode,\n statusText: res.statusMessage,\n headers: res.headers,\n config: config,\n request: lastRequest\n };\n\n if (config.responseType === 'stream') {\n response.data = stream;\n settle(resolve, reject, response);\n } else {\n var responseBuffer = [];\n var totalResponseBytes = 0;\n stream.on('data', function handleStreamData(chunk) {\n responseBuffer.push(chunk);\n totalResponseBytes += chunk.length;\n\n // make sure the content length is not over the maxContentLength if specified\n if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {\n stream.destroy();\n reject(createError('maxContentLength size of ' + config.maxContentLength + ' exceeded',\n config, null, lastRequest));\n }\n });\n\n stream.on('error', function handleStreamError(err) {\n if (req.aborted) return;\n reject(enhanceError(err, config, null, lastRequest));\n });\n\n stream.on('end', function handleStreamEnd() {\n var responseData = Buffer.concat(responseBuffer);\n if (config.responseType !== 'arraybuffer') {\n responseData = responseData.toString(config.responseEncoding);\n if (!config.responseEncoding || config.responseEncoding === 'utf8') {\n responseData = utils.stripBOM(responseData);\n }\n }\n\n response.data = responseData;\n settle(resolve, reject, response);\n });\n }\n });\n\n // Handle errors\n req.on('error', function handleRequestError(err) {\n if (req.aborted && err.code !== 'ERR_FR_TOO_MANY_REDIRECTS') return;\n reject(enhanceError(err, config, null, req));\n });\n\n // Handle request timeout\n if (config.timeout) {\n // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types.\n var timeout = parseInt(config.timeout, 10);\n\n if (isNaN(timeout)) {\n reject(createError(\n 'error trying to parse `config.timeout` to int',\n config,\n 'ERR_PARSE_TIMEOUT',\n req\n ));\n\n return;\n }\n\n // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.\n // And timer callback will be fired, and abort() will be invoked before connection, then get \"socket hang up\" and code ECONNRESET.\n // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.\n // And then these socket which be hang up will devoring CPU little by little.\n // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.\n req.setTimeout(timeout, function handleRequestTimeout() {\n req.abort();\n reject(createError(\n 'timeout of ' + timeout + 'ms exceeded',\n config,\n config.transitional && config.transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n req\n ));\n });\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (req.aborted) return;\n\n req.abort();\n reject(cancel);\n });\n }\n\n // Send the request\n if (utils.isStream(data)) {\n data.on('error', function handleStreamError(err) {\n reject(enhanceError(err, config, null, req));\n }).pipe(req);\n } else {\n req.end(data);\n }\n });\n};\n", null, null, null, null, null, "'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n", "'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n", "'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n", "'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n", "'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n", "'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(\n timeoutErrorMessage,\n config,\n config.transitional && config.transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n", "'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\nvar enhanceError = require('./core/enhanceError');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n },\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw enhanceError(e, this, 'E_JSON_PARSE');\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n", "'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('./../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n", "'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n", "'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n", "'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];\n var defaultToConfig2Keys = [\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',\n 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'\n ];\n var directMergeKeys = ['validateStatus'];\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n }\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n utils.forEach(directMergeKeys, function merge(prop) {\n if (prop in config2) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys)\n .concat(directMergeKeys);\n\n var otherKeys = Object\n .keys(config1)\n .concat(Object.keys(config2))\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, mergeDeepProperties);\n\n return config;\n};\n", "'use strict';\n\nvar pkg = require('./../../package.json');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\nvar currentVerArr = pkg.version.split('.');\n\n/**\n * Compare package versions\n * @param {string} version\n * @param {string?} thanVersion\n * @returns {boolean}\n */\nfunction isOlderVersion(version, thanVersion) {\n var pkgVersionArr = thanVersion ? thanVersion.split('.') : currentVerArr;\n var destVer = version.split('.');\n for (var i = 0; i < 3; i++) {\n if (pkgVersionArr[i] > destVer[i]) {\n return true;\n } else if (pkgVersionArr[i] < destVer[i]) {\n return false;\n }\n }\n return false;\n}\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator\n * @param {string?} version\n * @param {string} message\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n var isDeprecated = version && isOlderVersion(version);\n\n function formatMessage(opt, desc) {\n return '[Axios v' + pkg.version + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new Error(formatMessage(opt, ' has been removed in ' + version));\n }\n\n if (isDeprecated && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new TypeError('option ' + opt + ' must be ' + result);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw Error('Unknown option ' + opt);\n }\n }\n}\n\nmodule.exports = {\n isOlderVersion: isOlderVersion,\n assertOptions: assertOptions,\n validators: validators\n};\n", "'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean, '1.0.0'),\n forcedJSONParsing: validators.transitional(validators.boolean, '1.0.0'),\n clarifyTimeoutError: validators.transitional(validators.boolean, '1.0.0')\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n", "'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n", "'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n", "'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n", "'use strict';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return (typeof payload === 'object') && (payload.isAxiosError === true);\n};\n", "'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n", "module.exports = require('./lib/axios');", null, null, null, "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=types.js.map", null, "#!/usr/bin/env node\n\n/**\n * EvalForge Evaluator Entry Point\n *\n * This module runs evaluations on a remote Dev Machine.\n * It fetches evaluation data from the server, runs scenarios,\n * and reports results (including detailed error information).\n */\n\n// CRITICAL: Log immediately at module load time to catch import failures\nconsole.error(\n '[EVALUATOR-BOOT] Module loading started',\n new Date().toISOString()\n);\n\nimport { EvalStatus, type LiveTraceEvent } from '@wix/evalforge-types';\nimport { loadConfig, type EvaluatorConfig } from './config.js';\nimport { createApiClient, type ApiClient } from './api-client.js';\nimport { fetchEvaluationData } from './fetch-evaluation-data.js';\nimport { runScenario } from './run-scenario/index.js';\nimport { runEvaluationLoop } from './evaluation-loop.js';\nimport {\n formatError,\n formatErrorForJobError,\n ExecutionPhase\n} from './error-reporter.js';\n// Diagnostics disabled - was causing Invalid Date entries in UI\n// import { runDiagnostics } from './diagnostics.js';\n\nconsole.error('[EVALUATOR-BOOT] All static imports successful');\n\n/**\n * State that persists across the evaluation for error reporting.\n * This allows us to report errors even when config/api are not yet initialized.\n */\ninterface EvaluationState {\n config: EvaluatorConfig | null;\n api: ApiClient | null;\n currentPhase: string;\n currentContext: Record<string, unknown>;\n}\n\n/**\n * Run the evaluation with comprehensive error tracking.\n *\n * @param projectId - The project ID\n * @param evalRunId - The eval run ID\n */\nasync function runEvaluation(\n projectId: string,\n evalRunId: string\n): Promise<void> {\n // Initialize state for error tracking\n const state: EvaluationState = {\n config: null,\n api: null,\n currentPhase: ExecutionPhase.CONFIG,\n currentContext: { projectId, evalRunId }\n };\n\n console.error(\n '[DEBUG-H1] runEvaluation entry',\n JSON.stringify({ projectId, evalRunId, timestamp: Date.now() })\n );\n\n // ============================================\n // PHASE 1: Load Configuration\n // ============================================\n state.currentPhase = ExecutionPhase.CONFIG;\n state.currentContext = { projectId, evalRunId };\n\n let config: EvaluatorConfig;\n try {\n config = loadConfig();\n state.config = config;\n console.error(\n '[DEBUG-H1] loadConfig SUCCESS',\n JSON.stringify({\n serverUrl: config.serverUrl,\n apiPrefix: config.apiPrefix || '(none)',\n aiGatewayUrl: config.aiGatewayUrl,\n hasHeaders: Object.keys(config.aiGatewayHeaders).length > 0,\n timestamp: Date.now()\n })\n );\n } catch (configErr) {\n console.error(\n '[DEBUG-H1] loadConfig FAILED',\n JSON.stringify({\n error:\n configErr instanceof Error ? configErr.message : String(configErr),\n stack: configErr instanceof Error ? configErr.stack : undefined,\n timestamp: Date.now()\n })\n );\n // Can't report to server without config, but error will be caught by main handler\n throw new Error(\n `[${ExecutionPhase.CONFIG}] ${configErr instanceof Error ? configErr.message : String(configErr)}`\n );\n }\n\n console.log('[Evaluator] Config loaded', {\n serverUrl: config.serverUrl,\n aiGatewayUrl: config.aiGatewayUrl,\n evaluationsDir: config.evaluationsDir,\n hasAiGatewayHeaders: Object.keys(config.aiGatewayHeaders).length > 0,\n hasRouteHeader: !!config.routeHeader\n });\n\n // ============================================\n // PHASE 2: Create API Client\n // ============================================\n state.currentPhase = ExecutionPhase.API_CLIENT;\n\n let api: ApiClient;\n try {\n api = createApiClient(config.serverUrl, {\n apiPrefix: config.apiPrefix,\n routeHeader: config.routeHeader,\n authToken: config.authToken,\n grpcAuthToken: config.grpcAuthToken\n });\n state.api = api;\n } catch (apiErr) {\n throw new Error(\n `[${ExecutionPhase.API_CLIENT}] Failed to create API client: ${apiErr instanceof Error ? apiErr.message : String(apiErr)}`\n );\n }\n\n // ============================================\n // PHASE 3: Fetch Evaluation Data\n // ============================================\n state.currentPhase = ExecutionPhase.FETCH_EVAL_RUN;\n state.currentContext = { projectId, evalRunId, serverUrl: config.serverUrl };\n\n console.error(\n '[DEBUG-H2] fetchEvaluationData START',\n JSON.stringify({ serverUrl: config.serverUrl, timestamp: Date.now() })\n );\n\n let evalData;\n try {\n evalData = await fetchEvaluationData(api, projectId, evalRunId);\n console.error(\n '[DEBUG-H2] fetchEvaluationData SUCCESS',\n JSON.stringify({\n scenarioItemCount: evalData.scenarioItems.length,\n scenarios: evalData.scenarioItems.map((s) => s.scenario.name),\n skillsCount: evalData.skills.length,\n hasAgent: !!evalData.agent,\n timestamp: Date.now()\n })\n );\n } catch (fetchErr) {\n const errorMsg =\n fetchErr instanceof Error ? fetchErr.message : String(fetchErr);\n console.error(\n '[DEBUG-H2] fetchEvaluationData FAILED',\n JSON.stringify({\n error: errorMsg,\n stack: fetchErr instanceof Error ? fetchErr.stack : undefined,\n timestamp: Date.now()\n })\n );\n throw new Error(\n `[${ExecutionPhase.FETCH_EVAL_RUN}] Failed to fetch evaluation data: ${errorMsg}`\n );\n }\n\n const { agent, skills, scenarioItems } = evalData;\n\n // Remote jobs (TRACE_PUSH_URL set by the backend job runner) push trace\n // events to the backend via the gRPC PushTraceEvent RPC; local runs emit to\n // stdout only, which the backend captures directly. Fire-and-forget: a\n // failed push must never break the evaluation.\n const pushEvent = config.tracePushUrl\n ? (event: LiveTraceEvent): void => {\n api.pushTraceEvent(projectId, evalRunId, event).catch((err) => {\n console.error(\n '[Trace Push] Failed to push trace event:',\n err instanceof Error ? err.message : String(err)\n );\n });\n }\n : undefined;\n\n // ============================================\n // PHASE 4: Validation\n // ============================================\n state.currentPhase = ExecutionPhase.VALIDATION;\n state.currentContext = {\n projectId,\n evalRunId,\n scenarioCount: scenarioItems.length,\n skillCount: skills.length,\n hasAgent: !!agent,\n agentId: evalData.evalRun.agentId,\n presetId: evalData.evalRun.presetId,\n capabilityIds: evalData.evalRun.capabilityIds\n };\n\n if (scenarioItems.length > 0 && !agent) {\n throw new Error(\n `[${ExecutionPhase.VALIDATION}] Eval run has no agent: set agentId for evaluation runs. ` +\n `(agentId: ${evalData.evalRun.agentId || 'not set'})`\n );\n }\n\n // ============================================\n // PHASE 5: Execute Scenarios\n // ============================================\n // Note: Wix auth file (~/.wix/auth/api-key.json) is written by the backend\n // before the evaluator starts, so CLI/MCP tools are already authenticated.\n const skillNames = evalData.skills.map((s) => s.name).join(', ');\n\n const {\n completedExecutions,\n totalExecutions,\n erroredExecutions,\n firstErrorMessage\n } = await runEvaluationLoop(scenarioItems, evalData, {\n runScenario: (scenario, template, resolvedAssertions) => {\n state.currentPhase = ExecutionPhase.EXECUTE_SKILL;\n state.currentContext = {\n projectId,\n evalRunId,\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n presetId: evalData.evalRun.presetId,\n presetName: evalData.presetName,\n agentId: agent?.id,\n agentName: agent?.name\n };\n return runScenario(\n config,\n evalRunId,\n scenario,\n evalData,\n template,\n resolvedAssertions,\n pushEvent\n );\n },\n addResult: async (result) => {\n state.currentPhase = ExecutionPhase.ADD_RESULT;\n state.currentContext = {\n ...state.currentContext,\n resultId: result.id\n };\n await api.addResult(projectId, evalRunId, result);\n },\n onProgress: (completed, total, iterLabel) => {\n console.log(\n '[Evaluator] Running scenario with preset:',\n evalData.presetName,\n skillNames ? `(${skillNames})` : '',\n agent ? `with agent: ${agent.name}` : '',\n `(${completed}/${total})${iterLabel}`\n );\n }\n });\n\n // ============================================\n // PHASE 6: Update Status to Completed\n // ============================================\n state.currentPhase = ExecutionPhase.UPDATE_STATUS;\n state.currentContext = {\n projectId,\n evalRunId,\n completedExecutions,\n totalExecutions\n };\n\n const allFailed =\n totalExecutions > 0 && erroredExecutions === totalExecutions;\n const finalStatus = allFailed ? EvalStatus.FAILED : EvalStatus.COMPLETED;\n\n // When every execution errored we mark the run as FAILED. Carry a\n // representative error string and an explicit `FAILED` jobStatus so the\n // eval_runs row tells you what happened without having to drill into\n // `data.results[0].outputText`. Truncated so a giant stack trace doesn't\n // bloat the row's JSON column.\n const jobErrorOnAllFailed = allFailed\n ? truncateForJobError(\n firstErrorMessage ??\n `All ${totalExecutions} executions errored without an error message`\n )\n : undefined;\n\n try {\n await api.updateEvalRun(projectId, evalRunId, {\n status: finalStatus,\n completedAt: new Date().toISOString(),\n ...(allFailed\n ? { jobError: jobErrorOnAllFailed, jobStatus: 'FAILED' as const }\n : {})\n });\n } catch (updateErr) {\n throw new Error(\n `[${ExecutionPhase.UPDATE_STATUS}] Failed to update eval run status to ${finalStatus}: ${updateErr instanceof Error ? updateErr.message : String(updateErr)}`\n );\n }\n}\n\nconst JOB_ERROR_MAX_LENGTH = 1000;\n\nfunction truncateForJobError(message: string): string {\n if (message.length <= JOB_ERROR_MAX_LENGTH) return message;\n return `${message.slice(0, JOB_ERROR_MAX_LENGTH)}\u2026 [truncated]`;\n}\n\n// ============================================\n// Main Entry Point\n// ============================================\nconst projectId = process.argv[2];\nconst evalRunId = process.argv[3];\n\nconsole.error(\n '[EVALUATOR-BOOT] Args parsed',\n JSON.stringify({ projectId, evalRunId })\n);\n\nif (!projectId || !evalRunId) {\n console.error('Usage: evaluator <project-id> <eval-run-id>');\n process.exit(1);\n}\n\nrunEvaluation(projectId, evalRunId)\n .then(() => {\n console.error('[EVALUATOR-BOOT] runEvaluation completed successfully');\n process.exit(0);\n })\n .catch(async (err) => {\n // Extract detailed error information\n const errorDetails = formatError(err, 'main-execution', {\n projectId,\n evalRunId\n });\n const jobError = formatErrorForJobError(errorDetails);\n\n console.error('[EVALUATOR-BOOT] runEvaluation FAILED');\n console.error(\n '[EVALUATOR-BOOT] Error details:',\n JSON.stringify(errorDetails, null, 2)\n );\n\n // Try to update status to FAILED with detailed error info\n try {\n const config = loadConfig();\n const api = createApiClient(config.serverUrl, {\n apiPrefix: config.apiPrefix,\n routeHeader: config.routeHeader,\n authToken: config.authToken,\n grpcAuthToken: config.grpcAuthToken\n });\n await api.updateEvalRun(projectId, evalRunId, {\n status: EvalStatus.FAILED,\n completedAt: new Date().toISOString(),\n jobError,\n jobStatus: 'FAILED'\n });\n console.error(\n '[EVALUATOR-BOOT] Updated eval run status to FAILED with error details'\n );\n } catch (updateErr) {\n console.error(\n '[EVALUATOR-BOOT] Failed to update eval run status:',\n updateErr instanceof Error ? updateErr.message : String(updateErr)\n );\n\n // If config loading failed, try with minimal config from env\n try {\n const serverUrl = process.env.EVAL_SERVER_URL;\n const authToken = process.env.EVAL_AUTH_TOKEN;\n const grpcAuthToken = process.env.EVAL_GRPC_AUTH_TOKEN;\n const routeHeader = process.env.EVAL_ROUTE_HEADER;\n\n if (serverUrl) {\n const api = createApiClient(serverUrl, {\n routeHeader,\n authToken,\n grpcAuthToken\n });\n await api.updateEvalRun(projectId, evalRunId, {\n status: EvalStatus.FAILED,\n completedAt: new Date().toISOString(),\n jobError: `Config load failed, then: ${jobError}`,\n jobStatus: 'FAILED'\n });\n console.error('[EVALUATOR-BOOT] Fallback: Updated status to FAILED');\n }\n } catch (fallbackErr) {\n console.error(\n '[EVALUATOR-BOOT] Fallback also failed:',\n fallbackErr instanceof Error\n ? fallbackErr.message\n : String(fallbackErr)\n );\n }\n }\n\n process.exit(1);\n });\n", "/**\n * Evaluator Configuration\n *\n * Reads configuration from environment variables set by the server\n * when spawning the evaluator process.\n */\n\nexport interface EvaluatorConfig {\n /** Backend server URL for fetching data and reporting results */\n serverUrl: string;\n /** API path prefix (default: empty, set to \"/api/v1\" if needed for production) */\n apiPrefix: string;\n /** AI Gateway base URL for LLM calls */\n aiGatewayUrl: string;\n /** Custom headers for AI Gateway requests (parsed from \"key:value\" lines) */\n aiGatewayHeaders: Record<string, string>;\n /** Directory for storing evaluation working directories */\n evaluationsDir?: string;\n /**\n * Legacy REST URL for pushing trace events (set by the backend job runner\n * for remote jobs). Its presence enables remote trace push; the push itself\n * now goes through the gRPC `PushTraceEvent` RPC, so the URL value is only\n * used by the (disabled) diagnostics module.\n */\n tracePushUrl?: string;\n /**\n * Optional x-wix-route header value for deploy preview routing.\n * When set, this header is included in all API requests to route\n * them to the correct deploy preview instance.\n */\n routeHeader?: string;\n /**\n * Optional Bearer token for authenticating with public endpoints.\n * When set, this token is included as Authorization header in API requests.\n */\n authToken?: string;\n /**\n * Optional S2S-signed token for authenticating gRPC/ambassador calls.\n * When set, it is forwarded via the Wix HttpClient `getAppToken` hook. When\n * absent (e.g., local development), gRPC calls go out unauthenticated.\n */\n grpcAuthToken?: string;\n}\n\n/**\n * Load evaluator configuration from environment variables.\n *\n * @throws Error if required environment variables are missing\n */\nexport function loadConfig(): EvaluatorConfig {\n const serverUrl = process.env.EVAL_SERVER_URL;\n // API prefix: set to \"/api/v1\" if your API gateway requires it, or empty string\n const apiPrefix = process.env.EVAL_API_PREFIX || '';\n const aiGatewayUrl = process.env.AI_GATEWAY_URL;\n const aiGatewayHeadersRaw = process.env.AI_GATEWAY_HEADERS;\n const evaluationsDir = process.env.EVALUATIONS_DIR;\n\n if (!serverUrl) {\n throw new Error('EVAL_SERVER_URL environment variable is required');\n }\n if (!aiGatewayUrl) {\n throw new Error('AI_GATEWAY_URL environment variable is required');\n }\n\n // Parse headers from newline-separated \"key:value\" format\n const aiGatewayHeaders: Record<string, string> = {};\n if (aiGatewayHeadersRaw) {\n for (const line of aiGatewayHeadersRaw.split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n const colonIndex = trimmed.indexOf(':');\n if (colonIndex === -1) {\n throw new Error(\n `Invalid header format: \"${trimmed}\". Expected \"key:value\" format.`\n );\n }\n const key = trimmed.substring(0, colonIndex).trim();\n const value = trimmed.substring(colonIndex + 1).trim();\n aiGatewayHeaders[key] = value;\n }\n }\n\n // Always disable proxy-level caching so eval runs hit the real LLM\n aiGatewayHeaders['x-wix-ai-gateway-disable-cache'] = 'true';\n\n // Per-request time budget (5 min) sent to the AI gateway proxy. The proxy's\n // own route timeout is 120s and `gpt-5` requests can legitimately take 15-60s\n // upstream; without an explicit budget the request inherits the Wix framework\n // default deadline (~10s), which previously caused premature 503s on slow\n // responses while the proxy kept running and returning 200 (orphaned).\n // `x-time-budget` is the canonical Wix header (read by @wix/wnp-sla and\n // listed as a pass-through header in @wix/wnp-bootstrap-composer).\n // `x-wix-time-budget` is set defensively for parity with the proxy's own\n // outbound calls (`packages/wix-ai-gateway-proxy/.../ai-gateway.ts`).\n aiGatewayHeaders['x-time-budget'] = '300000';\n aiGatewayHeaders['x-wix-time-budget'] = '300000';\n\n // Optional trace push URL for remote job execution\n const tracePushUrl = process.env.TRACE_PUSH_URL;\n\n // Optional route header for deploy preview routing\n const routeHeader = process.env.EVAL_ROUTE_HEADER;\n\n // Optional auth token for public endpoint authentication\n const authToken = process.env.EVAL_AUTH_TOKEN;\n\n // Optional S2S token for ambassador/gRPC calls (set by the backend job runner;\n // absent during local development).\n const grpcAuthToken = process.env.EVAL_GRPC_AUTH_TOKEN;\n\n return {\n serverUrl,\n apiPrefix,\n aiGatewayUrl,\n aiGatewayHeaders,\n evaluationsDir,\n tracePushUrl,\n routeHeader,\n authToken,\n grpcAuthToken\n };\n}\n", "/**\n * API Client for fetching data from the eval server.\n *\n * Migration in progress: backend calls are moving from raw `fetch` against\n * the legacy REST surface to the gRPC ambassador surface via `@wix/http-client`.\n * Migrated: `getEvalRun`, `getScenario`, `getAgent`, `getTemplate`, `getPreset`,\n * `getCapability`, `getCapabilityVersion`, `addResult`, `clearResults`,\n * `pushTraceEvent`. Still on legacy REST: `updateEvalRun` \u2014 the gRPC\n * `UpdateEvalRun` handler only forwards user-editable fields\n * (name/description/comparison*), not the system state transitions\n * (status/completedAt/jobError/jobStatus) the evaluator writes.\n */\n\nimport { HttpClient, type IHttpClient } from '@wix/http-client';\nimport { getTestScenario as getTestScenarioReq } from '@wix/ambassador-evalforge-v1-test-scenario/http';\nimport {\n addEvalRunResult as addEvalRunResultReq,\n clearEvalRunResults as clearEvalRunResultsReq,\n getEvalRun as getEvalRunReq,\n pushTraceEvent as pushTraceEventReq\n} from '@wix/ambassador-evalforge-v1-eval-run/http';\nimport { getAgent as getAgentReq } from '@wix/ambassador-evalforge-v1-agent/http';\nimport { getTemplate as getTemplateReq } from '@wix/ambassador-evalforge-v1-project/http';\nimport { getPreset as getPresetReq } from '@wix/ambassador-evalforge-v1-preset/http';\nimport {\n getCapability as getCapabilityReq,\n getCapabilityVersion as getCapabilityVersionReq,\n getLatestCapabilityVersion as getLatestCapabilityVersionReq\n} from '@wix/ambassador-evalforge-v1-capability/http';\nimport type {\n EvalRun,\n EvalRunResult,\n LiveTraceEvent,\n TestScenario,\n Template,\n Agent,\n Preset,\n CapabilityWithLatestVersion,\n CapabilityVersion\n} from '@wix/evalforge-types';\nimport {\n agentFromProto,\n capabilityFromProto,\n capabilityVersionFromProto,\n evalRunFromProto,\n evalRunResultToProto,\n liveTraceEventToProto,\n presetFromProto,\n templateFromProto,\n testScenarioFromProto\n} from './ambassador-converters.js';\n\nexport interface ApiClient {\n getEvalRun(projectId: string, id: string): Promise<EvalRun>;\n getScenario(projectId: string, id: string): Promise<TestScenario>;\n getAgent(projectId: string, id: string): Promise<Agent>;\n getTemplate(projectId: string, id: string): Promise<Template>;\n getPreset(projectId: string, id: string): Promise<Preset>;\n getCapability(\n projectId: string,\n id: string\n ): Promise<CapabilityWithLatestVersion>;\n getCapabilityVersion(\n projectId: string,\n capabilityId: string,\n versionId: string\n ): Promise<CapabilityVersion>;\n addResult(\n projectId: string,\n evalRunId: string,\n result: EvalRunResult\n ): Promise<void>;\n clearResults(projectId: string, evalRunId: string): Promise<void>;\n pushTraceEvent(\n projectId: string,\n evalRunId: string,\n event: LiveTraceEvent\n ): Promise<void>;\n updateEvalRun(\n projectId: string,\n evalRunId: string,\n update: Partial<EvalRun>\n ): Promise<void>;\n}\n\n/**\n * Options for creating an API client.\n */\nexport interface ApiClientOptions {\n /** API path prefix (default: empty string, set to \"/api/v1\" if needed) */\n apiPrefix?: string;\n /**\n * Optional x-wix-route header value for deploy preview routing.\n * When set, this header is included in all requests.\n */\n routeHeader?: string;\n /**\n * Optional Bearer token for authenticating with the legacy REST public\n * endpoints (`/public/...`). Used by the not-yet-migrated `fetch` paths.\n */\n authToken?: string;\n /**\n * Optional S2S-signed token for authenticating ambassador/gRPC calls.\n * Wired into the underlying `HttpClient` via `getAppToken`. When absent\n * (local dev), `getAppToken` is omitted and requests go out unauthenticated.\n */\n grpcAuthToken?: string;\n /**\n * Override the underlying http client. Tests inject a mock built with\n * `@wix/http-client-testkit` here; production code never sets this and a\n * real `HttpClient` is constructed from `serverUrl` + auth/route options.\n */\n httpClient?: IHttpClient;\n}\n\n/**\n * Resolve the `baseURL` for the ambassador `HttpClient` from the configured\n * `serverUrl`.\n *\n * The ambassador request factories emit fully-qualified gateway paths that\n * already include the `/_api/evalforge-backend` prefix (e.g.\n * `/_api/evalforge-backend/v1/projects/{id}/eval-runs/{id}`). `serverUrl` also\n * carries that prefix \u2014 it is the REST base `putJson` uses for the one\n * remaining legacy write (`updateEvalRun`) \u2014 so using it directly as the\n * HttpClient `baseURL` duplicates the prefix\n * (`.../_api/evalforge-backend/_api/evalforge-backend/v1/...`) and every\n * ambassador call 404s: the run starts but the evaluator can't fetch its data,\n * so the eval fails with no results.\n *\n * Returning the origin only keeps the ambassador-emitted path intact while the\n * REST `updateEvalRun` write keeps using the full `serverUrl`. Origin-only\n * inputs (the local in-cluster `http://host:port`) are returned unchanged.\n *\n * @param serverUrl - Base URL of the server (e.g., \"https://bo.wix.com/_api/evalforge-backend\")\n */\nexport function resolveAmbassadorBaseUrl(serverUrl: string): string {\n try {\n return new URL(serverUrl).origin;\n } catch {\n // serverUrl is absolute in every real environment; fall back to the raw\n // value only for relative test stubs.\n return serverUrl;\n }\n}\n\n/**\n * Create an API client for the eval server.\n *\n * @param serverUrl - Base URL of the server (e.g., \"https://bo.wix.com/_api/evalforge-backend\")\n * @param options - Optional configuration including apiPrefix and routeHeader\n */\nexport function createApiClient(\n serverUrl: string,\n options: ApiClientOptions | string = ''\n): ApiClient {\n // Support legacy signature: createApiClient(serverUrl, apiPrefix)\n const opts: ApiClientOptions =\n typeof options === 'string' ? { apiPrefix: options } : options;\n const apiPrefix = opts.apiPrefix ?? '';\n const routeHeader = opts.routeHeader;\n const authToken = opts.authToken;\n const grpcAuthToken = opts.grpcAuthToken;\n\n // When authToken is provided, use /public prefix for all endpoints\n // This routes requests to token-authenticated public endpoints\n const pathPrefix = authToken ? '/public' : '';\n\n // The HttpClient applies these headers to every request. routeHeader is\n // constant for the lifetime of an eval run, so wiring it in once at\n // construction time is simpler than per-request overrides (which the\n // ambassador HttpClient surface doesn't expose for arbitrary headers).\n const httpClient: IHttpClient =\n opts.httpClient ??\n new HttpClient({\n baseURL: resolveAmbassadorBaseUrl(serverUrl),\n ...(grpcAuthToken ? { getAppToken: () => grpcAuthToken } : {}),\n ...(routeHeader ? { headers: { 'x-wix-route': routeHeader } } : {}),\n disableSquidProxy: true\n });\n\n /**\n * Build headers for legacy REST requests, including auth and route headers.\n * Intentionally kept for the last not-yet-migrated REST write\n * (`updateEvalRun` via `putJson`) \u2014 do not delete as \"unused\" until that\n * call moves to ambassador.\n */\n function buildHeaders(\n additionalHeaders?: Record<string, string>\n ): Record<string, string> {\n const headers: Record<string, string> = { ...additionalHeaders };\n if (authToken) {\n headers['Authorization'] = `Bearer ${authToken}`;\n }\n if (routeHeader) {\n headers['x-wix-route'] = routeHeader;\n }\n return headers;\n }\n\n async function putJson(path: string, body: unknown): Promise<void> {\n const url = `${serverUrl}${apiPrefix}${pathPrefix}${path}`;\n console.error(`[API] PUT ${url}`);\n const response = await fetch(url, {\n method: 'PUT',\n headers: buildHeaders({ 'Content-Type': 'application/json' }),\n body: JSON.stringify(body)\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `API request failed: ${response.status} ${response.statusText} - ${errorText}`\n );\n }\n }\n\n return {\n async getEvalRun(projectId: string, id: string): Promise<EvalRun> {\n const res = await httpClient.request(\n getEvalRunReq({ projectId, evalRunId: id })\n );\n const evalRun = res.data.evalRun;\n if (!evalRun) {\n throw new Error(`Eval run ${id} not found in project ${projectId}`);\n }\n return evalRunFromProto(evalRun);\n },\n\n async getScenario(projectId: string, id: string): Promise<TestScenario> {\n const res = await httpClient.request(\n getTestScenarioReq({ projectId, testScenarioId: id })\n );\n const scenario = res.data.testScenario;\n if (!scenario) {\n throw new Error(\n `Test scenario ${id} not found in project ${projectId}`\n );\n }\n return testScenarioFromProto(scenario);\n },\n\n async getAgent(projectId: string, id: string): Promise<Agent> {\n const res = await httpClient.request(\n getAgentReq({ projectId, agentId: id })\n );\n const agent = res.data.agent;\n if (!agent) {\n throw new Error(`Agent ${id} not found in project ${projectId}`);\n }\n return agentFromProto(agent);\n },\n\n async getTemplate(projectId: string, id: string): Promise<Template> {\n const res = await httpClient.request(\n getTemplateReq({ projectId, templateId: id })\n );\n const template = res.data.template;\n if (!template) {\n throw new Error(`Template ${id} not found in project ${projectId}`);\n }\n return templateFromProto(template);\n },\n\n async getPreset(projectId: string, id: string): Promise<Preset> {\n const res = await httpClient.request(\n getPresetReq({ projectId, presetId: id })\n );\n const preset = res.data.preset;\n if (!preset) {\n throw new Error(`Preset ${id} not found in project ${projectId}`);\n }\n return presetFromProto(preset);\n },\n\n // The legacy REST endpoint enriched the capability with its latest version\n // server-side; ambassador's GetCapability returns the bare entity, so we\n // compose it with GetLatestCapabilityVersion in parallel here.\n async getCapability(\n projectId: string,\n id: string\n ): Promise<CapabilityWithLatestVersion> {\n const [capRes, versionRes] = await Promise.all([\n httpClient.request(getCapabilityReq({ projectId, capabilityId: id })),\n httpClient.request(\n getLatestCapabilityVersionReq({ projectId, capabilityId: id })\n )\n ]);\n const capability = capRes.data.capability;\n if (!capability) {\n throw new Error(`Capability ${id} not found in project ${projectId}`);\n }\n const latestVersion = versionRes.data.capabilityVersion\n ? capabilityVersionFromProto(\n versionRes.data.capabilityVersion,\n projectId\n )\n : undefined;\n return { ...capabilityFromProto(capability), latestVersion };\n },\n\n async getCapabilityVersion(\n projectId: string,\n capabilityId: string,\n versionId: string\n ): Promise<CapabilityVersion> {\n const res = await httpClient.request(\n getCapabilityVersionReq({\n projectId,\n capabilityId,\n capabilityVersionId: versionId\n })\n );\n const version = res.data.capabilityVersion;\n if (!version) {\n throw new Error(\n `Capability version ${versionId} not found for capability ${capabilityId}`\n );\n }\n return capabilityVersionFromProto(version, projectId);\n },\n\n async addResult(\n projectId: string,\n evalRunId: string,\n result: EvalRunResult\n ): Promise<void> {\n await httpClient.request(\n addEvalRunResultReq({\n projectId,\n evalRunId,\n result: evalRunResultToProto(result)\n })\n );\n },\n\n async clearResults(projectId: string, evalRunId: string): Promise<void> {\n await httpClient.request(\n clearEvalRunResultsReq({ projectId, evalRunId })\n );\n },\n\n async pushTraceEvent(\n projectId: string,\n evalRunId: string,\n event: LiveTraceEvent\n ): Promise<void> {\n await httpClient.request(\n pushTraceEventReq({\n projectId,\n evalRunId,\n event: liveTraceEventToProto(event)\n })\n );\n },\n\n updateEvalRun(\n projectId: string,\n evalRunId: string,\n update: Partial<EvalRun>\n ): Promise<void> {\n return putJson(`/projects/${projectId}/eval-runs/${evalRunId}`, update);\n }\n };\n}\n", "type SchemaType = 'Array' | 'Map';\n\nexport function parseLeanSchemaRef(renderedSchemaName: string = ''): {\n schemaName: string;\n schemaType?: SchemaType;\n} {\n const [typeOrName, schemaName] = getSchemaNameAndType(renderedSchemaName);\n\n if (schemaName) {\n return {\n schemaName,\n schemaType: typeOrName as SchemaType,\n };\n }\n\n return {\n schemaName: typeOrName,\n };\n}\n\n// if there is no type, returns only the name\nconst getSchemaNameAndType = (leanSchema: string): string[] =>\n leanSchema.split('#');\n", "export function findByPath(\n obj: object,\n path: string,\n defaultValue: string,\n suffix: string,\n) {\n let result: any = obj;\n for (const field of path.split('.')) {\n if (!result) {\n return defaultValue;\n }\n result = result[field];\n }\n\n return `${result}${suffix}`;\n}\n", "import { findByPath } from './utils.js';\n\nconst USER_DOMAIN = '_';\n\nconst DOMAINS = ['wix.com', 'editorx.com'];\n\nconst WIX_API_DOMAINS = ['42.wixprod.net', 'uw2-edt-1.wixprod.net'];\n\nconst DEV_WIX_CODE_DOMAIN = 'dev.wix-code.com';\n\nconst REGEX_CAPTURE_PROTO_FIELD = /{(.*)}/;\n\nconst REGEX_CAPTURE_DOMAINS = new RegExp(`\\\\.(${DOMAINS.join('|')})$`);\n\nconst REGEX_CAPTURE_API_DOMAINS = new RegExp(\n `\\\\.(${WIX_API_DOMAINS.join('|')})$`,\n);\n\nconst REGEX_CAPTURE_DEV_WIX_CODE_DOMAIN = new RegExp(\n `.*\\\\.${DEV_WIX_CODE_DOMAIN}$`,\n);\n\nexport type ResolveUrlOpts = {\n // resource path as defined in proto file, including all wildcards & co.\n protoPath: string;\n\n // domain as defined on FP to its mappings (might be more than one)\n // www._base_domain_ => [{ srcPath: '/_api/foo', destPath: '/api' }]\n domainToMappings: DomainToMappings;\n\n // actual payload attached to request, needed in order to rersolve path,\n // in case it contains some dynamic parameters\n data?: object;\n\n // request's host\n host: string;\n};\n\nexport function resolveUrl(opts: ResolveUrlOpts) {\n const domain = resolveDomain(opts.host);\n const mappings = resolveMappingsByDomain(domain, opts.domainToMappings);\n const path = injectDataIntoProtoPath(opts.protoPath, opts.data || {});\n\n return resolvePath(path, mappings);\n}\n\nfunction injectDataIntoProtoPath(protoPath: string, data: object) {\n return protoPath\n .split('/')\n .map((path) => maybeProtoPathToData(path, data))\n .join('/');\n}\n\nfunction maybeProtoPathToData(protoPath: string, data: object) {\n const protoRegExpMatch = protoPath.match(REGEX_CAPTURE_PROTO_FIELD) || [];\n\n const field = protoRegExpMatch[1];\n\n if (field) {\n const suffix = protoPath.replace(protoRegExpMatch[0]!, '');\n return findByPath(data, field, protoPath, suffix);\n }\n\n return protoPath;\n}\n\nfunction resolveDomain(host: string) {\n const resolvedHost = fixHostExceptions(host);\n\n return resolvedHost\n .replace(REGEX_CAPTURE_DOMAINS, '._base_domain_')\n .replace(REGEX_CAPTURE_API_DOMAINS, '._api_base_domain_')\n .replace(REGEX_CAPTURE_DEV_WIX_CODE_DOMAIN, '*.dev.wix-code.com');\n}\n\n// hosts which standard string replacing doesn't apply to them, will be fixed here.\nfunction fixHostExceptions(host: string) {\n // https://system-kb.wixanswers.com/kb/en/article/editorx-domains-matching-to-wixcom\n return host.replace('create.editorx.com', 'editor.editorx.com');\n}\n\nfunction resolveMappingsByDomain(\n domain: string,\n domainToMappings: DomainToMappings,\n) {\n const mappings = domainToMappings[domain];\n\n if (mappings) {\n return mappings;\n }\n\n const rootDomainMappings = resolveRootDomain(domain, domainToMappings);\n\n if (!rootDomainMappings) {\n const userMappings = domainToMappings[USER_DOMAIN];\n\n if (userMappings) {\n return userMappings;\n }\n if (isBaseDomain(domain)) {\n // fallback <lang>.wix.com sub domains to www.wix.com\n // since all of the languages subdomain are not mapped automatically in FP and we want to support those kind of calls\n // for example: fr.wix.com\n return domainToMappings[wwwBaseDomain];\n }\n }\n\n return rootDomainMappings ?? [];\n}\n\nfunction resolveRootDomain(domain: string, domainToMappings: DomainToMappings) {\n return Object.entries(domainToMappings).find(([entryDomain]) => {\n const [_, ...rooDomainSegments] = domain.split('.');\n return rooDomainSegments.join('.') === entryDomain;\n })?.[1];\n}\nfunction resolvePath(protoPath: string, mappings: Mapping[]) {\n const mapping = mappings?.find((m) => protoPath.startsWith(m.destPath));\n\n if (!mapping) {\n // todo: should we return the path? if no - what should we do in case of testings?\n return protoPath;\n }\n\n return mapping.srcPath + protoPath.slice(mapping.destPath.length);\n}\n\ntype Mapping = {\n srcPath: string;\n destPath: string;\n};\n\ntype DomainToMappings = Record<string, Mapping[]>;\n\nfunction isBaseDomain(domain: string) {\n return !!domain.match(/\\._base_domain_$/);\n}\n\nconst wwwBaseDomain = 'www._base_domain_';\n", "/**\n * base64.ts\n *\n * Licensed under the BSD 3-Clause License.\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * References:\n * http://en.wikipedia.org/wiki/Base64\n *\n * @author Dan Kogai (https://github.com/dankogai)\n */\nconst version = '3.7.8';\n/**\n * @deprecated use lowercase `version`.\n */\nconst VERSION = version;\nconst _hasBuffer = typeof Buffer === 'function';\nconst _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined;\nconst _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;\nconst b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nconst b64chs = Array.prototype.slice.call(b64ch);\nconst b64tab = ((a) => {\n let tab = {};\n a.forEach((c, i) => tab[c] = i);\n return tab;\n})(b64chs);\nconst b64re = /^(?:[A-Za-z\\d+\\/]{4})*?(?:[A-Za-z\\d+\\/]{2}(?:==)?|[A-Za-z\\d+\\/]{3}=?)?$/;\nconst _fromCC = String.fromCharCode.bind(String);\nconst _U8Afrom = typeof Uint8Array.from === 'function'\n ? Uint8Array.from.bind(Uint8Array)\n : (it) => new Uint8Array(Array.prototype.slice.call(it, 0));\nconst _mkUriSafe = (src) => src\n .replace(/=/g, '').replace(/[+\\/]/g, (m0) => m0 == '+' ? '-' : '_');\nconst _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\n/**\n * polyfill version of `btoa`\n */\nconst btoaPolyfill = (bin) => {\n // console.log('polyfilled');\n let u32, c0, c1, c2, asc = '';\n const pad = bin.length % 3;\n for (let i = 0; i < bin.length;) {\n if ((c0 = bin.charCodeAt(i++)) > 255 ||\n (c1 = bin.charCodeAt(i++)) > 255 ||\n (c2 = bin.charCodeAt(i++)) > 255)\n throw new TypeError('invalid character found');\n u32 = (c0 << 16) | (c1 << 8) | c2;\n asc += b64chs[u32 >> 18 & 63]\n + b64chs[u32 >> 12 & 63]\n + b64chs[u32 >> 6 & 63]\n + b64chs[u32 & 63];\n }\n return pad ? asc.slice(0, pad - 3) + \"===\".substring(pad) : asc;\n};\n/**\n * does what `window.btoa` of web browsers do.\n * @param {String} bin binary string\n * @returns {string} Base64-encoded string\n */\nconst _btoa = typeof btoa === 'function' ? (bin) => btoa(bin)\n : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64')\n : btoaPolyfill;\nconst _fromUint8Array = _hasBuffer\n ? (u8a) => Buffer.from(u8a).toString('base64')\n : (u8a) => {\n // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326\n const maxargs = 0x1000;\n let strs = [];\n for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));\n }\n return _btoa(strs.join(''));\n };\n/**\n * converts a Uint8Array to a Base64 string.\n * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 \u00A75\n * @returns {string} Base64 string\n */\nconst fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const utob = (src: string) => unescape(encodeURIComponent(src));\n// reverting good old fationed regexp\nconst cb_utob = (c) => {\n if (c.length < 2) {\n var cc = c.charCodeAt(0);\n return cc < 0x80 ? c\n : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))\n + _fromCC(0x80 | (cc & 0x3f)))\n : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n else {\n var cc = 0x10000\n + (c.charCodeAt(0) - 0xD800) * 0x400\n + (c.charCodeAt(1) - 0xDC00);\n return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))\n + _fromCC(0x80 | ((cc >>> 12) & 0x3f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n};\nconst re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-8 string\n * @returns {string} UTF-16 string\n */\nconst utob = (u) => u.replace(re_utob, cb_utob);\n//\nconst _encode = _hasBuffer\n ? (s) => Buffer.from(s, 'utf8').toString('base64')\n : _TE\n ? (s) => _fromUint8Array(_TE.encode(s))\n : (s) => _btoa(utob(s));\n/**\n * converts a UTF-8-encoded string to a Base64 string.\n * @param {boolean} [urlsafe] if `true` make the result URL-safe\n * @returns {string} Base64 string\n */\nconst encode = (src, urlsafe = false) => urlsafe\n ? _mkUriSafe(_encode(src))\n : _encode(src);\n/**\n * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 \u00A75.\n * @returns {string} Base64 string\n */\nconst encodeURI = (src) => encode(src, true);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const btou = (src: string) => decodeURIComponent(escape(src));\n// reverting good old fationed regexp\nconst re_btou = /[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}/g;\nconst cb_btou = (cccc) => {\n switch (cccc.length) {\n case 4:\n var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n | ((0x3f & cccc.charCodeAt(1)) << 12)\n | ((0x3f & cccc.charCodeAt(2)) << 6)\n | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000;\n return (_fromCC((offset >>> 10) + 0xD800)\n + _fromCC((offset & 0x3FF) + 0xDC00));\n case 3:\n return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12)\n | ((0x3f & cccc.charCodeAt(1)) << 6)\n | (0x3f & cccc.charCodeAt(2)));\n default:\n return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6)\n | (0x3f & cccc.charCodeAt(1)));\n }\n};\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-16 string\n * @returns {string} UTF-8 string\n */\nconst btou = (b) => b.replace(re_btou, cb_btou);\n/**\n * polyfill version of `atob`\n */\nconst atobPolyfill = (asc) => {\n // console.log('polyfilled');\n asc = asc.replace(/\\s+/g, '');\n if (!b64re.test(asc))\n throw new TypeError('malformed base64.');\n asc += '=='.slice(2 - (asc.length & 3));\n let u24, r1, r2;\n let binArray = []; // use array to avoid minor gc in loop\n for (let i = 0; i < asc.length;) {\n u24 = b64tab[asc.charAt(i++)] << 18\n | b64tab[asc.charAt(i++)] << 12\n | (r1 = b64tab[asc.charAt(i++)]) << 6\n | (r2 = b64tab[asc.charAt(i++)]);\n if (r1 === 64) {\n binArray.push(_fromCC(u24 >> 16 & 255));\n }\n else if (r2 === 64) {\n binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255));\n }\n else {\n binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255));\n }\n }\n return binArray.join('');\n};\n/**\n * does what `window.atob` of web browsers do.\n * @param {String} asc Base64-encoded string\n * @returns {string} binary string\n */\nconst _atob = typeof atob === 'function' ? (asc) => atob(_tidyB64(asc))\n : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary')\n : atobPolyfill;\n//\nconst _toUint8Array = _hasBuffer\n ? (a) => _U8Afrom(Buffer.from(a, 'base64'))\n : (a) => _U8Afrom(_atob(a).split('').map(c => c.charCodeAt(0)));\n/**\n * converts a Base64 string to a Uint8Array.\n */\nconst toUint8Array = (a) => _toUint8Array(_unURI(a));\n//\nconst _decode = _hasBuffer\n ? (a) => Buffer.from(a, 'base64').toString('utf8')\n : _TD\n ? (a) => _TD.decode(_toUint8Array(a))\n : (a) => btou(_atob(a));\nconst _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/'));\n/**\n * converts a Base64 string to a UTF-8 string.\n * @param {String} src Base64 string. Both normal and URL-safe are supported\n * @returns {string} UTF-8 string\n */\nconst decode = (src) => _decode(_unURI(src));\n/**\n * check if a value is a valid Base64 string\n * @param {String} src a value to check\n */\nconst isValid = (src) => {\n if (typeof src !== 'string')\n return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n};\n//\nconst _noEnum = (v) => {\n return {\n value: v, enumerable: false, writable: true, configurable: true\n };\n};\n/**\n * extend String.prototype with relevant methods\n */\nconst extendString = function () {\n const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));\n _add('fromBase64', function () { return decode(this); });\n _add('toBase64', function (urlsafe) { return encode(this, urlsafe); });\n _add('toBase64URI', function () { return encode(this, true); });\n _add('toBase64URL', function () { return encode(this, true); });\n _add('toUint8Array', function () { return toUint8Array(this); });\n};\n/**\n * extend Uint8Array.prototype with relevant methods\n */\nconst extendUint8Array = function () {\n const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));\n _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); });\n _add('toBase64URI', function () { return fromUint8Array(this, true); });\n _add('toBase64URL', function () { return fromUint8Array(this, true); });\n};\n/**\n * extend Builtin prototypes with relevant methods\n */\nconst extendBuiltins = () => {\n extendString();\n extendUint8Array();\n};\nconst gBase64 = {\n version: version,\n VERSION: VERSION,\n atob: _atob,\n atobPolyfill: atobPolyfill,\n btoa: _btoa,\n btoaPolyfill: btoaPolyfill,\n fromBase64: decode,\n toBase64: encode,\n encode: encode,\n encodeURI: encodeURI,\n encodeURL: encodeURI,\n utob: utob,\n btou: btou,\n decode: decode,\n isValid: isValid,\n fromUint8Array: fromUint8Array,\n toUint8Array: toUint8Array,\n extendString: extendString,\n extendUint8Array: extendUint8Array,\n extendBuiltins: extendBuiltins\n};\n// makecjs:CUT //\nexport { version };\nexport { VERSION };\nexport { _atob as atob };\nexport { atobPolyfill };\nexport { _btoa as btoa };\nexport { btoaPolyfill };\nexport { decode as fromBase64 };\nexport { encode as toBase64 };\nexport { utob };\nexport { encode };\nexport { encodeURI };\nexport { encodeURI as encodeURL };\nexport { btou };\nexport { decode };\nexport { isValid };\nexport { fromUint8Array };\nexport { toUint8Array };\nexport { extendString };\nexport { extendUint8Array };\nexport { extendBuiltins };\n// and finally,\nexport { gBase64 as Base64 };\n", "import { encode } from 'js-base64';\n\n// Flatten a nested object to params object { field: { text: 'foo' } } => { field.text ='foo' }\nfunction flattenParams(data: object, path = ''): object {\n const params: any = {};\n\n Object.entries(data).forEach(([key, value]) => {\n const isObject =\n value !== null && typeof value === 'object' && !Array.isArray(value);\n const fieldPath = resolvePath(path, key);\n\n if (isObject) {\n const serializedObject = flattenParams(value, fieldPath);\n Object.assign(params, serializedObject);\n } else {\n params[fieldPath] = value;\n }\n });\n\n return params;\n}\n\nfunction resolvePath(path: string, key: string) {\n return `${path}${path ? '.' : ''}${key}`;\n}\n\n/**\n * serializes the params object to URLSearchParams,\n * if isComplexRequest is true and the payload is not serializable as regular URLSearchParams (because of nested fields),\n * it will serialize the payload into the .r query param exclusively\n * @param params\n * @param isComplexRequest\n * @returns\n */\nexport function toURLSearchParams(params: object, isComplexRequest?: boolean) {\n const flatten = flattenParams(params);\n\n // payloads with deep arrays or complex arrays are not serializable as URLSearchParams\n const isPayloadNonSerializableAsUrlSearchParams = Object.entries(\n flatten,\n ).some(\n ([key, value]) =>\n key.includes('.') ||\n (Array.isArray(value) && value.some((v) => typeof v === 'object')),\n );\n const shouldSerializeToRParam =\n isComplexRequest && isPayloadNonSerializableAsUrlSearchParams;\n\n if (shouldSerializeToRParam) {\n return new URLSearchParams({ '.r': encode(JSON.stringify(params), true) });\n } else {\n return Object.entries(flatten).reduce((urlSearchParams, [key, value]) => {\n // inorder to make `foo: [1,2]` turn into `foo=1&foo=2` and not `foo[]=1&foo[]=2`\n const keyParams = Array.isArray(value) ? value : [value];\n\n keyParams.forEach((param: any) => {\n if (\n param === undefined ||\n param === null ||\n (Array.isArray(value) && typeof param === 'object')\n ) {\n return;\n }\n\n urlSearchParams.append(key, param);\n });\n\n return urlSearchParams;\n }, new URLSearchParams());\n }\n}\n", "export enum ConverterType {\n TO_JSON,\n FROM_JSON,\n}\n\nexport type Payload = any;\n\nexport type Converter = {\n transform: (val: any) => any;\n checkRepetable?: (val: any) => boolean;\n};\n\nexport type ConverterSet = {\n types: string[];\n [ConverterType.FROM_JSON]: Converter;\n [ConverterType.TO_JSON]: Converter;\n};\n\nexport type TypeToConverterSet = Record<string, ConverterSet>;\n", "import type {\n RenderedLeanSchemaFields,\n RenderedLeanSchema,\n} from '@wix/metro-public-utils';\nimport { parseLeanSchemaRef } from '../index.js';\nimport { ConverterType, Payload, TypeToConverterSet } from './domain.js';\n\nexport function schemaSerializer(\n rootSchema: RenderedLeanSchemaFields,\n depSchemas: RenderedLeanSchema = {},\n converterSets: TypeToConverterSet,\n) {\n return function serialize(\n json: Payload = {},\n converterType: ConverterType,\n ): Payload {\n return typeof json === 'string' ? json : transformSchema(rootSchema, json);\n\n function transformSchema(\n schema: RenderedLeanSchemaFields,\n payload: any,\n ): Payload {\n const result = {} as Payload;\n if ([null, undefined].includes(payload)) {\n return payload;\n }\n\n Object.entries(payload).forEach(([key, val]) => {\n const renderedSchemaName = schema[key];\n const { schemaName, schemaType } =\n parseLeanSchemaRef(renderedSchemaName);\n\n const isMap = schemaType === 'Map';\n const isRepeatable =\n getConverter(schemaName)?.checkRepetable?.(val) ?? Array.isArray(val);\n\n let parsedValue;\n\n if (isRepeatable) {\n parsedValue = (val as any[]).map((v) => applyField(v, schemaName));\n } else if (isMap) {\n parsedValue = applyFieldOnMap(val, schemaName);\n } else {\n parsedValue = applyField(val, schemaName);\n }\n\n result[key] = parsedValue;\n });\n\n return result;\n }\n\n function applyField(val: unknown, schemaOrSerializer?: string) {\n if (!schemaOrSerializer) {\n return val;\n }\n\n const maybeSchema = depSchemas[schemaOrSerializer];\n const maybeConverter = getConverter(schemaOrSerializer);\n\n if (maybeConverter) {\n return getConverter(schemaOrSerializer).transform(val);\n } else if (maybeSchema) {\n return transformSchema(maybeSchema, val);\n }\n\n throw new Error(\n `${schemaOrSerializer} is neither schema nor serializable type`,\n );\n }\n\n function getConverter(name: string) {\n return converterSets[name]?.[converterType];\n }\n\n function applyFieldOnMap(val: any, sanitizedSchemaOrSerializer: string) {\n return Object.entries(val).reduce<Record<string, any>>(\n (acc, [propertyName, value]) => {\n acc[propertyName] = applyField(value, sanitizedSchemaOrSerializer);\n return acc;\n },\n {},\n );\n }\n };\n}\n", "import { ConverterSet, ConverterType } from '../domain.js';\n\nexport const timestamp: ConverterSet = {\n types: ['google.protobuf.Timestamp'],\n\n [ConverterType.TO_JSON]: {\n transform: (val: Date | string) => {\n if (typeof val === 'string' || !val) {\n return val;\n }\n return val.toISOString();\n },\n },\n\n [ConverterType.FROM_JSON]: {\n transform: (val: string) => (val ? new Date(val) : val),\n },\n};\n", "import { ConverterSet, ConverterType } from '../domain.js';\n\nexport const fieldMask: ConverterSet = {\n types: ['google.protobuf.FieldMask'],\n\n [ConverterType.TO_JSON]: {\n transform: (val: string[]) => val.join(','),\n\n /**\n * This one handles cases where we have a repeated google.protobuf.FieldMask type,\n * so it will look like: [['foo', 'bar'], ['qux']].\n *\n * The problem is that the serializer detects it as an array with actual fields (strings),\n * while in practice it is an array of multiple google.protobuf.FieldMask.\n *\n * We should determine if the items are actual fields (so each item is a string),\n * or arrays of google.protobuf.FieldMask (so each item is array that has items with fields).\n *\n * Another approach could be marking on the schama itseld each field if it's a repeatable or not,\n * it's not a good appraoch, but as long as google.protobuf.FieldMask is our only issue, it's\n * not _that_ bad solution.\n */\n checkRepetable: (val: string[] | string[][]) => {\n return val.some((v: string | string[]) => Array.isArray(v));\n },\n },\n\n [ConverterType.FROM_JSON]: {\n transform: (val: string | { paths: string[] }) => {\n /**\n * Support Scala FW JSON mapping bug, for more details see:\n *\n * https://github.com/wix-private/server-infra/issues/17953\n */\n if (typeof val === 'object') {\n return val.paths;\n }\n\n return val.split(',');\n },\n },\n};\n", "import { ConverterSet, ConverterType } from '../domain.js';\n\nexport const bytes: ConverterSet = {\n types: ['google.protobuf.BytesValue', 'BYTES'],\n\n [ConverterType.TO_JSON]: {\n transform: (val: number[]) => {\n const chars = val.reduce((res, c) => res + String.fromCharCode(c), '');\n\n return btoa(chars);\n },\n },\n\n [ConverterType.FROM_JSON]: {\n transform: (val: string) => {\n return Uint8Array.from(atob(val), (c) => c.charCodeAt(0));\n },\n },\n};\n", "import { ConverterSet, ConverterType } from '../domain.js';\nimport { GoogleProtoDuration } from './types.js';\n\nexport const duration: ConverterSet = {\n types: ['google.protobuf.Duration'],\n\n [ConverterType.TO_JSON]: {\n transform: ({ seconds = '0', nanos = 0 }: GoogleProtoDuration) => {\n let nanosPortion = '';\n\n if (nanos !== 0) {\n nanosPortion = `.${nanos.toString().padStart(9, '0')}`;\n }\n\n return `${seconds}${nanosPortion}s`;\n },\n },\n\n [ConverterType.FROM_JSON]: {\n transform: (val: string): GoogleProtoDuration => {\n const [seconds, nanos] = val.substring(0, val.length - 1).split('.');\n\n return {\n seconds,\n nanos: nanosForString(nanos),\n };\n },\n },\n};\n\nfunction nanosForString(nanos: string) {\n let res = 0;\n\n if (nanos !== undefined) {\n const precision = 3 - nanos.length / 3;\n res = parseInt(nanos, 10) * Math.pow(1000, precision);\n }\n\n return res;\n}\n", "import { ConverterSet, ConverterType } from '../domain.js';\n\nexport const float: ConverterSet = {\n types: [\n 'FLOAT',\n 'DOUBLE',\n 'google.protobuf.FloatValue',\n 'google.protobuf.DoubleValue',\n ],\n\n [ConverterType.TO_JSON]: {\n transform: (val: number) => {\n return isFinite(val) ? val : val.toString();\n },\n },\n\n [ConverterType.FROM_JSON]: {\n transform: (val: string | number) => {\n if (val === 'NaN') {\n return NaN;\n }\n\n if (val === 'Infinity') {\n return Infinity;\n }\n\n if (val === '-Infinity') {\n return -Infinity;\n }\n\n return val;\n },\n },\n};\n", "import { ConverterSet } from '../domain.js';\nimport { timestamp } from './timestamp.js';\nimport { fieldMask } from './field-mask.js';\nimport { bytes } from './bytes.js';\nimport { duration } from './duration.js';\nimport { float } from './float.js';\n\nexport const protobufConverters: ConverterSet[] = [\n timestamp,\n fieldMask,\n bytes,\n duration,\n float,\n];\n", "import { TypeToConverterSet, ConverterSet } from './domain.js';\n\nexport function typeToConverterSet(\n converterSets: ConverterSet[],\n): TypeToConverterSet {\n return converterSets.reduce((result, converterSet) => {\n const types = converterSet.types.reduce((typeResult, type) => {\n return {\n ...typeResult,\n [type]: converterSet,\n };\n }, {} as TypeToConverterSet);\n\n return {\n ...result,\n ...types,\n };\n }, {} as TypeToConverterSet);\n}\n", "import type {\n RenderedLeanSchema,\n RenderedLeanSchemaFields,\n} from '@wix/metro-public-utils';\nimport { ConverterType, Payload } from './serializer/domain.js';\nimport { schemaSerializer } from './serializer/serializer.js';\nimport { protobufConverters } from './serializer/protobuf-converters/converters.js';\nimport { typeToConverterSet } from './serializer/utils.js';\n\nconst ambassadorConverters = typeToConverterSet([...protobufConverters]);\n\nexport type { GoogleProtoDuration } from './serializer/protobuf-converters/types.js';\n\nexport function serializer<T>(\n rootSchema: RenderedLeanSchemaFields,\n depSchemas: RenderedLeanSchema = {},\n) {\n const transform = schemaSerializer(\n rootSchema,\n depSchemas,\n ambassadorConverters,\n );\n\n return {\n fromJSON(jsonOrString: Payload | string): T {\n const jsonOrText = safeJsonParse(jsonOrString) || jsonOrString;\n return transform(jsonOrText, ConverterType.FROM_JSON) as T;\n },\n\n toJSON(json: T) {\n return transform(json, ConverterType.TO_JSON) as Payload;\n },\n };\n}\n\nfunction safeJsonParse(someString: string): any {\n try {\n return JSON.parse(someString);\n } catch (error) {}\n}\n", null, null, null, null, null, null, "/**\n * Domain \u2194 ambassador wire-type converters. This module owns the proto\u2194domain\n * boundary for the evaluator: every assumption about how ambassador payloads\n * map onto `@wix/evalforge-types` lives here, in both directions.\n *\n * Write side (domain \u2192 wire, for `AddEvalRunResult` / `PushTraceEvent`)\n * mirrors, in reverse, the backend's proto \u2192 domain converters in\n * `packages/eval-backend/src/grpc/converter.ts`:\n * - enum values gain their proto prefix and are uppercased\n * (`'tool_use'` \u2192 `'LLM_STEP_TYPE_TOOL_USE'`),\n * - ISO timestamp strings become `Date` objects (the ambassador serializer\n * handles `google.protobuf.Timestamp` fields as `Date`),\n * - domain field names map onto their proto counterparts\n * (`isError` \u2192 `errored`, `isInfrastructure` \u2192 `infrastructure`,\n * `isComplete` \u2192 `complete`, flat conversation blocks \u2192 proto oneof).\n *\n * Read side (wire \u2192 domain, for the GET calls) normalizes what the backend's\n * `*ToProto` response converters produced:\n * - enum values lose their proto prefix (when present) and are lowercased\n * back to the domain values (`'SDK'` \u2192 `'sdk'`, `'CLAUDE'` \u2192 `'claude'`),\n * with `*_UNSPECIFIED` sentinels mapped to `undefined`,\n * - `Date` objects become the ISO strings domain timestamps are typed as,\n * - wire-renamed structures fold back onto their domain fields\n * (`Template.uploadedSource.files` \u2192 `sourceFiles`, the\n * `CapabilityVersion` content oneof \u2192 flat `content`).\n */\n\nimport type {\n AssertionResult as WireAssertionResult,\n AssertionResultStatus as WireAssertionResultStatus,\n ConversationBlock as WireConversationBlock,\n ConversationMessage as WireConversationMessage,\n ConversationMessageRole as WireConversationMessageRole,\n DiffContent as WireDiffContent,\n DiffLine as WireDiffLine,\n DiffLineType as WireDiffLineType,\n EvalRunResult as WireEvalRunResult,\n LiveTraceEvent as WireLiveTraceEvent,\n LiveTraceEventType as WireLiveTraceEventType,\n LLMStepType as WireLLMStepType,\n LLMTrace as WireLLMTrace,\n LLMTraceStep as WireLLMTraceStep,\n TemplateFile as WireTemplateFile,\n TemplateFileStatus as WireTemplateFileStatus,\n EvalRun as WireEvalRun\n} from '@wix/ambassador-evalforge-v1-eval-run/types';\nimport type { Agent as WireAgent } from '@wix/ambassador-evalforge-v1-agent/types';\nimport type { TestScenario as WireTestScenario } from '@wix/ambassador-evalforge-v1-test-scenario/types';\nimport type { Template as WireTemplate } from '@wix/ambassador-evalforge-v1-project/types';\nimport type { Preset as WirePreset } from '@wix/ambassador-evalforge-v1-preset/types';\nimport type {\n Capability as WireCapability,\n CapabilityVersion as WireCapabilityVersion\n} from '@wix/ambassador-evalforge-v1-capability/types';\nimport type {\n Agent,\n AssertionResult,\n Capability,\n CapabilityVersion,\n ConversationBlock,\n ConversationMessage,\n DiffContent,\n DiffLine,\n EvalRun,\n EvalRunResult,\n GitHubSource,\n LiveTraceEvent,\n LLMTrace,\n LLMTraceStep,\n Preset,\n ScenarioAssertionLink,\n Template,\n TemplateFile,\n TestScenario,\n TriggerPromptImage\n} from '@wix/evalforge-types';\n\n/**\n * Proto enum values are `PREFIX_` + the uppercased domain value; the backend's\n * `stripEnumPrefix` strips the prefix and lowercases to get back to domain.\n */\nfunction toProtoEnum(prefix: string, value: string): string {\n return `${prefix}${value.toUpperCase()}`;\n}\n\n/** ISO timestamp string \u2192 `Date` for `google.protobuf.Timestamp` fields. */\nfunction toProtoDate(iso: string | undefined): Date | undefined {\n return iso ? new Date(iso) : undefined;\n}\n\n/**\n * Strip keys whose value is `undefined`. The ambassador serializer applies\n * per-field transforms (`DoubleValue`, `Timestamp`, \u2026) to every key present\n * on the payload \u2014 including explicitly-undefined ones, which crashes the\n * transform. Optional fields must be omitted, not set to `undefined`.\n */\nfunction omitUndefined<T extends object>(obj: T): T {\n return Object.fromEntries(\n Object.entries(obj).filter(([, value]) => value !== undefined)\n ) as T;\n}\n\nfunction llmTraceStepToProto(step: LLMTraceStep): WireLLMTraceStep {\n return omitUndefined({\n id: step.id,\n stepNumber: step.stepNumber,\n type: toProtoEnum('LLM_STEP_TYPE_', step.type) as WireLLMStepType,\n model: step.model,\n provider: step.provider,\n startedAt: toProtoDate(step.startedAt),\n durationMs: step.durationMs,\n tokenUsage: step.tokenUsage,\n costUsd: step.costUsd,\n toolName: step.toolName,\n toolArguments: step.toolArguments,\n inputPreview: step.inputPreview,\n outputPreview: step.outputPreview,\n success: step.success,\n error: step.error,\n turnIndex: step.turnIndex\n });\n}\n\nfunction llmTraceToProto(trace: LLMTrace): WireLLMTrace {\n return {\n id: trace.id,\n steps: trace.steps.map(llmTraceStepToProto),\n summary: omitUndefined(trace.summary)\n };\n}\n\nfunction assertionResultToProto(result: AssertionResult): WireAssertionResult {\n return omitUndefined({\n id: result.id,\n assertionId: result.assertionId,\n assertionType: result.assertionType,\n assertionName: result.assertionName,\n status: toProtoEnum(\n 'ASSERTION_RESULT_STATUS_',\n result.status\n ) as WireAssertionResultStatus,\n message: result.message,\n expected: result.expected,\n actual: result.actual,\n duration: result.duration,\n details: result.details,\n llmTraceSteps: result.llmTraceSteps?.map(llmTraceStepToProto)\n });\n}\n\nfunction diffLineToProto(line: DiffLine): WireDiffLine {\n return {\n type: toProtoEnum('DIFF_LINE_TYPE_', line.type) as WireDiffLineType,\n content: line.content,\n lineNumber: line.lineNumber\n };\n}\n\nfunction diffContentToProto(diff: DiffContent): WireDiffContent {\n return omitUndefined({\n path: diff.path,\n expected: diff.expected,\n actual: diff.actual,\n diffLines: diff.diffLines.map(diffLineToProto),\n renamedFrom: diff.renamedFrom,\n infrastructure: diff.isInfrastructure\n });\n}\n\nfunction templateFileToProto(file: TemplateFile): WireTemplateFile {\n return omitUndefined({\n path: file.path,\n content: file.content,\n status: toProtoEnum(\n 'TEMPLATE_FILE_STATUS_',\n file.status\n ) as WireTemplateFileStatus,\n infrastructure: file.isInfrastructure\n });\n}\n\n/** Domain blocks are flat (`{type, ...fields}`); proto uses a oneof per kind. */\nfunction conversationBlockToProto(\n block: ConversationBlock\n): WireConversationBlock {\n switch (block.type) {\n case 'text':\n return { text: { text: block.text } };\n case 'thinking':\n return { thinking: { thinking: block.thinking } };\n case 'tool_use':\n return {\n toolUse: omitUndefined({\n toolName: block.toolName,\n toolId: block.toolId,\n input: block.input\n })\n };\n case 'tool_result':\n return {\n toolResult: omitUndefined({\n toolUseId: block.toolUseId,\n content: block.content,\n errored: block.isError\n })\n };\n default:\n // Exhaustiveness guard: a new ConversationBlock variant fails the build\n // here rather than silently serializing an `undefined` hole into content.\n block satisfies never;\n throw new Error(\n `Unhandled conversation block type: ${(block as { type: string }).type}`\n );\n }\n}\n\nfunction conversationMessageToProto(\n message: ConversationMessage\n): WireConversationMessage {\n return {\n role: toProtoEnum(\n 'CONVERSATION_MESSAGE_ROLE_',\n message.role\n ) as WireConversationMessageRole,\n content: message.content.map(conversationBlockToProto),\n timestamp: toProtoDate(message.timestamp)\n };\n}\n\nexport function evalRunResultToProto(result: EvalRunResult): WireEvalRunResult {\n return omitUndefined({\n id: result.id,\n targetId: result.targetId,\n targetName: result.targetName,\n skillVersionId: result.skillVersionId,\n skillVersion: result.skillVersion,\n scenarioId: result.scenarioId,\n scenarioName: result.scenarioName,\n triggerPrompt: result.triggerPrompt,\n modelConfig: result.modelConfig\n ? omitUndefined(result.modelConfig)\n : undefined,\n assertionResults: result.assertionResults.map(assertionResultToProto),\n metrics: result.metrics,\n passed: result.passed,\n failed: result.failed,\n passRate: result.passRate,\n duration: result.duration,\n outputText: result.outputText,\n files: result.files?.map(omitUndefined),\n fileDiffs: result.fileDiffs?.map(diffContentToProto),\n templateFiles: result.templateFiles?.map(templateFileToProto),\n startedAt: toProtoDate(result.startedAt),\n completedAt: toProtoDate(result.completedAt),\n llmTrace: result.llmTrace ? llmTraceToProto(result.llmTrace) : undefined,\n conversation: result.conversation?.map(conversationMessageToProto),\n iterationIndex: result.iterationIndex\n });\n}\n\nexport function liveTraceEventToProto(\n event: LiveTraceEvent\n): WireLiveTraceEvent {\n return omitUndefined({\n evalRunId: event.evalRunId,\n scenarioId: event.scenarioId,\n scenarioName: event.scenarioName,\n targetId: event.targetId,\n targetName: event.targetName,\n stepNumber: event.stepNumber,\n type: toProtoEnum(\n 'LIVE_TRACE_EVENT_TYPE_',\n event.type\n ) as WireLiveTraceEventType,\n toolName: event.toolName,\n toolArgs: event.toolArgs,\n outputPreview: event.outputPreview,\n filePath: event.filePath,\n elapsedMs: event.elapsedMs,\n thinking: event.thinking,\n timestamp: toProtoDate(event.timestamp),\n complete: event.isComplete\n });\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Read side: wire \u2192 domain\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n/** The wire carries `google.protobuf.Timestamp` fields as `Date`. */\nfunction fromProtoDate(\n value: Date | string | null | undefined\n): string | undefined {\n if (value == null) return undefined;\n return value instanceof Date ? value.toISOString() : value;\n}\n\n/**\n * Wire enum values are UPPER_CASE, optionally carrying the proto prefix\n * (`UNSPECIFIED` sentinels always do); domain enum values are lowercase.\n * `*_UNSPECIFIED` means \"not set\" and maps to `undefined`.\n */\nfunction fromProtoEnum(\n value: string | null | undefined,\n prefix: string\n): string | undefined {\n if (!value || value === `${prefix}UNSPECIFIED`) return undefined;\n return (\n value.startsWith(prefix) ? value.slice(prefix.length) : value\n ).toLowerCase();\n}\n\n/**\n * Like `fromProtoEnum` but throws on a missing/`*_UNSPECIFIED` value instead\n * of silently defaulting. Use for required fields where a wrong default would\n * mask a malformed entity and change behavior \u2014 e.g. `agentType` forks\n * SDK-vs-CLI execution. `UNSPECIFIED` should never arrive for a real entity\n * the evaluator is processing, so failing loud beats a silent fallback.\n */\nfunction requireProtoEnum(\n value: string | null | undefined,\n prefix: string,\n field: string\n): string {\n const mapped = fromProtoEnum(value, prefix);\n if (mapped === undefined) {\n throw new Error(\n `Unexpected ${field}: wire value ${JSON.stringify(value)} is missing or UNSPECIFIED`\n );\n }\n return mapped;\n}\n\n/**\n * The wire `GitHubSource` types every field optional; the domain requires all\n * four (each `.min(1)`). The backend populates them whenever `source` is\n * present, so default to '' and return `undefined` when there is no source.\n * Structural param type avoids importing three package-specific wire types.\n */\nfunction gitHubSourceFromProto(\n source:\n | {\n owner?: string | null;\n repo?: string | null;\n path?: string | null;\n ref?: string | null;\n }\n | null\n | undefined\n): GitHubSource | undefined {\n if (!source) return undefined;\n return {\n owner: source.owner ?? '',\n repo: source.repo ?? '',\n path: source.path ?? '',\n ref: source.ref ?? ''\n };\n}\n\nexport function agentFromProto(wire: WireAgent): Agent {\n return {\n id: wire.id ?? '',\n projectId: wire.projectId ?? '',\n name: wire.name ?? '',\n description: wire.description ?? '',\n agentType: requireProtoEnum(\n wire.agentType,\n 'AGENT_TYPE_',\n 'agentType'\n ) as Agent['agentType'],\n runCommand: fromProtoEnum(\n wire.runCommand,\n 'AGENT_RUN_COMMAND_'\n ) as Agent['runCommand'],\n // No `modelConfig` on the wire: the backend's lazy migration folds it\n // into the `config` bag before serving (agent.repository.ts), so the\n // proto intentionally never carries the deprecated field.\n //\n // Preserve `systemPrompt` exactly, including `null`. The field is a\n // three-state contract (see Agent.systemPrompt JSDoc and the SDK adapters):\n // `undefined` = inject default evaluator prompt, `null` = raw agent (no\n // injection), string = append. Collapsing `null` \u2192 `undefined` would\n // silently flip a raw-mode agent to the default prompt. NOTE: the backend\n // `agentToProto` currently strips `null` before it reaches the wire\n // (converter.ts), so end-to-end null-preservation still needs a backend\n // proto change (StringValue wrapper or a systemPromptMode enum); this side\n // is correct and forward-compatible for when that lands.\n systemPrompt: wire.systemPrompt,\n config: wire.config ?? undefined,\n createdAt: fromProtoDate(wire.createdAt) ?? '',\n updatedAt: fromProtoDate(wire.updatedAt) ?? ''\n };\n}\n\nconst EMPTY_AGGREGATE_METRICS: EvalRun['aggregateMetrics'] = {\n totalAssertions: 0,\n passed: 0,\n failed: 0,\n skipped: 0,\n errors: 0,\n passRate: 0,\n avgDuration: 0,\n totalDuration: 0\n};\n\n/**\n * The wire `EvalRun` is a lean projection: it does not carry `results`,\n * `aggregateMetrics`, job fields, or trace data. The evaluator never consumes\n * those (it only reads run configuration \u2014 scenario/capability/agent IDs,\n * variables, runsPerScenario), so the required domain fields get empty\n * defaults.\n */\nexport function evalRunFromProto(wire: WireEvalRun): EvalRun {\n return {\n id: wire.id ?? '',\n projectId: wire.projectId ?? '',\n name: wire.name ?? '',\n description: wire.description ?? '',\n agentId: wire.agentId ?? undefined,\n presetId: wire.presetId ?? undefined,\n scenarioIds: wire.scenarioIds ?? [],\n status: requireProtoEnum(\n wire.status,\n 'EVAL_STATUS_',\n 'eval run status'\n ) as EvalRun['status'],\n progress: wire.progress ?? 0,\n results: [],\n aggregateMetrics: { ...EMPTY_AGGREGATE_METRICS },\n capabilityIds: wire.capabilityIds,\n capabilityVersions: wire.capabilityVersions,\n tags: wire.tags,\n runsPerScenario: wire.runsPerScenario ?? undefined,\n variables: wire.variables,\n comparisonGroupId: wire.comparisonGroupId ?? undefined,\n comparisonLabel: wire.comparisonLabel ?? undefined,\n folderIds: wire.folderIds,\n scheduleId: wire.scheduleId ?? undefined,\n startedAt: fromProtoDate(wire.startedAt),\n completedAt: fromProtoDate(wire.completedAt),\n createdAt: fromProtoDate(wire.createdAt) ?? '',\n updatedAt: fromProtoDate(wire.updatedAt) ?? ''\n };\n}\n\n/**\n * Note: the proto `TestScenario` does not carry the legacy inline\n * `assertions` / `assertionIds` fields \u2014 only `assertionLinks`. Scenarios\n * still relying on inline assertions lose them over the gRPC read path.\n */\nexport function testScenarioFromProto(wire: WireTestScenario): TestScenario {\n return {\n id: wire.id ?? '',\n projectId: wire.projectId ?? '',\n name: wire.name ?? '',\n description: wire.description ?? '',\n triggerPrompt: wire.triggerPrompt ?? '',\n templateId: wire.templateId ?? undefined,\n // Explicit per-element map (wire params is optional/`any`) rather than a\n // blanket cast, so a future wire/domain divergence surfaces here instead\n // of feeding a wrong shape into assertion resolution silently.\n assertionLinks: wire.assertionLinks?.map(\n (link): ScenarioAssertionLink => ({\n assertionId: link.assertionId ?? '',\n params: (link.params ?? undefined) as ScenarioAssertionLink['params']\n })\n ),\n tags: wire.tags,\n // Wire image fields are all optional; the domain requires base64/name and a\n // strict mediaType enum. Default the strings and cast mediaType (no clean\n // runtime validator here) \u2014 the value feeds Anthropic image blocks\n // downstream, so an explicit map beats a blanket array cast.\n triggerPromptImages: wire.triggerPromptImages?.map(\n (img): TriggerPromptImage => ({\n base64: img.base64 ?? '',\n mediaType: img.mediaType as TriggerPromptImage['mediaType'],\n name: img.name ?? ''\n })\n ),\n createdAt: fromProtoDate(wire.createdAt) ?? '',\n updatedAt: fromProtoDate(wire.updatedAt) ?? ''\n };\n}\n\n/** The wire nests uploaded files under a `uploadedSource` oneof branch. */\nexport function templateFromProto(wire: WireTemplate): Template {\n return {\n id: wire.id ?? '',\n projectId: wire.projectId ?? '',\n name: wire.name ?? '',\n description: wire.description ?? '',\n source: gitHubSourceFromProto(wire.source),\n sourceFiles: wire.uploadedSource?.files as Template['sourceFiles'],\n extraFiles: wire.extraFiles as Template['extraFiles'],\n createdAt: fromProtoDate(wire.createdAt) ?? '',\n updatedAt: fromProtoDate(wire.updatedAt) ?? ''\n };\n}\n\nexport function presetFromProto(wire: WirePreset): Preset {\n return {\n id: wire.id ?? '',\n projectId: wire.projectId ?? '',\n name: wire.name ?? '',\n description: wire.description ?? '',\n agentId: wire.agentId ?? '',\n capabilityIds: wire.capabilityIds,\n capabilityVersions: wire.capabilityVersions,\n createdAt: fromProtoDate(wire.createdAt) ?? '',\n updatedAt: fromProtoDate(wire.updatedAt) ?? ''\n };\n}\n\n/**\n * Wire `CapabilityType` values are already the bare domain values\n * (`SKILL` / `SUB_AGENT` / `RULE` / `MCP`); only the `UNSPECIFIED`\n * sentinel carries the proto prefix. Guard it to `undefined` for parity with\n * the `fromProtoEnum` callers, so a malformed/future `UNSPECIFIED` can't pass\n * through as a \"valid\" capabilityType.\n */\nexport function capabilityFromProto(wire: WireCapability): Capability {\n const capabilityType =\n !wire.capabilityType ||\n wire.capabilityType === 'CAPABILITY_TYPE_UNSPECIFIED'\n ? undefined\n : (wire.capabilityType as Capability['capabilityType']);\n return {\n id: wire.id ?? '',\n projectId: wire.projectId ?? '',\n name: wire.name ?? '',\n description: wire.description ?? '',\n capabilityType: capabilityType as Capability['capabilityType'],\n source: gitHubSourceFromProto(wire.source),\n createdAt: fromProtoDate(wire.createdAt) ?? '',\n updatedAt: fromProtoDate(wire.updatedAt) ?? ''\n };\n}\n\n/**\n * The wire splits `content` into a per-type oneof\n * (`skillContent` / `subAgentContent` / `ruleContent` / `mcpContent` /\n * `pluginContent`); the domain keeps a single `content` field discriminated\n * by the parent capability's `capabilityType`.\n */\nexport function capabilityVersionFromProto(\n wire: WireCapabilityVersion,\n // Not carried on the wire \u2014 supplied by the caller, which always knows it.\n projectId: string\n): CapabilityVersion {\n const content =\n wire.skillContent ??\n wire.subAgentContent ??\n wire.ruleContent ??\n wire.mcpContent ??\n wire.pluginContent;\n return {\n id: wire.id ?? '',\n projectId,\n capabilityId: wire.capabilityId ?? '',\n version: wire.version ?? '',\n origin: (wire.origin ?? 'manual') as CapabilityVersion['origin'],\n source: gitHubSourceFromProto(wire.source),\n content: content as CapabilityVersion['content'],\n notes: wire.notes ?? undefined,\n createdAt: fromProtoDate(wire.createdAt) ?? ''\n };\n}\n", "import type {\n EvalRun,\n TestScenario,\n SkillWithLatestVersion,\n Agent,\n Template,\n Assertion,\n MCPEntity,\n SubAgent,\n Rule,\n CapabilityWithLatestVersion\n} from '@wix/evalforge-types';\n\nimport {\n isSystemAssertionId,\n SYSTEM_ASSERTIONS,\n type SystemAssertionId,\n isAllowedBuildCommandString,\n type AllowedBuildCommandString,\n capabilityToSkillWithLatestVersion,\n capabilityToSubAgent,\n capabilityToRule,\n capabilityToMcp\n} from '@wix/evalforge-types';\nimport type { ApiClient } from './api-client.js';\nimport { resolvePlaceholdersInString } from './resolve-placeholders.js';\n\n/**\n * Parse skillNames from a JSON array string stored in assertion params.\n * Params only hold primitives, so the frontend serialises the string[]\n * into a JSON string like '[\"SkillA\",\"SkillB\"]'.\n */\nexport function parseSkillNamesFromParams(value: unknown): string[] {\n if (typeof value !== 'string') {\n return [];\n }\n const parsed: unknown = JSON.parse(value);\n if (Array.isArray(parsed)) {\n return parsed.map(String);\n }\n return [];\n}\n\n/**\n * Apply parameter values to an assertion.\n * Replaces placeholder values with actual params from the scenario link.\n */\nexport function applyParamsToAssertion(\n assertion: Assertion,\n params?: Record<string, unknown>\n): Assertion {\n if (!params || Object.keys(params).length === 0) {\n return assertion;\n }\n\n // For llm_judge, replace {{param}} placeholders and apply config overrides\n if (assertion.type === 'llm_judge') {\n const stringParams: Record<string, string> = {};\n for (const [key, value] of Object.entries(params)) {\n stringParams[key] = String(value ?? '');\n }\n const prompt = resolvePlaceholdersInString(assertion.prompt, stringParams);\n\n return {\n ...assertion,\n prompt,\n ...(params.model !== undefined && { model: params.model as string }),\n ...(params.maxTokens !== undefined && {\n maxTokens: params.maxTokens as number\n }),\n ...(params.temperature !== undefined && {\n temperature: params.temperature as number\n }),\n ...(params.minScore !== undefined && {\n minScore: params.minScore as number\n })\n };\n }\n\n // For time, params override maxDurationMs directly\n if (assertion.type === 'time_limit' && params.maxDurationMs !== undefined) {\n return {\n ...assertion,\n maxDurationMs: params.maxDurationMs as number\n };\n }\n\n // For skill_was_called, parse skillNames from params (may be JSON string)\n if (\n assertion.type === 'skill_was_called' &&\n params.skillNames !== undefined\n ) {\n return {\n ...assertion,\n skillNames: parseSkillNamesFromParams(params.skillNames),\n ...(params.negate !== undefined && { negate: params.negate as boolean })\n };\n }\n\n // For tool_called_with_param, params override toolName and expectedParams directly\n if (assertion.type === 'tool_called_with_param') {\n return {\n ...assertion,\n ...(params.toolName !== undefined && {\n toolName: params.toolName as string\n }),\n ...(params.expectedParams !== undefined && {\n expectedParams: params.expectedParams as string\n }),\n ...(params.requireSuccess !== undefined && {\n requireSuccess: params.requireSuccess as boolean\n }),\n ...(params.negate !== undefined && { negate: params.negate as boolean })\n };\n }\n\n // For build_passed and cost, params override config values directly\n return { ...assertion, ...params } as Assertion;\n}\n\n/**\n * Resolve a system assertion to inline Assertion format with params applied.\n */\nexport function resolveSystemAssertion(\n assertionId: SystemAssertionId,\n params?: Record<string, unknown>\n): Assertion {\n const systemAssertion = SYSTEM_ASSERTIONS[assertionId];\n\n // Build base assertion from system assertion type\n let baseAssertion: Assertion;\n switch (systemAssertion.type) {\n case 'skill_was_called':\n baseAssertion = {\n type: 'skill_was_called',\n skillNames: parseSkillNamesFromParams(params?.skillNames),\n ...(params?.negate !== undefined && {\n negate: params.negate as boolean\n })\n };\n break;\n case 'tool_called_with_param':\n baseAssertion = {\n type: 'tool_called_with_param',\n toolName: (params?.toolName as string) ?? '',\n ...(params?.expectedParams !== undefined && {\n expectedParams: params.expectedParams as string\n }),\n ...(params?.requireSuccess !== undefined && {\n requireSuccess: params.requireSuccess as boolean\n }),\n ...(params?.negate !== undefined && {\n negate: params.negate as boolean\n })\n };\n break;\n case 'build_passed': {\n const rawCmd = params?.command;\n const command =\n typeof rawCmd === 'string' && isAllowedBuildCommandString(rawCmd)\n ? (rawCmd.trim() as AllowedBuildCommandString)\n : undefined;\n baseAssertion = {\n type: 'build_passed',\n ...(command !== undefined && { command }),\n expectedExitCode: (params?.expectedExitCode as number) ?? undefined\n };\n break;\n }\n case 'time_limit':\n baseAssertion = {\n type: 'time_limit',\n maxDurationMs: (params?.maxDurationMs as number) ?? 300000\n };\n break;\n case 'cost':\n baseAssertion = {\n type: 'cost',\n maxCostUsd: (params?.maxCostUsd as number) ?? 1.0\n };\n break;\n case 'llm_judge':\n baseAssertion = {\n type: 'llm_judge',\n prompt: (params?.prompt as string) ?? '',\n minScore: params?.minScore as number | undefined,\n model: params?.model as string | undefined,\n maxTokens: params?.maxTokens as number | undefined,\n temperature: params?.temperature as number | undefined\n };\n break;\n case 'api_call':\n baseAssertion = {\n type: 'api_call',\n url: (params?.url as string) ?? '',\n expectedResponse: (params?.expectedResponse as string) ?? '{}',\n method: (params?.method as 'GET' | 'POST') ?? undefined,\n requestBody: (params?.requestBody as string) ?? undefined,\n requestHeaders: (params?.requestHeaders as string) ?? undefined,\n timeoutMs: (params?.timeoutMs as number) ?? undefined\n };\n break;\n default:\n // Should not happen for system assertions\n baseAssertion = { type: 'llm_judge', prompt: '' };\n }\n\n return baseAssertion;\n}\n\n/**\n * A scenario paired with its optional template and resolved assertions.\n */\nexport interface ScenarioItem {\n scenario: TestScenario;\n template?: Template;\n /** Resolved assertions from assertionIds (converted to inline format) */\n resolvedAssertions?: Assertion[];\n}\n\n/**\n * Data shape returned by fetchEvaluationData for the run flow.\n * Run-level agent + skills + mcps + subAgents; per-scenario template.\n */\nexport interface EvaluationData {\n evalRun: EvalRun;\n agent: Agent | null;\n skills: SkillWithLatestVersion[];\n /** Display name: preset name from DB when available, otherwise joined skill names */\n presetName: string;\n mcps: MCPEntity[];\n subAgents: SubAgent[];\n rules: Rule[];\n scenarioItems: ScenarioItem[];\n}\n\n/**\n * Fetch all data needed to run an evaluation.\n *\n * Uses evalRun.agentId and evalRun.skillIds as run-level inputs.\n * Loads skills by ID; loads code agent; loads scenarios and templates by scenario.templateId.\n *\n * @throws Error if eval run has no code agent when expected\n * @throws Error if eval run has no skills group or skills group has no skills when expected\n */\nexport async function fetchEvaluationData(\n api: ApiClient,\n projectId: string,\n evalRunId: string\n): Promise<EvaluationData> {\n const evalRun = await api.getEvalRun(projectId, evalRunId);\n\n const scenarios = await Promise.all(\n (evalRun.scenarioIds ?? []).map((id) => api.getScenario(projectId, id))\n );\n\n let agent: Agent | null = null;\n if (evalRun.agentId) {\n agent = await api.getAgent(projectId, evalRun.agentId);\n }\n\n // ---------------------------------------------------------------------------\n // Fetch capabilities: unified path (capabilityIds) or legacy path (4 ID arrays)\n // ---------------------------------------------------------------------------\n const skills: SkillWithLatestVersion[] = [];\n const mcps: MCPEntity[] = [];\n const subAgents: SubAgent[] = [];\n const rules: Rule[] = [];\n\n if (evalRun.capabilityIds && evalRun.capabilityIds.length > 0) {\n // \u2500\u2500 Unified capability path \u2500\u2500\n const fetchResults = await Promise.allSettled(\n evalRun.capabilityIds.map((id) => api.getCapability(projectId, id))\n );\n const capabilities = fetchResults\n .filter(\n (r): r is PromiseFulfilledResult<CapabilityWithLatestVersion> =>\n r.status === 'fulfilled'\n )\n .map((r) => r.value)\n .filter((c) => !c.deleted);\n\n // Apply pinned versions from capabilityVersions\n const pinned = evalRun.capabilityVersions ?? {};\n const withVersions = await Promise.all(\n capabilities.map(async (cap) => {\n const versionId = pinned[cap.id];\n if (versionId) {\n const version = await api.getCapabilityVersion(\n projectId,\n cap.id,\n versionId\n );\n return { ...cap, latestVersion: version };\n }\n // For GitHub-sourced capabilities with no pinned version, clear latestVersion\n if (cap.source) {\n return { ...cap, latestVersion: undefined };\n }\n return cap;\n })\n );\n\n // Group by type into legacy domain objects using shared converters\n for (const cap of withVersions) {\n switch (cap.capabilityType) {\n case 'SKILL':\n skills.push(capabilityToSkillWithLatestVersion(cap));\n break;\n case 'SUB_AGENT':\n subAgents.push(capabilityToSubAgent(cap));\n break;\n case 'RULE':\n rules.push(capabilityToRule(cap));\n break;\n case 'MCP':\n mcps.push(capabilityToMcp(cap));\n break;\n }\n }\n }\n // Old runs without capabilityIds will simply have empty arrays (safe default)\n\n const templateIds = [\n ...new Set(\n scenarios.map((s) => s.templateId).filter((id): id is string => !!id)\n )\n ];\n const templates =\n templateIds.length > 0\n ? await Promise.all(\n templateIds.map((id) => api.getTemplate(projectId, id))\n )\n : [];\n const templateMap = new Map(templates.map((t) => [t.id, t]));\n\n const scenarioItems: ScenarioItem[] = scenarios.map((scenario) => {\n // Resolve assertion links to inline Assertion format with params applied\n const resolvedAssertions = (scenario.assertionLinks ?? [])\n .map((link) => {\n const { assertionId, params } = link;\n\n if (!isSystemAssertionId(assertionId)) {\n return null;\n }\n\n return resolveSystemAssertion(\n assertionId as SystemAssertionId,\n params as Record<string, unknown>\n );\n })\n .filter((a): a is Assertion => a !== null);\n\n return {\n scenario,\n template: scenario.templateId\n ? templateMap.get(scenario.templateId)\n : undefined,\n resolvedAssertions:\n resolvedAssertions.length > 0 ? resolvedAssertions : undefined\n };\n });\n\n let presetName = '';\n if (evalRun.presetId) {\n try {\n const preset = await api.getPreset(projectId, evalRun.presetId);\n presetName = preset.name;\n } catch {\n presetName =\n skills.length > 0 ? skills.map((s) => s.name).join(', ') : '';\n }\n } else if (skills.length > 0) {\n presetName = skills.map((s) => s.name).join(', ');\n }\n\n return {\n evalRun,\n agent,\n skills,\n presetName,\n mcps,\n subAgents,\n rules,\n scenarioItems\n };\n}\n", "/**\n * Generic `{{placeholder}}` resolution utilities.\n *\n * Provides low-level functions for detecting and replacing `{{key}}`\n * tokens inside arbitrary JSON-like values (strings, arrays, objects).\n *\n * Used by:\n * - MCP config resolution (wix-auth tokens)\n * - LLM judge assertion param substitution\n */\n\nconst PLACEHOLDER_PATTERN = /\\{\\{([^}]+)\\}\\}/g;\n\n/**\n * Find all unique placeholder keys referenced in an arbitrary value.\n * Recursively traverses strings, arrays, and plain objects.\n */\nexport function findPlaceholders(value: unknown): string[] {\n const keys = new Set<string>();\n collectPlaceholders(value, keys);\n return [...keys];\n}\n\nfunction collectPlaceholders(value: unknown, keys: Set<string>): void {\n if (typeof value === 'string') {\n for (const match of value.matchAll(PLACEHOLDER_PATTERN)) {\n keys.add(match[1].trim());\n }\n } else if (Array.isArray(value)) {\n for (const item of value) {\n collectPlaceholders(item, keys);\n }\n } else if (typeof value === 'object' && value !== null) {\n for (const val of Object.values(value)) {\n collectPlaceholders(val, keys);\n }\n }\n}\n\n/**\n * Replace `{{key}}` tokens in an arbitrary value using the given map.\n * Recursively traverses strings, arrays, and plain objects.\n * Unknown placeholders (not in `placeholders`) are left as-is.\n */\nexport function resolveValue(\n value: unknown,\n placeholders: Record<string, string>\n): unknown {\n if (typeof value === 'string') {\n return value.replace(PLACEHOLDER_PATTERN, (match, key: string) => {\n const trimmed = key.trim();\n return trimmed in placeholders ? placeholders[trimmed] : match;\n });\n }\n if (Array.isArray(value)) {\n return value.map((item) => resolveValue(item, placeholders));\n }\n if (typeof value === 'object' && value !== null) {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n result[k] = resolveValue(v, placeholders);\n }\n return result;\n }\n return value;\n}\n\n/**\n * Replace `{{key}}` tokens in a single string.\n * Convenience wrapper around {@link resolveValue} with a narrower return type.\n */\nexport function resolvePlaceholdersInString(\n text: string,\n placeholders: Record<string, string>\n): string {\n return resolveValue(text, placeholders) as string;\n}\n", "import type {\n EvalRunResult,\n LiveTraceEvent,\n TestScenario,\n Template\n} from '@wix/evalforge-types';\nimport {\n AssertionResultStatus,\n DEFAULT_JUDGE_MODEL,\n LiveTraceEventType,\n formatTraceEventLine\n} from '@wix/evalforge-types';\nimport {\n evaluateAssertions as evaluateAssertionsBase,\n type EvaluationInput,\n type AssertionContext\n} from '@wix/eval-assertions';\nimport type { EvaluatorConfig } from '../config.js';\nimport { prepareWorkingDirectory } from './environment.js';\nimport { runAgentWithContext } from './run-agent-with-context.js';\nimport type { Assertion } from '@wix/evalforge-types';\nimport type { EvaluationData } from '../fetch-evaluation-data.js';\n\nexport type { PartialEvalRunResult } from './types.js';\nexport type { ScenarioItem, EvaluationData } from '../fetch-evaluation-data.js';\n\n/**\n * Run a single scenario using evaluation data.\n *\n * @param config - Evaluator configuration\n * @param evalRunId - The evaluation run ID\n * @param scenario - The test scenario to run\n * @param evalData - Fetched evaluation data (skills, agent, mcps, subAgents)\n * @param template - Optional pre-fetched template entity\n * @param resolvedAssertions - Optional assertions resolved from assertionIds\n * @param pushEvent - Optional callback pushing trace events to the backend\n * (remote job execution, where stdout is not accessible)\n * @returns Complete evaluation result\n */\nexport async function runScenario(\n config: EvaluatorConfig,\n evalRunId: string,\n scenario: TestScenario,\n evalData: EvaluationData,\n template?: Template,\n resolvedAssertions?: Assertion[],\n pushEvent?: (event: LiveTraceEvent) => void\n): Promise<EvalRunResult> {\n const targetId =\n evalData.evalRun.presetId ?? evalData.agent?.id ?? evalData.evalRun.id;\n const targetName = evalData.presetName ?? evalData.agent?.name ?? '';\n\n if (template) {\n console.log(\n formatTraceEventLine({\n evalRunId,\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n targetId,\n targetName,\n stepNumber: 0,\n type: LiveTraceEventType.PROGRESS,\n outputPreview: 'Setting up environment (installing dependencies)...',\n elapsedMs: 0,\n timestamp: new Date().toISOString(),\n isComplete: false\n })\n );\n }\n\n const workDir = await prepareWorkingDirectory(\n config,\n evalRunId,\n targetId,\n scenario.id,\n template\n );\n\n const partialResult = await runAgentWithContext(\n config,\n evalRunId,\n scenario,\n evalData,\n workDir,\n pushEvent\n );\n\n // Combine inline assertions with resolved assertions from assertionIds\n const inlineAssertions = scenario.assertions ?? [];\n const assertions: Assertion[] = [\n ...inlineAssertions,\n ...(resolvedAssertions ?? [])\n ];\n\n // Adapt PartialEvalRunResult to EvaluationInput for the assertions package\n // Use templateFiles to get file status (new, modified, unchanged)\n const templateFilesMap = new Map(\n (partialResult.templateFiles ?? []).map((f) => [f.path, f.status])\n );\n const evaluationInput: EvaluationInput = {\n outputText: partialResult.outputText,\n llmTrace: partialResult.llmTrace,\n fileDiffs: partialResult.fileDiffs?.map((d) => ({\n path: d.path,\n status: templateFilesMap.get(d.path) as 'new' | 'modified' | undefined\n })),\n durationMs: partialResult.duration\n };\n\n const defaultJudgeModel = DEFAULT_JUDGE_MODEL;\n const assertionContext: AssertionContext = {\n workDir,\n defaultJudgeModel,\n llmConfig: {\n baseUrl: config.aiGatewayUrl,\n headers: config.aiGatewayHeaders\n }\n };\n\n const assertionResults: EvalRunResult['assertionResults'] =\n assertions.length > 0\n ? await evaluateAssertionsBase(\n evaluationInput,\n assertions,\n assertionContext\n )\n : [];\n\n const passed = assertionResults.filter(\n (r) => r.status === AssertionResultStatus.PASSED\n ).length;\n const failed = assertionResults.filter(\n (r) => r.status === AssertionResultStatus.FAILED\n ).length;\n const total = assertionResults.length;\n const passRate = total > 0 ? Math.round((passed / total) * 100) : 100;\n\n return {\n ...partialResult,\n assertionResults,\n passed,\n failed,\n passRate\n };\n}\n", "import type { Template } from '@wix/evalforge-types';\nimport { mkdirSync, existsSync, rmSync, readFileSync, writeFileSync } from 'fs';\nimport { mkdir, writeFile } from 'fs/promises';\nimport { tmpdir } from 'os';\nimport path, { sep } from 'path';\nimport type { EvaluatorConfig } from '../config.js';\nimport {\n fetchGitHubFolder,\n fetchGitHubFile\n} from '@wix/evalforge-github-client';\nimport { writeFilesToDirectory } from './utils/write-files.js';\nimport { installDependencies } from './install-dependencies.js';\n\nasync function fetchAndWriteTemplateFiles(\n template: Template,\n workDir: string\n): Promise<void> {\n // 1. Source files (git directory or uploaded)\n let sourceFiles: Array<{ path: string; content: string }> = [];\n if (template.source) {\n sourceFiles = await fetchGitHubFolder(template.source, {\n userAgent: 'EvalForge-Evaluator'\n });\n } else if (template.sourceFiles?.length) {\n sourceFiles = template.sourceFiles;\n } else {\n console.warn(\n `Template \"${template.name}\" has no source configured, creating empty directory`\n );\n }\n\n await writeFilesToDirectory(workDir, sourceFiles);\n\n // 2. Extra files \u2014 override source files by path\n await Promise.all(\n (template.extraFiles ?? []).map(async (ef) => {\n const content = ef.gitSource\n ? await fetchGitHubFile(ef.gitSource, {\n userAgent: 'EvalForge-Evaluator'\n })\n : (ef.content ?? '');\n const dest = path.resolve(workDir, ef.path);\n if (!dest.startsWith(workDir + sep)) {\n throw new Error(\n `Extra file path escapes working directory: \"${ef.path}\"`\n );\n }\n await mkdir(path.dirname(dest), { recursive: true });\n await writeFile(dest, content, 'utf8');\n })\n );\n}\n\nfunction writeWixEnvFile(workDir: string): void {\n const configPath = path.join(workDir, 'wix.config.json');\n if (!existsSync(configPath)) {\n return;\n }\n try {\n const config = JSON.parse(readFileSync(configPath, 'utf-8'));\n if (config.appId) {\n writeFileSync(\n path.join(workDir, '.env'),\n `WIX_CLIENT_ID=${config.appId}\\n`,\n 'utf-8'\n );\n console.log('[environment] Wrote WIX_CLIENT_ID to .env');\n }\n } catch {\n console.warn('[environment] Failed to read wix.config.json');\n }\n}\n\n/**\n * Prepare the working directory for a scenario.\n * If a template with source is provided, fetch files from GitHub.\n * If no template, create an empty directory so file creation/modification can be tracked.\n *\n * @param config - Evaluator configuration\n * @param evalRunId - The evaluation run ID\n * @param targetId - The target ID (prompt agent, skill, or agent)\n * @param scenarioId - The scenario ID (for per-scenario isolation when no template)\n * @param template - Optional pre-fetched template entity\n * @returns The working directory path\n */\nexport async function prepareWorkingDirectory(\n config: EvaluatorConfig,\n evalRunId: string,\n targetId: string,\n scenarioId: string,\n template?: Template\n): Promise<string> {\n const baseDir =\n config.evaluationsDir ?? path.join(tmpdir(), 'evalforge-evaluations');\n const nodeModulesCacheDir = path.join(baseDir, '_node_modules_cache');\n\n if (template) {\n if (!config.evaluationsDir) {\n console.warn(\n 'Template specified but EVALUATIONS_DIR not set, using temp directory'\n );\n }\n const workDir = path.join(baseDir, `${evalRunId}_${targetId}`);\n if (existsSync(workDir)) {\n rmSync(workDir, { recursive: true });\n }\n mkdirSync(workDir, { recursive: true });\n await fetchAndWriteTemplateFiles(template, workDir);\n console.log(`Template files written to ${workDir}`);\n writeWixEnvFile(workDir);\n await installDependencies(workDir, undefined, nodeModulesCacheDir);\n return workDir;\n }\n\n const workDir = path.join(baseDir, `${evalRunId}_${targetId}_${scenarioId}`);\n if (existsSync(workDir)) {\n rmSync(workDir, { recursive: true });\n }\n mkdirSync(workDir, { recursive: true });\n console.log(`Empty working directory created at ${workDir}`);\n return workDir;\n}\n", "import { mkdir, writeFile } from 'fs/promises';\nimport { dirname, resolve, sep } from 'path';\nimport type { SkillFile } from '@wix/evalforge-types';\n\n/**\n * Write an array of {path, content} files to a target directory.\n * Validates paths to prevent directory traversal.\n */\nexport async function writeFilesToDirectory(\n targetDir: string,\n files: SkillFile[]\n): Promise<void> {\n const resolvedBase = resolve(targetDir);\n for (const file of files) {\n const filePath = resolve(targetDir, file.path);\n if (!filePath.startsWith(resolvedBase + sep) && filePath !== resolvedBase) {\n throw new Error(\n `Path traversal detected: \"${file.path}\" resolves outside target directory`\n );\n }\n await mkdir(dirname(filePath), { recursive: true });\n await writeFile(filePath, file.content, 'utf-8');\n }\n}\n", "import { mkdirSync, existsSync, readFileSync, copyFileSync, cpSync } from 'fs';\nimport { createHash } from 'crypto';\nimport path from 'path';\nimport { execFileSync } from 'child_process';\n\ntype PackageManager = {\n cmd: string;\n args: string[];\n cacheSourceFile: string;\n};\n\nfunction detectPackageManager(workDir: string): PackageManager {\n if (existsSync(path.join(workDir, 'pnpm-lock.yaml'))) {\n return {\n cmd: 'pnpm',\n args: ['install', '--frozen-lockfile'],\n cacheSourceFile: 'pnpm-lock.yaml'\n };\n }\n if (existsSync(path.join(workDir, 'package-lock.json'))) {\n return { cmd: 'npm', args: ['ci'], cacheSourceFile: 'package-lock.json' };\n }\n if (existsSync(path.join(workDir, 'yarn.lock'))) {\n return {\n cmd: 'yarn',\n args: ['install', '--frozen-lockfile'],\n cacheSourceFile: 'yarn.lock'\n };\n }\n // No lock file: use npm which is always available on any Node.js environment.\n return {\n cmd: 'npm',\n args: [\n 'install',\n '--legacy-peer-deps',\n '--prefer-offline',\n '--no-fund',\n '--no-audit'\n ],\n cacheSourceFile: 'package.json'\n };\n}\n\n// On macOS, use APFS clones (copy-on-write, near-instant).\n// On Linux (CI), fall back to a full recursive copy \u2014 correct but slower.\nfunction cloneDirectory(src: string, dest: string): void {\n if (process.platform === 'darwin') {\n execFileSync('cp', ['-rc', src, dest]);\n } else {\n cpSync(src, dest, { recursive: true });\n }\n}\n\nfunction installWithCache(\n workDir: string,\n exec: typeof execFileSync,\n cacheBase: string,\n pm: PackageManager\n): void {\n const sourceContent = readFileSync(\n path.join(workDir, pm.cacheSourceFile),\n 'utf-8'\n );\n // 64-bit prefix \u2014 sufficient for the small number of distinct templates.\n const cacheKey = createHash('sha256')\n .update(sourceContent)\n .digest('hex')\n .slice(0, 16);\n const cachedNodeModules = path.join(cacheBase, cacheKey, 'node_modules');\n const targetNodeModules = path.join(workDir, 'node_modules');\n const cacheDir = path.dirname(cachedNodeModules);\n const cachedYarnLock = path.join(cacheDir, 'yarn.lock');\n\n if (existsSync(cachedNodeModules)) {\n console.log(\n `[environment] Restoring node_modules from cache (key: ${cacheKey})`\n );\n if (!existsSync(targetNodeModules)) {\n cloneDirectory(cachedNodeModules, targetNodeModules);\n }\n // Restore yarn.lock so yarn commands (e.g. wix build) find a valid lockfile.\n if (existsSync(cachedYarnLock)) {\n copyFileSync(cachedYarnLock, path.join(workDir, 'yarn.lock'));\n }\n return;\n }\n\n // Cache miss: install, then persist node_modules + yarn.lock to cache.\n console.log(\n `[environment] Running ${pm.cmd} ${pm.args.join(' ')} in ${workDir} (cache key: ${cacheKey})`\n );\n try {\n exec(pm.cmd, pm.args, {\n cwd: workDir,\n stdio: 'inherit',\n timeout: 180_000,\n env: { ...process.env, NODE_ENV: 'development' }\n });\n } catch (err) {\n console.error(\n '[environment] Dependency installation failed:',\n err instanceof Error ? err.message : String(err)\n );\n return;\n }\n console.log(\n '[environment] Dependency installation complete \u2014 saving to cache'\n );\n try {\n mkdirSync(cacheDir, { recursive: true });\n const yarnLockPath = path.join(workDir, 'yarn.lock');\n if (existsSync(yarnLockPath)) {\n copyFileSync(yarnLockPath, cachedYarnLock);\n }\n // Copy (not move) to cache so workDir keeps its node_modules.\n // If this fails, the install still succeeded and the build can proceed.\n cloneDirectory(targetNodeModules, cachedNodeModules);\n } catch (err) {\n console.error(\n '[environment] Failed to save to cache (installation still succeeded):',\n err instanceof Error ? err.message : String(err)\n );\n }\n}\n\n/**\n * Install dependencies in workDir if a package.json is present.\n * Detects the package manager from the lock file and runs the appropriate install command.\n * Failures are logged as warnings and do not abort the scenario.\n *\n * When cacheBase is provided, node_modules is cached keyed by the lock file hash.\n * Subsequent calls with the same lock file content skip the install entirely \u2014\n * node_modules is restored via APFS clone on macOS (near-instant) or recursive copy on Linux.\n */\nexport async function installDependencies(\n workDir: string,\n exec: typeof execFileSync = execFileSync,\n cacheBase?: string\n): Promise<void> {\n if (!existsSync(path.join(workDir, 'package.json'))) {\n return;\n }\n\n const pm = detectPackageManager(workDir);\n\n if (cacheBase) {\n installWithCache(workDir, exec, cacheBase, pm);\n return;\n }\n\n // No cache: plain install.\n console.log(\n `[environment] Running ${pm.cmd} ${pm.args.join(' ')} in ${workDir}`\n );\n try {\n exec(pm.cmd, pm.args, {\n cwd: workDir,\n stdio: 'inherit',\n timeout: 180_000,\n env: { ...process.env, NODE_ENV: 'development' }\n });\n console.log('[environment] Dependency installation complete');\n } catch (err) {\n console.error(\n '[environment] Dependency installation failed:',\n err instanceof Error ? err.message : String(err)\n );\n }\n}\n", "import type {\n TestScenario,\n AgentExecutionContext,\n LiveTraceEvent\n} from '@wix/evalforge-types';\nimport { randomUUID } from 'crypto';\nimport type { EvaluatorConfig } from '../config.js';\nimport type { PartialEvalRunResult } from './types.js';\nimport type { EvaluationData } from '../fetch-evaluation-data.js';\nimport { getAdapter } from './agents/index.js';\nimport { simpleAgentAdapter } from './agents/simple-agent/simple-agent-adapter.js';\nimport {\n snapshotDirectory,\n diffSnapshots,\n extractTemplateFiles,\n deriveInfrastructurePaths\n} from './file-diff.js';\nimport { substituteVariables } from '../substitute-variables.js';\n\nimport { AgentRunCommand, AgentType } from '@wix/evalforge-types';\n\nconst DEFAULT_AGENT_COMMAND = AgentRunCommand.CLAUDE;\n\n/**\n * Run the agent with the full execution context (skills, MCPs, sub-agents, etc.).\n *\n * Uses the agent adapter registry to select the appropriate adapter based on\n * the agent's runCommand (for CLI agents) or adapter ID (for SDK agents).\n * If no agent is specified, defaults to 'claude'.\n *\n * @param config - Evaluator configuration\n * @param evalRunId - The evaluation run ID (for live trace context)\n * @param scenario - The test scenario to run\n * @param evalData - Fetched evaluation data (skills, agent, mcps, subAgents)\n * @param workDir - Optional working directory for the scenario\n * @param pushEvent - Optional callback pushing trace events to the backend\n * (remote job execution, where stdout is not accessible)\n * @returns Partial result without assertion fields\n */\nexport async function runAgentWithContext(\n config: EvaluatorConfig,\n evalRunId: string,\n scenario: TestScenario,\n evalData: EvaluationData,\n workDir?: string,\n pushEvent?: (event: LiveTraceEvent) => void\n): Promise<PartialEvalRunResult> {\n const agent = evalData.agent ?? undefined;\n const isSDK = agent?.agentType === AgentType.SDK;\n\n const identifier: string = isSDK\n ? simpleAgentAdapter.id\n : (agent?.runCommand ?? DEFAULT_AGENT_COMMAND);\n const adapter = getAdapter(identifier);\n\n const startedAt = new Date().toISOString();\n\n const targetId =\n evalData.evalRun.presetId ?? agent?.id ?? evalData.evalRun.id;\n const targetName = evalData.presetName || agent?.name || '';\n\n // The config bag is the single source of truth for agent settings.\n // Legacy agents that only have modelConfig are migrated at DB-read time\n // (agent.repository.ts lazy migration), so agent.config is always populated.\n const agentConfig = agent?.config;\n\n const resolvedTriggerPrompt = substituteVariables(\n scenario.triggerPrompt,\n evalData.evalRun.variables\n );\n\n const executionContext: AgentExecutionContext = {\n skills: evalData.skills,\n scenario: { ...scenario, triggerPrompt: resolvedTriggerPrompt },\n cwd: workDir || process.cwd(),\n config: agentConfig,\n aiGatewayUrl: config.aiGatewayUrl,\n aiGatewayHeaders: config.aiGatewayHeaders,\n traceContext: {\n evalRunId,\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n targetId,\n targetName,\n pushEvent\n },\n mcps: evalData.mcps.length > 0 ? evalData.mcps : undefined,\n subAgents: evalData.subAgents.length > 0 ? evalData.subAgents : undefined,\n rules: evalData.rules?.length > 0 ? evalData.rules : undefined,\n systemPrompt: agent?.systemPrompt,\n triggerPromptImages:\n scenario.triggerPromptImages && scenario.triggerPromptImages.length > 0\n ? scenario.triggerPromptImages\n : undefined\n };\n\n const hasPrepare = !!adapter.prepareEnvironment;\n\n // Snapshot before prepareEnvironment to detect which files are infrastructure.\n const prePrepSnapshot =\n hasPrepare && workDir ? snapshotDirectory(workDir) : {};\n\n // Let the adapter write infrastructure files (skills, MCPs, rules, etc.)\n // *before* the baseline snapshot so they don't appear as \"new\" in diffs.\n if (hasPrepare) {\n await adapter.prepareEnvironment!(executionContext);\n }\n\n const beforeSnapshot = workDir ? snapshotDirectory(workDir) : {};\n const infrastructurePaths = hasPrepare\n ? deriveInfrastructurePaths(prePrepSnapshot, beforeSnapshot)\n : new Set<string>();\n\n const { outputText, durationMs, llmTrace, conversation } =\n await adapter.execute(executionContext);\n\n const completedAt = new Date().toISOString();\n\n const afterSnapshot = workDir ? snapshotDirectory(workDir) : {};\n const fileDiffs = diffSnapshots(\n beforeSnapshot,\n afterSnapshot,\n infrastructurePaths\n );\n const templateFiles = workDir\n ? extractTemplateFiles(beforeSnapshot, afterSnapshot, infrastructurePaths)\n : undefined;\n\n // Build legacy modelConfig snapshot for result display (historical compat).\n // Extract model params from the config bag, fall back to modelConfig or llmTrace.\n const snapshotModelConfig = agentConfig?.model\n ? {\n model: agentConfig.model as string,\n ...(agentConfig.temperature != null && {\n temperature: agentConfig.temperature as number\n }),\n ...(agentConfig.maxTokens != null && {\n maxTokens: agentConfig.maxTokens as number\n }),\n ...(agentConfig.maxTurns != null && {\n maxTurns: agentConfig.maxTurns as number\n })\n }\n : (agent?.modelConfig ??\n (llmTrace?.summary.modelsUsed?.[0]\n ? { model: llmTrace.summary.modelsUsed[0] }\n : undefined));\n\n return {\n id: randomUUID(),\n targetId,\n targetName,\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n triggerPrompt: resolvedTriggerPrompt,\n modelConfig: snapshotModelConfig,\n duration: durationMs,\n outputText,\n fileDiffs: fileDiffs.length > 0 ? fileDiffs : undefined,\n templateFiles:\n templateFiles && templateFiles.length > 0 ? templateFiles : undefined,\n startedAt,\n completedAt,\n llmTrace,\n conversation\n };\n}\n", "import type { AgentAdapter } from '@wix/evalforge-types';\n\n/**\n * Registry for agent adapters.\n *\n * Supports two lookup strategies:\n * - By CLI command (e.g. 'claude') for CLI-based agents\n * - By adapter ID (e.g. 'simple-agent') for SDK-based agents\n *\n * @example\n * ```typescript\n * const registry = new AgentAdapterRegistry();\n * registry.register(new ClaudeCodeAdapter());\n *\n * const adapter = registry.resolve('claude');\n * if (adapter) {\n * const result = await adapter.execute(context);\n * }\n * ```\n */\nexport class AgentAdapterRegistry {\n /** Map of CLI commands to their registered adapters. */\n private commandMap = new Map<string, AgentAdapter>();\n\n /** Map of adapter IDs to their registered adapters. */\n private idMap = new Map<string, AgentAdapter>();\n\n /** Set of all registered adapter instances (for getAll). */\n private registeredAdapters = new Set<AgentAdapter>();\n\n /**\n * Register an agent adapter.\n *\n * The adapter is registered by its ID and for all commands in its supportedCommands array.\n * If a command or ID is already registered, it will be overwritten with a warning.\n */\n register(adapter: AgentAdapter): void {\n this.registeredAdapters.add(adapter);\n this.idMap.set(adapter.id, adapter);\n\n for (const command of adapter.supportedCommands) {\n if (this.commandMap.has(command)) {\n const existing = this.commandMap.get(command)!;\n console.warn(\n `[AgentAdapterRegistry] Command \"${command}\" already registered by adapter \"${existing.id}\". ` +\n `Overwriting with adapter \"${adapter.id}\".`\n );\n }\n this.commandMap.set(command, adapter);\n }\n }\n\n /** Get an adapter by CLI command. */\n getByCommand(command: string): AgentAdapter | undefined {\n return this.commandMap.get(command);\n }\n\n /** Get an adapter by adapter ID. */\n getById(adapterId: string): AgentAdapter | undefined {\n return this.idMap.get(adapterId);\n }\n\n /**\n * Unified lookup: tries CLI command first, then adapter ID.\n * Use this when the identifier could be either a command or an adapter ID.\n */\n resolve(identifier: string): AgentAdapter | undefined {\n return this.commandMap.get(identifier) ?? this.idMap.get(identifier);\n }\n\n /** Check if a command or adapter ID has a registered adapter. */\n has(identifier: string): boolean {\n return this.commandMap.has(identifier) || this.idMap.has(identifier);\n }\n\n /** Get all registered adapters. */\n getAll(): AgentAdapter[] {\n return Array.from(this.registeredAdapters);\n }\n\n /** Get all supported CLI commands. */\n getSupportedCommands(): string[] {\n return Array.from(this.commandMap.keys());\n }\n\n /** Get all registered adapter IDs. */\n getAdapterIds(): string[] {\n return Array.from(this.idMap.keys());\n }\n\n /**\n * Unregister an adapter by its ID.\n * Removes the adapter and all its command mappings.\n */\n unregister(adapterId: string): boolean {\n let found = false;\n\n for (const adapter of this.registeredAdapters) {\n if (adapter.id === adapterId) {\n this.registeredAdapters.delete(adapter);\n this.idMap.delete(adapterId);\n found = true;\n\n for (const command of adapter.supportedCommands) {\n if (this.commandMap.get(command) === adapter) {\n this.commandMap.delete(command);\n }\n }\n break;\n }\n }\n\n return found;\n }\n\n /** Clear all registered adapters. Primarily useful for testing. */\n clear(): void {\n this.commandMap.clear();\n this.idMap.clear();\n this.registeredAdapters.clear();\n }\n}\n\n/**\n * Default global registry instance.\n * Adapters are auto-registered here when their modules are imported.\n */\nexport const defaultRegistry = new AgentAdapterRegistry();\n\n/**\n * Get an adapter from the default registry.\n *\n * Uses unified lookup (command first, then adapter ID).\n * Throws a helpful error if the adapter is not found.\n */\nexport function getAdapter(identifier: string): AgentAdapter {\n const adapter = defaultRegistry.resolve(identifier);\n if (!adapter) {\n const commands = defaultRegistry.getSupportedCommands();\n const ids = defaultRegistry.getAdapterIds();\n throw new Error(\n `No agent adapter registered for \"${identifier}\". ` +\n `Supported commands: ${commands.length > 0 ? commands.join(', ') : '(none)'}. ` +\n `Registered adapters: ${ids.length > 0 ? ids.join(', ') : '(none)'}`\n );\n }\n return adapter;\n}\n\n/** Check if an identifier has a registered adapter in the default registry. */\nexport function hasAdapter(identifier: string): boolean {\n return defaultRegistry.has(identifier);\n}\n", "import type {\n AgentAdapter,\n AgentExecutionContext,\n AgentExecutionResult,\n ClaudeCodeConfig\n} from '@wix/evalforge-types';\nimport { AgentRunCommand, ClaudeCodeConfigSchema } from '@wix/evalforge-types';\nimport {\n executeWithClaudeCode,\n prepareClaudeCodeEnvironment\n} from './execute.js';\nimport type { ClaudeCodeExecutionOptions } from './types.js';\n\n/**\n * Claude Code agent adapter.\n *\n * Implements the AgentAdapter interface for the Claude Code CLI/SDK.\n * This adapter wraps the existing executeWithClaudeCode function to provide\n * a standardized interface for the evaluation system.\n *\n * Supported commands: 'claude'\n */\nexport class ClaudeCodeAdapter implements AgentAdapter {\n readonly id = 'claude-code';\n readonly name = 'Claude Code';\n readonly supportedCommands = [AgentRunCommand.CLAUDE] as const;\n\n /**\n * Write infrastructure files (settings, MCPs, sub-agents, rules, skills)\n * before the baseline snapshot is taken.\n */\n async prepareEnvironment(context: AgentExecutionContext): Promise<void> {\n await prepareClaudeCodeEnvironment(context.cwd, context.skills, {\n mcps: context.mcps,\n subAgents: context.subAgents,\n rules: context.rules\n });\n }\n\n /**\n * Execute a skill using the Claude Code SDK.\n *\n * @param context - The agent-agnostic execution context\n * @returns The standardized execution result\n */\n async execute(context: AgentExecutionContext): Promise<AgentExecutionResult> {\n const {\n skills,\n scenario,\n cwd,\n config,\n aiGatewayUrl,\n aiGatewayHeaders,\n traceContext,\n mcps,\n subAgents,\n rules,\n systemPrompt\n } = context;\n\n // Parse config with typed Zod schema \u2014 all model + agent-specific params\n const typed = config\n ? ClaudeCodeConfigSchema.passthrough().safeParse(config)\n : undefined;\n const cfg: ClaudeCodeConfig | undefined = typed?.success\n ? typed.data\n : undefined;\n\n // Extract unknown config keys to forward as SDK query option extras\n const schemaKeys = new Set(Object.keys(ClaudeCodeConfigSchema.shape));\n const extras: Record<string, unknown> = {};\n if (config) {\n for (const [key, value] of Object.entries(config)) {\n if (!schemaKeys.has(key)) extras[key] = value;\n }\n }\n\n // maxTurns 0 = unlimited (omit from SDK options)\n const rawMaxTurns = cfg?.maxTurns;\n const maxTurns = rawMaxTurns === 0 ? undefined : rawMaxTurns;\n\n const options: ClaudeCodeExecutionOptions = {\n cwd,\n model: cfg?.model,\n temperature: cfg?.temperature,\n maxTokens: cfg?.maxTokens,\n maxTurns,\n maxThinkingTokens: cfg?.maxThinkingTokens,\n allowedTools: cfg?.allowedTools,\n disallowedTools: cfg?.disallowedTools,\n effort: cfg?.effort,\n maxBudgetUsd: cfg?.maxBudgetUsd,\n maxDurationMs: cfg?.maxDurationMs,\n aiGatewayUrl,\n aiGatewayHeaders,\n traceContext,\n mcps,\n subAgents,\n rules,\n systemPrompt,\n extras\n };\n\n // Execute using the existing Claude Code implementation\n const { result, llmTrace, conversation } = await executeWithClaudeCode(\n skills,\n scenario,\n options\n );\n\n // Map to the agent-agnostic result format\n return {\n outputText: result.outputText,\n durationMs: result.durationMs,\n usage: {\n inputTokens: result.usage.inputTokens,\n outputTokens: result.usage.outputTokens,\n totalTokens: result.usage.totalTokens\n },\n costUsd: result.costUsd,\n llmTrace,\n conversation\n };\n }\n}\n\n/**\n * Singleton instance of the Claude Code adapter.\n */\nexport const claudeCodeAdapter = new ClaudeCodeAdapter();\n", "import type {\n SkillWithLatestVersion,\n TestScenario,\n LLMTrace,\n LiveTraceEvent,\n ConversationMessage,\n TriggerPromptImage\n} from '@wix/evalforge-types';\nimport {\n ClaudeModel,\n DEFAULT_EVALUATOR_SYSTEM_PROMPT,\n LLMStepType,\n LiveTraceEventType\n} from '@wix/evalforge-types';\nimport { writeSkillsToFilesystem } from './write-skills.js';\nimport { resolveTimeoutMs } from '../timeout.js';\nimport { randomUUID } from 'crypto';\nimport type { CapturedStep } from '../../types.js';\nimport type {\n ClaudeCodeExecutionOptions,\n ClaudeCodeExecutionResult,\n TraceContext\n} from './types.js';\nimport { writeMcpToFilesystem } from './write-mcp.js';\nimport { writeSubAgentsToFilesystem } from './write-sub-agents.js';\nimport { writeRulesToFilesystem } from './write-rules.js';\nimport { buildConversation } from './build-conversation.js';\nimport { emitTraceEvent } from '../shared/trace-emit.js';\n\n/**\n * Import SDK types directly from Claude Agent SDK.\n * Type-only imports are erased at compile time - zero runtime overhead.\n * The SDK is still dynamically imported at runtime in executeWithClaudeCode().\n */\nimport type {\n SDKAssistantMessage,\n SDKResultMessage,\n SDKUserMessage,\n SDKSystemMessage,\n SDKMessage\n} from '@anthropic-ai/claude-agent-sdk' with { 'resolution-mode': 'import' };\n\n/**\n * Message with timestamp \u2014 tracks when each message was received.\n */\nexport interface TimestampedMessage {\n message: SDKMessage;\n receivedAt: Date;\n}\n\nconst DEFAULT_MODEL = ClaudeModel.CLAUDE_4_5_SONNET_1_0;\n\n/**\n * Build an async iterable that yields a user message with images.\n * When images are attached to the trigger prompt, this allows multimodal input\n * to the Claude Agent SDK via content blocks (text + image).\n *\n * @param triggerPrompt - The text prompt to send\n * @param images - Array of images with base64 data and metadata\n * @returns An async iterable yielding a single SDKUserMessage\n */\nexport async function* buildPromptStream(\n triggerPrompt: string,\n images: TriggerPromptImage[]\n): AsyncIterable<SDKUserMessage> {\n yield {\n type: 'user',\n message: {\n role: 'user',\n content: [\n { type: 'text', text: triggerPrompt },\n ...images.map((img) => ({\n type: 'image' as const,\n source: {\n type: 'base64' as const,\n data: img.base64,\n media_type: img.mediaType as\n | 'image/jpeg'\n | 'image/png'\n | 'image/gif'\n | 'image/webp'\n }\n }))\n ]\n },\n parent_tool_use_id: null\n } as SDKUserMessage;\n}\n\n/**\n * Extract a meaningful action description from tool name and arguments.\n * This provides more informative progress messages than just \"Using Tool...\".\n *\n * @param toolName - The name of the tool being used\n * @param toolArgs - JSON string of tool arguments\n * @returns A human-readable action description\n */\nfunction extractToolActionDescription(\n toolName: string | undefined,\n toolArgs: string | undefined\n): string {\n if (!toolName) {\n return 'Using tool...';\n }\n\n // Try to parse tool args for more context\n if (toolArgs) {\n try {\n const args = JSON.parse(toolArgs) as Record<string, unknown>;\n\n // Task/SubAgent tool - show the description with tool prefix\n // This makes it clear the agent is waiting for a sub-task to complete\n if (\n (toolName === 'Task' || toolName === 'dispatch_agent') &&\n args.description\n ) {\n const desc = String(args.description).slice(0, 55);\n const truncatedDesc =\n desc.length < String(args.description).length ? `${desc}...` : desc;\n return `Task: ${truncatedDesc}`;\n }\n\n // Bash/Command tool - show the command\n if (\n (toolName === 'Bash' ||\n toolName === 'bash' ||\n toolName === 'execute') &&\n args.command\n ) {\n const cmd = String(args.command).slice(0, 50);\n return `Running: ${cmd}${String(args.command).length > 50 ? '...' : ''}`;\n }\n\n // Search/Grep tool - show the query/pattern\n if (\n toolName === 'Search' ||\n toolName === 'search' ||\n toolName === 'Grep'\n ) {\n const query = args.query || args.pattern || args.search;\n if (query) {\n return `Searching: ${String(query).slice(0, 40)}`;\n }\n }\n\n // List files tool\n if (toolName === 'LS' || toolName === 'ls' || toolName === 'ListFiles') {\n const path = args.path || args.directory || '.';\n return `Listing: ${String(path).slice(0, 50)}`;\n }\n\n // Read tool with file path\n if (\n (toolName === 'Read' || toolName === 'read' || toolName === 'View') &&\n (args.file_path || args.path || args.target_file)\n ) {\n const filePath = String(\n args.file_path || args.path || args.target_file\n ).slice(0, 50);\n return `Reading: ${filePath}`;\n }\n\n // Write/Edit tool with file path\n if (\n (toolName === 'Write' || toolName === 'Edit' || toolName === 'write') &&\n (args.file_path || args.path || args.target_file)\n ) {\n const filePath = String(\n args.file_path || args.path || args.target_file\n ).slice(0, 50);\n return `Writing: ${filePath}`;\n }\n } catch {\n // Failed to parse, use default\n }\n }\n\n // Default: just show tool name\n return `Using ${toolName}...`;\n}\n\n/**\n * Create a trace event from an SDK message.\n * @param message - The SDK message to convert\n * @param context - The trace context\n * @param stepNumber - The current step number\n * @param isComplete - Whether this is the final event\n * @returns The trace event\n */\nfunction createTraceEventFromMessage(\n message: SDKAssistantMessage,\n context: TraceContext,\n stepNumber: number,\n isComplete: boolean\n): LiveTraceEvent {\n let type: LiveTraceEventType = LiveTraceEventType.COMPLETION;\n let toolName: string | undefined;\n let toolArgs: string | undefined;\n let outputPreview: string | undefined;\n let filePath: string | undefined;\n let thinking: string | undefined;\n\n for (const block of message.message.content) {\n if (block.type === 'tool_use') {\n type = LiveTraceEventType.TOOL_USE;\n toolName = block.name;\n toolArgs = JSON.stringify(block.input).slice(0, 500);\n\n const input = block.input as Record<string, unknown>;\n if (input.file_path || input.path || input.target_file) {\n filePath = String(input.file_path || input.path || input.target_file);\n if (\n block.name === 'Write' ||\n block.name === 'Edit' ||\n block.name === 'write' ||\n block.name === 'edit'\n ) {\n type = LiveTraceEventType.FILE_WRITE;\n } else if (\n block.name === 'Read' ||\n block.name === 'read' ||\n block.name === 'View'\n ) {\n type = LiveTraceEventType.FILE_READ;\n }\n }\n } else if (block.type === 'text') {\n outputPreview = block.text.slice(0, 500);\n if (!toolName) {\n type = LiveTraceEventType.COMPLETION;\n }\n } else if (block.type === 'thinking') {\n const thinkingBlock = block as { type: 'thinking'; thinking: string };\n thinking = thinkingBlock.thinking.slice(0, 500);\n if (!outputPreview && !toolName) {\n type = LiveTraceEventType.THINKING;\n }\n }\n }\n\n return {\n evalRunId: context.evalRunId,\n scenarioId: context.scenarioId,\n scenarioName: context.scenarioName,\n targetId: context.targetId,\n targetName: context.targetName,\n stepNumber,\n type,\n toolName,\n toolArgs,\n outputPreview,\n filePath,\n thinking,\n timestamp: new Date().toISOString(),\n isComplete\n };\n}\n\n/**\n * Create a trace event from any SDK message type.\n * @param message - Any SDK message\n * @param context - The trace context\n * @param stepNumber - The current step number\n * @param isComplete - Whether this is the final event\n * @returns The trace event or null if message type is not traceable\n */\nfunction createTraceEventFromAnyMessage(\n message: SDKMessage,\n context: TraceContext,\n stepNumber: number,\n isComplete: boolean\n): LiveTraceEvent | null {\n const baseEvent = {\n evalRunId: context.evalRunId,\n scenarioId: context.scenarioId,\n scenarioName: context.scenarioName,\n targetId: context.targetId,\n targetName: context.targetName,\n stepNumber,\n timestamp: new Date().toISOString(),\n isComplete\n };\n\n if (isAssistantMessage(message)) {\n return createTraceEventFromMessage(\n message,\n context,\n stepNumber,\n isComplete\n );\n }\n\n if (message.type === 'user') {\n const userMsg = message as SDKUserMessage;\n let outputPreview = '';\n\n // Extract preview from user message content\n // Content can be string or array of blocks (text or tool_result)\n const content = userMsg.message?.content;\n if (typeof content === 'string') {\n outputPreview = content.slice(0, 500);\n } else if (Array.isArray(content)) {\n for (const block of content) {\n if (typeof block !== 'object' || block === null) continue;\n const b = block as unknown as Record<string, unknown>;\n if (b.type === 'text' && typeof b.text === 'string') {\n outputPreview = b.text.slice(0, 500);\n break;\n }\n if (b.type === 'tool_result') {\n const raw = b.content;\n const preview =\n typeof raw === 'string'\n ? raw\n : Array.isArray(raw)\n ? (raw as Array<Record<string, unknown>>)\n .filter(\n (c) => c.type === 'text' && typeof c.text === 'string'\n )\n .map((c) => c.text as string)\n .join('\\n')\n : '';\n outputPreview = preview.slice(0, 500);\n break;\n }\n }\n }\n\n return {\n ...baseEvent,\n type: LiveTraceEventType.TOOL_RESULT,\n outputPreview: outputPreview || '(tool result)'\n };\n }\n\n if (message.type === 'system') {\n const sysMsg = message as SDKSystemMessage;\n // SDKSystemMessage has subtype (e.g., 'init') but no 'message' field\n return {\n ...baseEvent,\n type: LiveTraceEventType.SYSTEM,\n outputPreview: sysMsg.subtype || 'system'\n };\n }\n\n if (message.type === 'result') {\n // Result messages indicate completion, already handled elsewhere\n return null;\n }\n\n // Unknown message type - emit as generic progress\n return {\n ...baseEvent,\n type: LiveTraceEventType.PROGRESS,\n outputPreview: `Message type: ${message.type}`\n };\n}\n\n/**\n * Write all infrastructure files (settings, MCPs, sub-agents, rules, skills)\n * to the working directory. Called by the adapter's `prepareEnvironment()` so\n * that the orchestrator can take the baseline snapshot *after* infra is in place.\n */\nexport async function prepareClaudeCodeEnvironment(\n cwd: string,\n skills: SkillWithLatestVersion[],\n options: Pick<ClaudeCodeExecutionOptions, 'mcps' | 'subAgents' | 'rules'>\n): Promise<void> {\n const { mkdir: mkdirAsync, writeFile } = await import('fs/promises');\n const claudeDir = `${cwd}/.claude`;\n await mkdirAsync(claudeDir, { recursive: true });\n await writeFile(`${claudeDir}/settings.json`, '{}', {\n flag: 'wx'\n }).catch(() => {\n // File already exists \u2014 that's fine\n });\n\n if (options.mcps && options.mcps.length > 0) {\n await writeMcpToFilesystem(cwd, options.mcps);\n }\n\n if (options.subAgents && options.subAgents.length > 0) {\n await writeSubAgentsToFilesystem(cwd, options.subAgents);\n }\n\n if (options.rules && options.rules.length > 0) {\n await writeRulesToFilesystem(cwd, options.rules);\n }\n\n try {\n await writeSkillsToFilesystem(cwd, skills);\n } catch (writeError) {\n throw new Error(\n `Failed to write skills to filesystem: ${writeError instanceof Error ? writeError.message : String(writeError)}`\n );\n }\n}\n\n/**\n * Execute skills using the Claude Agent SDK.\n *\n * All skills are written to .claude/skills/<name>/SKILL.md. The SDK discovers\n * them from the filesystem; no system prompt is passed. The agent has access\n * to all skills as a group.\n *\n * @param skills - All skills to execute (each written to its own directory)\n * @param scenario - The test scenario containing the trigger prompt\n * @param options - Execution options (cwd, mcps, etc.)\n * @returns Execution result with output, usage, and LLM trace\n */\nexport async function executeWithClaudeCode(\n skills: SkillWithLatestVersion[],\n scenario: TestScenario,\n options: ClaudeCodeExecutionOptions\n): Promise<{\n result: ClaudeCodeExecutionResult;\n llmTrace: LLMTrace;\n conversation: ConversationMessage[];\n}> {\n const skillNames = skills.map((s) => s.name).join(', ');\n console.log('[executeWithClaudeCode] Starting execution', {\n skillCount: skills.length,\n skillNames,\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n cwd: options.cwd,\n aiGatewayUrl: options.aiGatewayUrl,\n hasAiGatewayHeaders: !!options.aiGatewayHeaders,\n model: options.model\n });\n\n // Dynamic import for ESM module\n let query;\n try {\n const sdk = await import('@anthropic-ai/claude-agent-sdk');\n query = sdk.query;\n } catch (importError) {\n throw new Error(\n `Failed to import Claude Agent SDK: ${importError instanceof Error ? importError.message : String(importError)}`\n );\n }\n\n const startTime = new Date();\n const allMessages: TimestampedMessage[] = [];\n\n // Build environment variables for the SDK\n const sdkEnv = buildSdkEnvironment(options);\n\n // Track step number for trace events\n let traceStepNumber = 0;\n const traceContext = options.traceContext;\n\n // Track the last action for informative heartbeat messages\n let lastAction = 'Starting...';\n let lastToolName: string | undefined;\n let lastFilePath: string | undefined;\n\n // Execute the query using Claude Agent SDK\n // maxTurns undefined = unlimited (SDK default); otherwise use the provided value\n const maxTurns = options.maxTurns || undefined;\n\n let messageCount = 0;\n\n // Custom permission handler that auto-allows all tool usage.\n // This is used instead of 'bypassPermissions' mode because that mode\n // cannot be used when running as root (the dev machine container runs as root).\n // The Claude CLI explicitly blocks --dangerously-skip-permissions for security\n // when running with root/sudo privileges.\n // Must return both `behavior: 'allow'` and `updatedInput` to satisfy\n // the SDK's runtime Zod validation union.\n const canUseTool = async (\n _toolName: string,\n input: Record<string, unknown>\n ) => ({ behavior: 'allow' as const, updatedInput: input });\n\n const baseAllowedTools = options.allowedTools ?? [\n 'Skill',\n 'Read',\n 'Write',\n 'Edit',\n 'Bash',\n 'Glob',\n 'Grep',\n 'Agent',\n 'WebFetch',\n 'WebSearch'\n ];\n const allowedTools =\n (options.mcps?.length ?? 0) > 0\n ? [...baseAllowedTools, 'mcp__*']\n : baseAllowedTools;\n\n // Spread user extras first so explicit adapter fields always win\n const queryOptions: Record<string, unknown> = {\n ...(options.extras ?? {}),\n env: sdkEnv,\n cwd: options.cwd,\n settingSources: ['project'],\n allowedTools,\n ...(options.disallowedTools?.length\n ? { disallowedTools: options.disallowedTools }\n : {}),\n model: options.model || DEFAULT_MODEL,\n maxTurns,\n maxThinkingTokens: options.maxThinkingTokens,\n ...(options.effort ? { effort: options.effort } : {}),\n ...(options.maxBudgetUsd != null\n ? { maxBudgetUsd: options.maxBudgetUsd }\n : {}),\n // Use 'default' permission mode with custom canUseTool handler\n // instead of 'bypassPermissions' which fails on root\n permissionMode: 'default',\n canUseTool\n };\n\n // System prompt override: undefined = default behavioral instructions,\n // null or empty string = no system prompt (raw agent), non-empty string = custom prompt\n if (options.systemPrompt === null || options.systemPrompt === '') {\n // Explicitly disabled -- omit systemPrompt entirely for raw agent behavior\n } else if (options.systemPrompt != null) {\n queryOptions.systemPrompt = {\n type: 'preset',\n preset: 'claude_code',\n append: options.systemPrompt\n };\n } else {\n queryOptions.systemPrompt = {\n type: 'preset',\n preset: 'claude_code',\n append: DEFAULT_EVALUATOR_SYSTEM_PROMPT\n };\n }\n if (options.temperature !== undefined) {\n queryOptions.temperature = options.temperature;\n }\n if (options.maxTokens !== undefined) {\n queryOptions.maxTokens = options.maxTokens;\n }\n\n // Log query options (excluding env which we already logged)\n console.log('[SDK-DEBUG] Query options:');\n console.log('[SDK-DEBUG] model:', queryOptions.model);\n console.log('[SDK-DEBUG] maxTurns:', queryOptions.maxTurns);\n console.log(\n '[SDK-DEBUG] maxThinkingTokens:',\n queryOptions.maxThinkingTokens\n );\n console.log('[SDK-DEBUG] temperature:', queryOptions.temperature);\n console.log('[SDK-DEBUG] maxTokens:', queryOptions.maxTokens);\n console.log('[SDK-DEBUG] permissionMode:', queryOptions.permissionMode);\n console.log(\n '[SDK-DEBUG] canUseTool:',\n queryOptions.canUseTool ? 'custom handler (auto-allow)' : 'not set'\n );\n console.log('[SDK-DEBUG] systemPrompt:', queryOptions.systemPrompt);\n console.log('[SDK-DEBUG] settingSources:', queryOptions.settingSources);\n console.log('[SDK-DEBUG] allowedTools:', queryOptions.allowedTools);\n console.log('[SDK-DEBUG] Calling SDK query()...');\n\n // Emit a diagnostic trace event before calling the SDK\n // This helps identify if the failure happens before or during SDK execution\n if (traceContext) {\n const preExecEvent = {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: 0,\n type: LiveTraceEventType.DIAGNOSTIC,\n outputPreview: JSON.stringify({\n event: 'pre-sdk-execution',\n model: queryOptions.model,\n maxTurns: queryOptions.maxTurns,\n sdkEnv: {\n ANTHROPIC_BASE_URL: sdkEnv.ANTHROPIC_BASE_URL,\n hasANTHROPIC_API_KEY: !!sdkEnv.ANTHROPIC_API_KEY,\n hasANTHROPIC_AUTH_TOKEN: !!sdkEnv.ANTHROPIC_AUTH_TOKEN,\n hasANTHROPIC_CUSTOM_HEADERS: !!sdkEnv.ANTHROPIC_CUSTOM_HEADERS\n },\n timestamp: new Date().toISOString()\n }),\n timestamp: new Date().toISOString(),\n isComplete: false\n };\n emitTraceEvent(preExecEvent, traceContext.pushEvent);\n }\n\n const SDK_TIMEOUT_MS = resolveTimeoutMs(maxTurns, options.maxDurationMs);\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n let timedOut = false;\n\n // Heartbeat interval to emit progress events every 10 seconds\n // This keeps the UI updated during long-running operations\n const HEARTBEAT_INTERVAL_MS = 10000;\n let heartbeatHandle: ReturnType<typeof setInterval> | undefined;\n const executionStartTime = Date.now();\n\n try {\n // Create timeout promise that rejects after SDK_TIMEOUT_MS\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeoutHandle = setTimeout(() => {\n timedOut = true;\n reject(\n new Error(\n `SDK execution timed out after ${SDK_TIMEOUT_MS}ms. ` +\n `Skills: ${skillNames}, Scenario: ${scenario.name}, ` +\n `Messages received: ${messageCount}, MaxTurns: ${maxTurns}`\n )\n );\n }, SDK_TIMEOUT_MS);\n });\n\n // Start heartbeat interval to emit progress events\n if (traceContext) {\n // Track how many heartbeats we've sent for the same action\n let lastReportedAction = '';\n let sameActionCount = 0;\n\n heartbeatHandle = setInterval(() => {\n const elapsedMs = Date.now() - executionStartTime;\n\n // Build informative progress message with last action\n let progressMessage = lastAction;\n\n // Track how long we've been on the same action\n if (lastAction === lastReportedAction) {\n sameActionCount++;\n } else {\n sameActionCount = 1;\n lastReportedAction = lastAction;\n }\n\n // For Task/sub-agent tools, show waiting status after first heartbeat\n const isTaskTool =\n lastToolName === 'Task' || lastToolName === 'dispatch_agent';\n if (isTaskTool && sameActionCount > 1) {\n // Show that we're waiting for the sub-task to complete\n progressMessage = `Waiting for ${lastAction}`;\n } else if (lastToolName && lastFilePath) {\n progressMessage = `${lastToolName}: ${lastFilePath}`;\n } else if (lastToolName && !isTaskTool) {\n progressMessage = `Using ${lastToolName}...`;\n }\n\n // Add elapsed time and step info\n const elapsedSec = Math.round(elapsedMs / 1000);\n progressMessage += ` (${elapsedSec}s, step ${traceStepNumber})`;\n\n const progressEvent: LiveTraceEvent = {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: traceStepNumber,\n type: LiveTraceEventType.PROGRESS,\n outputPreview: progressMessage,\n toolName: lastToolName,\n filePath: lastFilePath,\n elapsedMs,\n timestamp: new Date().toISOString(),\n isComplete: false\n };\n emitTraceEvent(progressEvent, traceContext.pushEvent);\n }, HEARTBEAT_INTERVAL_MS);\n }\n\n // SDK execution promise\n const sdkPromise = (async () => {\n // Build the prompt: either a plain string or an async iterable with images\n const hasImages =\n scenario.triggerPromptImages && scenario.triggerPromptImages.length > 0;\n const prompt = hasImages\n ? buildPromptStream(\n scenario.triggerPrompt,\n scenario.triggerPromptImages!\n )\n : scenario.triggerPrompt;\n\n for await (const message of query({\n prompt,\n options: queryOptions\n })) {\n // Log all messages for debugging and capture timestamp\n messageCount++;\n const receivedAt = new Date();\n console.log('[SDK Message]', JSON.stringify(message, null, 2));\n allMessages.push({ message: message as SDKMessage, receivedAt });\n // Emit live trace events for ALL message types if trace context is provided\n if (traceContext) {\n traceStepNumber++;\n const traceEvent = createTraceEventFromAnyMessage(\n message as SDKMessage,\n traceContext,\n traceStepNumber,\n false // Not complete yet\n );\n if (traceEvent) {\n // Update last action tracking for informative heartbeats\n lastToolName = traceEvent.toolName;\n lastFilePath = traceEvent.filePath;\n if (traceEvent.type === LiveTraceEventType.THINKING) {\n lastAction = 'Thinking...';\n } else if (traceEvent.type === LiveTraceEventType.TOOL_USE) {\n // Try to extract meaningful info from tool args for better progress messages\n lastAction = extractToolActionDescription(\n traceEvent.toolName,\n traceEvent.toolArgs\n );\n } else if (traceEvent.type === LiveTraceEventType.FILE_WRITE) {\n lastAction = `Writing: ${traceEvent.filePath || 'file'}`;\n } else if (traceEvent.type === LiveTraceEventType.FILE_READ) {\n lastAction = `Reading: ${traceEvent.filePath || 'file'}`;\n } else if (traceEvent.type === LiveTraceEventType.COMPLETION) {\n lastAction = 'Processing response...';\n }\n\n emitTraceEvent(traceEvent, traceContext.pushEvent);\n }\n }\n }\n })();\n\n // Race between SDK execution and timeout\n await Promise.race([sdkPromise, timeoutPromise]);\n\n // Clear timeout and heartbeat if SDK completed successfully\n if (timeoutHandle) {\n clearTimeout(timeoutHandle);\n }\n if (heartbeatHandle) {\n clearInterval(heartbeatHandle);\n }\n\n console.log(\n '[executeWithClaudeCode] Claude Agent SDK query completed, received',\n allMessages.length,\n 'messages'\n );\n } catch (sdkError) {\n // Clear timeout and heartbeat on error\n if (timeoutHandle) {\n clearTimeout(timeoutHandle);\n }\n if (heartbeatHandle) {\n clearInterval(heartbeatHandle);\n }\n\n // Log if this was a timeout\n if (timedOut) {\n console.error('[SDK-TIMEOUT] Execution timed out:', sdkError);\n }\n // === COMPREHENSIVE ERROR DEBUGGING ===\n console.error('[SDK-ERROR] ====== CLAUDE SDK EXECUTION FAILED ======');\n console.error('[SDK-ERROR] Timestamp:', new Date().toISOString());\n console.error(\n '[SDK-ERROR] Messages received before failure:',\n messageCount\n );\n\n // Capture basic error info\n const errorMessage =\n sdkError instanceof Error ? sdkError.message : String(sdkError);\n const errorStack = sdkError instanceof Error ? sdkError.stack : undefined;\n const errorName = sdkError instanceof Error ? sdkError.name : 'Unknown';\n\n console.error('[SDK-ERROR] Error name:', errorName);\n console.error('[SDK-ERROR] Error message:', errorMessage);\n\n if (errorStack) {\n console.error('[SDK-ERROR] Full stack trace:');\n console.error(errorStack);\n }\n\n // Extract ALL properties from the error object\n if (sdkError && typeof sdkError === 'object') {\n const errObj = sdkError as Record<string, unknown>;\n console.error('[SDK-ERROR] Error object properties:');\n\n // Log all enumerable properties\n for (const key of Object.keys(errObj)) {\n const value = errObj[key];\n if (value !== undefined && key !== 'stack') {\n try {\n const valueStr =\n typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : String(value);\n console.error(`[SDK-ERROR] ${key}:`, valueStr.substring(0, 1000));\n } catch {\n console.error(`[SDK-ERROR] ${key}: [cannot serialize]`);\n }\n }\n }\n\n // Specifically check for common SDK error properties\n const sdkErrorKeys = [\n 'code',\n 'status',\n 'statusCode',\n 'statusText',\n 'stderr',\n 'stdout',\n 'output',\n 'exitCode',\n 'signal',\n 'killed',\n 'cause',\n 'reason',\n 'details',\n 'response',\n 'request',\n 'config',\n 'errno',\n 'syscall',\n 'path',\n 'spawnargs'\n ];\n\n const extraInfo: Record<string, unknown> = {};\n for (const key of sdkErrorKeys) {\n if (key in errObj && errObj[key] !== undefined) {\n extraInfo[key] = errObj[key];\n }\n }\n\n if (Object.keys(extraInfo).length > 0) {\n console.error('[SDK-ERROR] SDK-specific error details:');\n console.error(JSON.stringify(extraInfo, null, 2));\n }\n\n // Check for nested cause\n if (errObj.cause && typeof errObj.cause === 'object') {\n console.error('[SDK-ERROR] Error cause:');\n try {\n console.error(JSON.stringify(errObj.cause, null, 2));\n } catch {\n console.error('[SDK-ERROR] Error cause: [cannot serialize]');\n }\n }\n }\n\n // Log execution context\n console.error('[SDK-ERROR] Execution context:');\n console.error('[SDK-ERROR] skillCount:', skills.length);\n console.error('[SDK-ERROR] skillNames:', skillNames);\n console.error('[SDK-ERROR] scenarioId:', scenario.id);\n console.error('[SDK-ERROR] scenarioName:', scenario.name);\n console.error('[SDK-ERROR] cwd:', options.cwd);\n console.error('[SDK-ERROR] model:', options.model || DEFAULT_MODEL);\n console.error('[SDK-ERROR] aiGatewayUrl:', options.aiGatewayUrl);\n console.error(\n '[SDK-ERROR] hasAiGatewayHeaders:',\n !!options.aiGatewayHeaders\n );\n\n // Log environment info that might be relevant\n console.error('[SDK-ERROR] Environment info:');\n console.error('[SDK-ERROR] NODE_ENV:', process.env.NODE_ENV);\n console.error('[SDK-ERROR] HOME:', process.env.HOME);\n console.error('[SDK-ERROR] USER:', process.env.USER);\n console.error('[SDK-ERROR] SHELL:', process.env.SHELL);\n\n console.error('[SDK-ERROR] ==========================================');\n\n // Re-throw with comprehensive context - include ALL debug info for backend visibility\n const errObj = sdkError as Record<string, unknown>;\n\n // Capture SDK-specific properties that are critical for debugging\n const sdkSpecificInfo: Record<string, unknown> = {};\n const sdkErrorKeys = [\n 'exitCode',\n 'stderr',\n 'stdout',\n 'signal',\n 'killed',\n 'code',\n 'status',\n 'errno',\n 'syscall',\n 'spawnargs'\n ];\n for (const key of sdkErrorKeys) {\n if (errObj && key in errObj && errObj[key] !== undefined) {\n // Truncate long strings to avoid huge error messages\n const val = errObj[key];\n if (typeof val === 'string' && val.length > 500) {\n sdkSpecificInfo[key] = val.substring(0, 500) + '... [truncated]';\n } else {\n sdkSpecificInfo[key] = val;\n }\n }\n }\n\n // Capture cause if present\n let causeInfo: string | undefined;\n if (errObj?.cause && typeof errObj.cause === 'object') {\n try {\n const causeStr = JSON.stringify(errObj.cause, null, 2);\n causeInfo =\n causeStr.length > 500\n ? causeStr.substring(0, 500) + '... [truncated]'\n : causeStr;\n } catch {\n causeInfo = '[cannot serialize cause]';\n }\n }\n\n // Capture SDK environment configuration for debugging\n const sdkEnvDebug = {\n ANTHROPIC_BASE_URL: sdkEnv.ANTHROPIC_BASE_URL,\n hasANTHROPIC_API_KEY: !!sdkEnv.ANTHROPIC_API_KEY,\n hasANTHROPIC_AUTH_TOKEN: !!sdkEnv.ANTHROPIC_AUTH_TOKEN,\n hasANTHROPIC_CUSTOM_HEADERS: !!sdkEnv.ANTHROPIC_CUSTOM_HEADERS,\n ANTHROPIC_CUSTOM_HEADERS_preview: sdkEnv.ANTHROPIC_CUSTOM_HEADERS\n ? sdkEnv.ANTHROPIC_CUSTOM_HEADERS.split('\\n')\n .map((h) => h.split(':')[0])\n .join(', ')\n : undefined\n };\n\n const errorDetails = {\n messageCount,\n errorName,\n errorMessage,\n skillCount: skills.length,\n skillNames,\n scenarioId: scenario.id,\n model: options.model || DEFAULT_MODEL,\n sdkEnv: sdkEnvDebug,\n sdkError:\n Object.keys(sdkSpecificInfo).length > 0 ? sdkSpecificInfo : undefined,\n cause: causeInfo\n };\n\n // Emit error trace event for visibility in the UI\n if (traceContext) {\n const errorTraceEvent = {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: traceStepNumber + 1,\n type: LiveTraceEventType.DIAGNOSTIC,\n outputPreview: JSON.stringify(\n {\n event: 'sdk-execution-failed',\n error: errorMessage,\n errorName,\n messageCount,\n sdkEnv: sdkEnvDebug,\n sdkError: sdkSpecificInfo,\n cause: causeInfo\n },\n null,\n 2\n ).slice(0, 2000),\n timestamp: new Date().toISOString(),\n isComplete: true\n };\n emitTraceEvent(errorTraceEvent, traceContext.pushEvent);\n }\n\n throw new Error(\n `Claude SDK execution failed after ${messageCount} messages: ${errorMessage}` +\n `\\nDetails: ${JSON.stringify(errorDetails, null, 2)}` +\n (errorStack\n ? `\\nStack: ${errorStack.split('\\n').slice(0, 5).join('\\n')}`\n : '')\n );\n }\n\n // Emit completion trace event\n if (traceContext) {\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: traceStepNumber + 1,\n type: LiveTraceEventType.COMPLETION,\n outputPreview: 'Scenario execution completed',\n timestamp: new Date().toISOString(),\n isComplete: true\n },\n traceContext.pushEvent\n );\n }\n\n const endTime = new Date();\n const totalDurationMs = endTime.getTime() - startTime.getTime();\n\n // Process messages into steps for trace building\n const { steps, result: sdkResult } = processMessages(\n allMessages,\n startTime,\n endTime\n );\n\n // Extract final output, surfacing SDK errors if no output was produced\n const rawOutput = extractFinalOutput(allMessages);\n const isError = sdkResult?.subtype !== 'success';\n let outputText = rawOutput;\n if (!rawOutput && isError) {\n const hasErrors =\n sdkResult && 'errors' in sdkResult && sdkResult.errors?.length;\n const errorDetails = hasErrors\n ? (sdkResult.errors as string[]).join('; ')\n : (sdkResult?.subtype ?? 'unknown');\n outputText = `[ERROR] Agent execution failed: ${errorDetails}`;\n }\n const usage = extractTotalUsage(sdkResult);\n\n // Build LLM trace from captured steps\n const llmTrace = buildLLMTraceFromSteps(\n steps,\n totalDurationMs,\n usage,\n options.model || DEFAULT_MODEL\n );\n\n const conversation = buildConversation(allMessages);\n\n return {\n result: {\n outputText,\n durationMs: totalDurationMs,\n usage: {\n inputTokens: usage.inputTokens,\n outputTokens: usage.outputTokens,\n totalTokens: usage.totalTokens\n },\n costUsd: usage.costUsd\n },\n llmTrace,\n conversation\n };\n}\n\n/**\n * Build environment variables for the Claude Agent SDK.\n *\n * Starts with process.env to preserve PATH and other necessary variables,\n * then adds AI Gateway configuration:\n * - ANTHROPIC_BASE_URL: The gateway URL\n * - ANTHROPIC_CUSTOM_HEADERS: Headers in \"key:value\\nkey2:value2\" format\n *\n * @param options - Execution options containing gateway configuration\n * @returns Environment variables object for the SDK\n */\nfunction buildSdkEnvironment(\n options: ClaudeCodeExecutionOptions\n): Record<string, string | undefined> {\n // Start with process.env to preserve PATH and other necessary variables\n const env: Record<string, string | undefined> = { ...process.env };\n\n // The Claude Agent SDK requires ANTHROPIC_API_KEY in the environment.\n // We use a placeholder token because actual authentication is handled by the AI Gateway\n // via ANTHROPIC_BASE_URL and ANTHROPIC_CUSTOM_HEADERS.\n // The key format matches Anthropic's API key format (sk-ant-...) to pass any validation.\n // Note: Both ANTHROPIC_API_KEY and ANTHROPIC_AUTH_TOKEN are set for compatibility\n // with different SDK versions and internal validation.\n const placeholderApiKey =\n 'sk-ant-api03-placeholder-auth-handled-by-gateway-000000000000000000000000';\n env.ANTHROPIC_API_KEY = placeholderApiKey;\n env.ANTHROPIC_AUTH_TOKEN = placeholderApiKey;\n\n // Set the base URL for the Anthropic API (points to our AI Gateway)\n if (options.aiGatewayUrl) {\n env.ANTHROPIC_BASE_URL = `${options.aiGatewayUrl}/proxy/anthropic`;\n }\n\n // Format headers as \"key:value\\nkey2:value2\"\n // These headers contain the actual authentication for the AI Gateway\n if (options.aiGatewayHeaders) {\n const headerLines = Object.entries(options.aiGatewayHeaders)\n .map(([key, value]) => `${key}:${value}`)\n .join('\\n');\n env.ANTHROPIC_CUSTOM_HEADERS = headerLines;\n }\n\n return env;\n}\n\n/**\n * Type guard for assistant messages.\n */\nfunction isAssistantMessage(\n message: SDKMessage\n): message is SDKAssistantMessage {\n return message.type === 'assistant';\n}\n\n/**\n * Type guard for result messages.\n */\nfunction isResultMessage(message: SDKMessage): message is SDKResultMessage {\n return message.type === 'result';\n}\n\n/**\n * Process SDK messages into CapturedSteps for LLM trace building.\n * Uses actual timestamps from when messages were received to calculate durations.\n */\nexport function processMessages(\n timestampedMessages: TimestampedMessage[],\n startTime: Date,\n endTime: Date\n): {\n steps: CapturedStep[];\n result?: SDKResultMessage;\n} {\n const steps: CapturedStep[] = [];\n let result: SDKResultMessage | undefined;\n\n // Group assistant messages by UUID to combine streaming chunks\n // Track both the messages and their timestamps\n const assistantMessageGroups = new Map<\n string,\n {\n messages: SDKAssistantMessage[];\n firstReceivedAt: Date;\n lastReceivedAt: Date;\n }\n >();\n\n for (const { message, receivedAt } of timestampedMessages) {\n if (isAssistantMessage(message)) {\n const uuid = message.uuid;\n if (!assistantMessageGroups.has(uuid)) {\n assistantMessageGroups.set(uuid, {\n messages: [],\n firstReceivedAt: receivedAt,\n lastReceivedAt: receivedAt\n });\n }\n const group = assistantMessageGroups.get(uuid)!;\n group.messages.push(message);\n group.lastReceivedAt = receivedAt;\n } else if (isResultMessage(message)) {\n result = message;\n }\n }\n\n // Convert to array and sort by first received time to maintain order\n const sortedGroups = Array.from(assistantMessageGroups.values()).sort(\n (a, b) => a.firstReceivedAt.getTime() - b.firstReceivedAt.getTime()\n );\n\n // Merge consecutive UUID groups that share the same input_tokens into a\n // single \"API turn\". The SDK often emits separate messages (with different\n // UUIDs) for thinking, text, and tool_use within one API call \u2014 each\n // reporting the same cumulative input_tokens.\n type MergedTurn = {\n groups: typeof sortedGroups;\n firstReceivedAt: Date;\n lastReceivedAt: Date;\n };\n const mergedTurns: MergedTurn[] = [];\n for (const group of sortedGroups) {\n const lastMsg = group.messages[group.messages.length - 1];\n const inputTokens = lastMsg.message.usage.input_tokens;\n const prev = mergedTurns[mergedTurns.length - 1];\n const prevLastMsg = prev?.groups[prev.groups.length - 1].messages.at(-1);\n const prevInputTokens = prevLastMsg?.message.usage.input_tokens;\n\n if (prev && prevInputTokens === inputTokens) {\n prev.groups.push(group);\n prev.lastReceivedAt = group.lastReceivedAt;\n } else {\n mergedTurns.push({\n groups: [group],\n firstReceivedAt: group.firstReceivedAt,\n lastReceivedAt: group.lastReceivedAt\n });\n }\n }\n\n // Build a CapturedStep from each merged turn\n for (let i = 0; i < mergedTurns.length; i++) {\n const turn = mergedTurns[i];\n const stepStartTime = turn.firstReceivedAt;\n const nextStepStartTime =\n i < mergedTurns.length - 1 ? mergedTurns[i + 1].firstReceivedAt : endTime;\n const durationMs = nextStepStartTime.getTime() - stepStartTime.getTime();\n\n let text = '';\n let thinking = '';\n const toolCalls: Array<{\n toolName: string;\n toolUseId?: string;\n args: unknown;\n }> = [];\n let lastStopReason: string | null = null;\n let inputTokens = 0;\n let outputTokens = 0;\n let cacheReadTokens: number | undefined;\n let cacheWriteTokens: number | undefined;\n\n for (const group of turn.groups) {\n const lastMessage = group.messages[group.messages.length - 1];\n lastStopReason = lastMessage.message.stop_reason;\n\n // Use usage from the last group (they're identical within a turn)\n const msgUsage = lastMessage.message.usage;\n inputTokens = msgUsage.input_tokens;\n outputTokens = msgUsage.output_tokens;\n cacheReadTokens = msgUsage.cache_read_input_tokens ?? undefined;\n cacheWriteTokens = msgUsage.cache_creation_input_tokens ?? undefined;\n\n for (const block of lastMessage.message.content) {\n if (block.type === 'text') {\n text += block.text;\n } else if (block.type === 'thinking') {\n thinking += (block as { type: 'thinking'; thinking: string })\n .thinking;\n } else if (block.type === 'tool_use') {\n toolCalls.push({\n toolName: block.name,\n toolUseId: (block as { id?: string }).id,\n args: block.input\n });\n }\n }\n }\n\n steps.push({\n text,\n thinking: thinking || undefined,\n usage: {\n inputTokens,\n outputTokens,\n totalTokens: inputTokens + outputTokens,\n cacheReadTokens: cacheReadTokens || undefined,\n cacheWriteTokens: cacheWriteTokens || undefined\n },\n finishReason: mapStopReason(lastStopReason),\n toolCalls: toolCalls.length > 0 ? toolCalls : undefined,\n startedAt: stepStartTime,\n durationMs: Math.max(0, durationMs)\n });\n }\n\n // Correlate tool results from user messages to mark tool call errors.\n // Build a map of tool_use_id \u2192 error info from user messages.\n const toolResultErrors = new Map<string, string>();\n for (const { message } of timestampedMessages) {\n if (message.type !== 'user') continue;\n const content = (message as SDKUserMessage).message?.content;\n if (!Array.isArray(content)) continue;\n for (const block of content) {\n if (typeof block !== 'object' || block === null) continue;\n const b = block as unknown as Record<string, unknown>;\n if (\n b.type === 'tool_result' &&\n b.is_error === true &&\n typeof b.tool_use_id === 'string'\n ) {\n const errorContent =\n typeof b.content === 'string'\n ? b.content\n : Array.isArray(b.content)\n ? (b.content as Array<Record<string, unknown>>)\n .filter(\n (c) => c.type === 'text' && typeof c.text === 'string'\n )\n .map((c) => c.text as string)\n .join('\\n')\n : 'Tool call failed';\n toolResultErrors.set(b.tool_use_id, errorContent.slice(0, 500));\n }\n }\n }\n\n if (toolResultErrors.size > 0) {\n for (const step of steps) {\n if (!step.toolCalls) continue;\n for (const tc of step.toolCalls) {\n if (tc.toolUseId && toolResultErrors.has(tc.toolUseId)) {\n tc.isError = true;\n tc.errorContent = toolResultErrors.get(tc.toolUseId);\n if (!step.hasToolError) {\n step.hasToolError = true;\n step.toolErrorContent = tc.errorContent;\n }\n }\n }\n }\n }\n\n return { steps, result };\n}\n\n/**\n * Map Anthropic stop reason to standard finish reason.\n */\nfunction mapStopReason(stopReason: string | null): string {\n switch (stopReason) {\n case 'end_turn':\n case 'stop_sequence':\n return 'stop';\n case 'tool_use':\n return 'tool-calls';\n case 'max_tokens':\n return 'length';\n default:\n return 'unknown';\n }\n}\n\n/**\n * Extract final output text from messages.\n */\nfunction extractFinalOutput(timestampedMessages: TimestampedMessage[]): string {\n // Find the last assistant message with text content\n for (let i = timestampedMessages.length - 1; i >= 0; i--) {\n const { message } = timestampedMessages[i];\n if (isAssistantMessage(message)) {\n for (const block of message.message.content) {\n if (block.type === 'text' && block.text) {\n return block.text;\n }\n }\n }\n }\n return '';\n}\n\n/**\n * Extract total usage from result message.\n */\nfunction extractTotalUsage(result: SDKResultMessage | undefined): {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n costUsd?: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n durationApiMs?: number;\n} {\n if (!result) {\n return { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n }\n\n const usage = result.usage;\n return {\n inputTokens: usage.input_tokens,\n outputTokens: usage.output_tokens,\n totalTokens: usage.input_tokens + usage.output_tokens,\n costUsd: result.total_cost_usd,\n cacheReadTokens: usage.cache_read_input_tokens || undefined,\n cacheWriteTokens: usage.cache_creation_input_tokens || undefined,\n durationApiMs: result.duration_api_ms || undefined\n };\n}\n\n/**\n * Build LLM trace from captured steps.\n * Calculates per-step costs using model pricing and sums tokens from steps as fallback.\n */\nexport function buildLLMTraceFromSteps(\n steps: CapturedStep[],\n totalDurationMs: number,\n usage: {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n costUsd?: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n durationApiMs?: number;\n },\n model: string\n): LLMTrace {\n const totalCost = usage.costUsd ?? 0;\n\n // Use \"effective\" input tokens (input + cache_read + cache_write) for\n // proportion calculations. The Anthropic API reports `input_tokens`\n // excluding cached tokens, so later turns with heavy caching can report\n // near-zero input_tokens while cache_read_input_tokens is large.\n // Using only input_tokens would starve cached turns of their fair share.\n const effectiveInput = (s: CapturedStep) =>\n s.usage.inputTokens +\n (s.usage.cacheReadTokens ?? 0) +\n (s.usage.cacheWriteTokens ?? 0);\n\n // The SDK may send multiple SDKAssistantMessages per API turn (thinking,\n // text, tool_use) each with a different UUID but reporting the SAME\n // cumulative input_tokens for that turn. Detect this by comparing the\n // per-step input sum against the result's authoritative total.\n // When duplicated, fall back to distributing by duration proportion.\n const totalStepEffectiveInput = steps.reduce(\n (sum, s) => sum + effectiveInput(s),\n 0\n );\n const totalStepDuration = steps.reduce((sum, s) => sum + s.durationMs, 0);\n const authoritativeEffectiveInput =\n usage.inputTokens +\n (usage.cacheReadTokens ?? 0) +\n (usage.cacheWriteTokens ?? 0);\n // 1.2x threshold: when per-step input tokens sum to >120% of the authoritative\n // total, the SDK duplicated cumulative counts across split messages within a\n // single API turn. The 20% buffer accounts for minor rounding differences.\n const inputTokensDuplicated =\n authoritativeEffectiveInput > 0 &&\n totalStepEffectiveInput > authoritativeEffectiveInput * 1.2;\n\n const traceSteps = steps\n .flatMap((step, turnIndex) => {\n let stepPromptTokens: number;\n let stepOutputTokens: number;\n let proportion: number;\n\n if (inputTokensDuplicated) {\n proportion =\n totalStepDuration > 0 ? step.durationMs / totalStepDuration : 0;\n stepPromptTokens = Math.round(usage.inputTokens * proportion);\n stepOutputTokens = Math.round(usage.outputTokens * proportion);\n } else {\n const stepEffective = effectiveInput(step);\n proportion =\n totalStepEffectiveInput > 0\n ? stepEffective / totalStepEffectiveInput\n : 0;\n stepPromptTokens = Math.round(usage.inputTokens * proportion);\n stepOutputTokens = Math.round(usage.outputTokens * proportion);\n }\n\n const costProportion = proportion;\n const toolCallCount = step.toolCalls?.length ?? 0;\n const isSuccess = step.finishReason !== 'error' && !step.hasToolError;\n const errorMsg = step.hasToolError\n ? (step.toolErrorContent ?? 'Tool call failed')\n : step.finishReason === 'error'\n ? 'Generation failed'\n : undefined;\n\n // Build a list of sub-steps for this turn. When the SDK merges\n // thinking, text, and tool_use into a single turn we split them\n // into separate trace steps for full visibility.\n const subSteps: Array<{\n id: string;\n stepNumber: number;\n turnIndex: number;\n type: LLMStepType;\n model: string;\n provider: string;\n startedAt: string;\n durationMs: number;\n tokenUsage: { prompt: number; completion: number; total: number };\n costUsd: number;\n toolName?: string;\n toolArguments?: string;\n outputPreview?: string;\n success: boolean;\n error?: string;\n }> = [];\n\n const stepCost = totalCost * costProportion;\n const hasThinking = !!step.thinking;\n const hasText = !!step.text;\n // Count how many sub-steps we'll produce so we can distribute tokens\n const thinkingSubSteps = hasThinking ? 1 : 0;\n const toolSubSteps = toolCallCount > 0 ? toolCallCount : 0;\n const textSubSteps = hasText && toolCallCount > 0 ? 1 : 0; // text step only when tools also present\n const totalSubSteps = thinkingSubSteps + toolSubSteps + textSubSteps || 1;\n\n // Emit a THINKING sub-step when thinking co-exists with text or tools\n if (hasThinking && (hasText || toolCallCount > 0)) {\n subSteps.push({\n id: randomUUID(),\n stepNumber: 0, // renumbered below\n turnIndex,\n type: LLMStepType.THINKING,\n model,\n provider: 'anthropic',\n startedAt: step.startedAt.toISOString(),\n durationMs: Math.round(step.durationMs / totalSubSteps),\n tokenUsage: {\n prompt: Math.round(stepPromptTokens / totalSubSteps),\n completion: Math.round(stepOutputTokens / totalSubSteps),\n total: Math.round(\n (stepPromptTokens + stepOutputTokens) / totalSubSteps\n )\n },\n costUsd: stepCost / totalSubSteps,\n outputPreview: step.thinking?.slice(0, 200),\n success: true,\n error: undefined\n });\n }\n\n // Emit TOOL_USE sub-steps \u2014 one per tool call\n if (toolCallCount > 0) {\n for (let tcIdx = 0; tcIdx < toolCallCount; tcIdx++) {\n const tc = step.toolCalls![tcIdx];\n const isLast = tcIdx === toolCallCount - 1 && textSubSteps === 0;\n // Remaining budget after thinking step\n const toolBudgetSteps = toolSubSteps + textSubSteps;\n const toolFraction = toolBudgetSteps > 0 ? 1 / toolBudgetSteps : 1;\n const remainingFraction =\n (totalSubSteps - thinkingSubSteps) / totalSubSteps;\n const toolSuccess = !tc.isError;\n const toolError = tc.isError\n ? (tc.errorContent ?? 'Tool call failed')\n : undefined;\n\n subSteps.push({\n id: randomUUID(),\n stepNumber: 0,\n turnIndex,\n type: LLMStepType.TOOL_USE,\n model,\n provider: 'anthropic',\n startedAt: step.startedAt.toISOString(),\n durationMs: isLast\n ? step.durationMs -\n subSteps.reduce((s, ss) => s + ss.durationMs, 0)\n : Math.round(step.durationMs * remainingFraction * toolFraction),\n tokenUsage: {\n prompt: Math.round(\n stepPromptTokens * remainingFraction * toolFraction\n ),\n completion: Math.round(\n stepOutputTokens * remainingFraction * toolFraction\n ),\n total: Math.round(\n (stepPromptTokens + stepOutputTokens) *\n remainingFraction *\n toolFraction\n )\n },\n costUsd: stepCost * remainingFraction * toolFraction,\n toolName: tc.toolName,\n toolArguments: JSON.stringify(tc.args),\n outputPreview:\n tcIdx === 0 && !hasText\n ? (step.text || step.thinking)?.slice(0, 200)\n : undefined,\n success: toolSuccess,\n error: toolError\n });\n }\n }\n\n // Emit a COMPLETION sub-step for text when tools were also present\n // (otherwise the text output would be lost)\n if (hasText && toolCallCount > 0) {\n subSteps.push({\n id: randomUUID(),\n stepNumber: 0,\n turnIndex,\n type: LLMStepType.COMPLETION,\n model,\n provider: 'anthropic',\n startedAt: step.startedAt.toISOString(),\n durationMs:\n step.durationMs - subSteps.reduce((s, ss) => s + ss.durationMs, 0),\n tokenUsage: {\n prompt:\n stepPromptTokens -\n subSteps.reduce((s, ss) => s + ss.tokenUsage.prompt, 0),\n completion:\n stepOutputTokens -\n subSteps.reduce((s, ss) => s + ss.tokenUsage.completion, 0),\n total:\n stepPromptTokens +\n stepOutputTokens -\n subSteps.reduce((s, ss) => s + ss.tokenUsage.total, 0)\n },\n costUsd: stepCost - subSteps.reduce((s, ss) => s + ss.costUsd, 0),\n outputPreview: step.text?.slice(0, 200),\n success: true,\n error: undefined\n });\n }\n\n // Fallback: if no sub-steps were produced (pure text or pure thinking),\n // emit a single step as before.\n if (subSteps.length === 0) {\n const stepType =\n hasThinking && !hasText\n ? LLMStepType.THINKING\n : LLMStepType.COMPLETION;\n subSteps.push({\n id: randomUUID(),\n stepNumber: 0,\n turnIndex,\n type: stepType,\n model,\n provider: 'anthropic',\n startedAt: step.startedAt.toISOString(),\n durationMs: step.durationMs,\n tokenUsage: {\n prompt: stepPromptTokens,\n completion: stepOutputTokens,\n total: stepPromptTokens + stepOutputTokens\n },\n costUsd: stepCost,\n outputPreview: (step.text || step.thinking)?.slice(0, 200),\n success: isSuccess,\n error: errorMsg\n });\n }\n\n return subSteps;\n })\n .map((s, i) => ({ ...s, stepNumber: i + 1 }));\n\n const finalTokens = {\n prompt: usage.inputTokens,\n completion: usage.outputTokens,\n total: usage.totalTokens\n };\n\n // Build stepTypeBreakdown by grouping trace steps by type\n const stepTypeBreakdown: Record<\n string,\n { count: number; durationMs: number; tokens: number; costUsd: number }\n > = {};\n for (const ts of traceSteps) {\n const entry = stepTypeBreakdown[ts.type] ?? {\n count: 0,\n durationMs: 0,\n tokens: 0,\n costUsd: 0\n };\n entry.count += 1;\n entry.durationMs += ts.durationMs;\n entry.tokens += ts.tokenUsage.total;\n entry.costUsd += ts.costUsd;\n stepTypeBreakdown[ts.type] = entry;\n }\n\n const summary = {\n totalSteps: traceSteps.length,\n totalTurns: steps.length,\n totalDurationMs,\n totalTokens: finalTokens,\n totalCostUsd: totalCost,\n modelBreakdown: {\n [model]: {\n count: traceSteps.length,\n durationMs: totalDurationMs,\n tokens: finalTokens.total,\n costUsd: totalCost\n }\n },\n modelsUsed: [model],\n stepTypeBreakdown\n };\n\n return {\n id: randomUUID(),\n steps: traceSteps,\n summary\n };\n}\n", "import { mkdir } from 'fs/promises';\nimport { join } from 'path';\nimport type { SkillWithLatestVersion } from '@wix/evalforge-types';\nimport {\n resolveSkillFiles,\n type FetchGitHubFolderFn\n} from '../shared/resolve-capability-content.js';\nimport { writeFilesToDirectory } from '../../utils/write-files.js';\n\nexport type { FetchGitHubFolderFn };\n\n/**\n * Write all skills to the filesystem so Claude Agent SDK can discover them.\n * Content is resolved by the shared capability fetcher (stored snapshot or\n * live GitHub fetch).\n *\n * @param cwd - Working directory where .claude/skills/ will be created\n * @param skills - All skills to write\n * @param fetchFn - Optional GitHub folder fetcher (injectable for tests)\n */\nexport async function writeSkillsToFilesystem(\n cwd: string,\n skills: SkillWithLatestVersion[],\n fetchFn?: FetchGitHubFolderFn\n): Promise<void> {\n await Promise.all(\n skills.map((skill) => writeSkillToFilesystem(cwd, skill, fetchFn))\n );\n}\n\nexport async function writeSkillToFilesystem(\n cwd: string,\n skill: SkillWithLatestVersion,\n fetchFn?: FetchGitHubFolderFn\n): Promise<void> {\n const skillDir = join(cwd, '.claude', 'skills', skill.name);\n await mkdir(skillDir, { recursive: true });\n\n try {\n const files = await resolveSkillFiles(skill, fetchFn);\n await writeFilesToDirectory(skillDir, files);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n throw new Error(\n `Failed to write skill ${skill.name} to filesystem: ${message}`\n );\n }\n}\n\n/**\n * Write skill files from a snapshot array to the filesystem.\n * @deprecated Use writeFilesToDirectory from utils/write-files.ts instead\n */\nexport const writeSkillFiles = writeFilesToDirectory;\n", "/**\n * Capability content fetcher.\n *\n * Single place that resolves the runtime content of a capability for an eval\n * run, choosing between two sources:\n * 1. DB snapshot \u2014 the stored version content already loaded onto the entity\n * (skill version files, sub-agent markdown, rule text, MCP config).\n * 2. Live GitHub \u2014 when the entity has a `source` and no usable snapshot,\n * the latest content is fetched from GitHub at run time.\n *\n * Shared by every agent runner (claude-code, opencode) and every capability\n * type so the GitHub-vs-DB decision lives in exactly one place.\n */\n\nimport {\n fetchGitHubFile,\n fetchGitHubFolder,\n type FetchGitHubFolderOptions\n} from '@wix/evalforge-github-client';\nimport type {\n GitHubSource,\n SkillFile,\n SkillWithLatestVersion,\n SubAgent,\n Rule,\n MCPEntity\n} from '@wix/evalforge-types';\nimport { MCP_SERVERS_JSON_KEY } from '@wix/evalforge-types';\n\nconst USER_AGENT = 'EvalForge-Evaluator';\n\n/** Fetches a single file from GitHub and returns its UTF-8 content. */\nexport type FetchGitHubFileFn = (\n source: GitHubSource,\n options?: FetchGitHubFolderOptions\n) => Promise<string>;\n\n/** Fetches a directory snapshot from GitHub and returns its files. */\nexport type FetchGitHubFolderFn = (\n source: GitHubSource,\n options?: { userAgent?: string }\n) => Promise<SkillFile[]>;\n\n/**\n * Resolve the files for a skill: the stored version snapshot when present,\n * otherwise a live folder fetch from GitHub. Throws when neither is available.\n */\nexport async function resolveSkillFiles(\n skill: SkillWithLatestVersion,\n fetchFn: FetchGitHubFolderFn = fetchGitHubFolder\n): Promise<SkillFile[]> {\n const version = skill.latestVersion;\n if (version?.files && version.files.length > 0) {\n console.log(\n `[Skill] ${skill.name}: using ${version.files.length} file(s) from snapshot`\n );\n return version.files;\n }\n if (skill.source) {\n const files = await fetchFn(skill.source, { userAgent: USER_AGENT });\n console.log(\n `[Skill] ${skill.name}: fetched ${files.length} file(s) from GitHub (live)`\n );\n return files;\n }\n throw new Error(`Skill ${skill.name} has no files and no source configured`);\n}\n\n/**\n * Live-fetch a single source file with consistent logging and error wrapping.\n * `noun` appears in the thrown message (e.g. \"sub-agent\", \"rule\", \"MCP\").\n */\nasync function fetchSourceFile(\n label: string,\n noun: string,\n name: string,\n source: GitHubSource,\n fetchFn: FetchGitHubFileFn\n): Promise<string> {\n try {\n const content = await fetchFn(source, { userAgent: USER_AGENT });\n console.log(\n `[${label}] Fetched \"${name}\" from ${source.owner}/${source.repo}/${source.path}@${source.ref}`\n );\n return content;\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n console.error(`[${label}] \"${name}\": GitHub fetch failed: ${message}`);\n throw new Error(\n `Failed to fetch ${noun} \"${name}\" from GitHub: ${message}`\n );\n }\n}\n\n/**\n * Resolve a sub-agent's markdown: live-fetch when a source is set, else the\n * inline `subAgentMd`.\n */\nexport async function resolveSubAgentMd(\n agent: SubAgent,\n fetchFn: FetchGitHubFileFn = fetchGitHubFile\n): Promise<string> {\n if (agent.source) {\n return fetchSourceFile(\n 'SubAgents',\n 'sub-agent',\n agent.name,\n agent.source,\n fetchFn\n );\n }\n if (!agent.subAgentMd) {\n console.warn(\n `[SubAgents] \"${agent.name}\" has empty inline content \u2013 the agent file will be blank`\n );\n }\n return agent.subAgentMd;\n}\n\n/**\n * Resolve a rule's text content: live-fetch when a source is set, else the\n * inline `content`.\n */\nexport async function resolveRuleText(\n rule: Rule,\n fetchFn: FetchGitHubFileFn = fetchGitHubFile\n): Promise<string> {\n if (!rule.source) {\n return rule.content;\n }\n return fetchSourceFile('Rules', 'rule', rule.name, rule.source, fetchFn);\n}\n\n/**\n * Resolve an MCP's keyed server config: live-fetch and parse the JSON config\n * file when a source is set (unwrapping a top-level `mcpServers` key when\n * present), else the inline `config`.\n */\nexport async function resolveMcpConfig(\n mcp: MCPEntity,\n fetchFn: FetchGitHubFileFn = fetchGitHubFile\n): Promise<Record<string, unknown>> {\n if (!mcp.source) {\n return mcp.config as Record<string, unknown>;\n }\n const raw = await fetchSourceFile(\n 'MCP',\n 'MCP',\n mcp.name,\n mcp.source,\n fetchFn\n );\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n throw new Error(\n `MCP \"${mcp.name}\" GitHub source is not valid JSON: ${message}`\n );\n }\n if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {\n throw new Error(`MCP \"${mcp.name}\" GitHub source must be a JSON object`);\n }\n const obj = parsed as Record<string, unknown>;\n const servers = obj[MCP_SERVERS_JSON_KEY];\n if (\n typeof servers === 'object' &&\n servers !== null &&\n !Array.isArray(servers)\n ) {\n return servers as Record<string, unknown>;\n }\n return obj;\n}\n", "// 60-minute ceiling for runs with no turn limit. Keeps jobs from running\n// indefinitely while giving complex scenarios enough room to finish.\nexport const UNLIMITED_RUN_TIMEOUT_MS = 60 * 60_000;\n\n/**\n * Returns the wall-clock timeout for an agent execution.\n *\n * - Explicit `maxDurationMs` always wins.\n * - Unlimited runs (`maxTurns === undefined`) get a 60-minute ceiling.\n * - Capped runs get 1 minute per turn, floored at 5 minutes.\n */\nexport function resolveTimeoutMs(\n maxTurns: number | undefined,\n maxDurationMs?: number\n): number {\n if (maxDurationMs !== undefined) return maxDurationMs;\n if (maxTurns === undefined) return UNLIMITED_RUN_TIMEOUT_MS;\n return Math.max(300_000, maxTurns * 60_000);\n}\n", "import { writeFile } from 'fs/promises';\nimport { join } from 'path';\nimport type { MCPEntity } from '@wix/evalforge-types';\nimport { MCP_SERVERS_JSON_KEY } from '@wix/evalforge-types';\nimport {\n resolveMcpConfig,\n type FetchGitHubFileFn\n} from '../shared/resolve-capability-content.js';\nimport { resolveMcpPlaceholders } from '../shared/resolve-mcp-placeholders.js';\n\nexport type { FetchGitHubFileFn };\n\n/**\n * Write .mcp.json at the project root (cwd) for Claude Code to discover MCPs.\n *\n * The config field already contains the keyed `.mcp.json` entry\n * (e.g. `{ \"wix-mcp\": { \"type\": \"http\", ... } }`), so each MCP's config\n * is spread directly into the mcpServers object.\n *\n * Any `{{placeholder}}` values in the config are resolved before writing\n * (e.g. `{{wix-auth-token}}` \u2192 token from ~/.wix/auth/api-key.json).\n *\n * For MCPs with a GitHub source, the latest config is live-fetched.\n * For inline MCPs, the stored config is used directly.\n *\n * @see https://code.claude.com/docs/en/mcp#mcp-installation-scopes\n * @param cwd - Working directory (project root for Claude Code)\n * @param mcps - MCP entities whose config is merged into mcpServers\n * @param fetchFn - Optional GitHub fetcher (injectable for tests)\n */\nexport async function writeMcpToFilesystem(\n cwd: string,\n mcps: MCPEntity[],\n fetchFn?: FetchGitHubFileFn\n): Promise<void> {\n if (mcps.length === 0) return;\n\n const mcpServers: Record<string, Record<string, unknown>> = {};\n for (const mcp of mcps) {\n const config = await resolveMcpConfig(mcp, fetchFn);\n for (const [key, value] of Object.entries(config)) {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new Error(\n `MCP \"${mcp.name}\" has invalid config: value for key \"${key}\" must be an object (got ${typeof value}). ` +\n 'Config must use keyed format, e.g. { \"server-name\": { \"command\": \"npx\", ... } }'\n );\n }\n mcpServers[key] = value as Record<string, unknown>;\n }\n }\n\n const resolvedServers = await resolveMcpPlaceholders(mcpServers, { cwd });\n\n const content = JSON.stringify(\n { [MCP_SERVERS_JSON_KEY]: resolvedServers },\n null,\n 2\n );\n const filePath = join(cwd, '.mcp.json');\n await writeFile(filePath, content, 'utf8');\n\n console.log(`[MCP] Written to ${filePath}`);\n}\n", "/**\n * MCP Config Placeholder Resolution\n *\n * Resolves `{{placeholder}}` patterns in MCP config values at eval startup.\n *\n * Supported placeholders:\n * - {{wix-auth-token}} \u2192 token from ~/.wix/auth/api-key.json\n * - {{wix-auth-user-id}} \u2192 userInfo.userId from api-key.json\n * - {{cwd}} \u2192 environment folder (working directory)\n */\n\nimport { readFile } from 'fs/promises';\nimport { join } from 'path';\nimport { homedir } from 'os';\nimport {\n findPlaceholders,\n resolveValue\n} from '../../../resolve-placeholders.js';\n\nexport { findPlaceholders, resolveValue };\n\nconst WIX_AUTH_FILE = join(homedir(), '.wix', 'auth', 'api-key.json');\n\ninterface WixApiKeyAuth {\n token: string;\n accountId: string;\n userInfo: {\n userId: string;\n email: string;\n };\n}\n\nexport interface ResolveMcpPlaceholdersOptions {\n cwd?: string;\n authFilePath?: string;\n}\n\n/**\n * Read Wix auth placeholders from ~/.wix/auth/api-key.json.\n * Returns an empty map when the file is missing or malformed.\n *\n * @param authFilePath - Override for testing (default: ~/.wix/auth/api-key.json)\n */\nexport async function loadWixAuthPlaceholders(\n authFilePath = WIX_AUTH_FILE\n): Promise<Record<string, string>> {\n try {\n const content = await readFile(authFilePath, 'utf-8');\n const auth = JSON.parse(content) as WixApiKeyAuth;\n\n if (!auth.token || !auth.userInfo?.userId) {\n return {};\n }\n\n return {\n 'wix-auth-token': auth.token,\n 'wix-auth-user-id': auth.userInfo.userId\n };\n } catch (err) {\n console.warn(\n `[MCP] Could not load Wix auth file: ${(err as Error).message}`\n );\n return {};\n }\n}\n\n/**\n * Resolve all `{{...}}` placeholders in an MCP server config map.\n *\n * Loads available placeholder values (Wix auth file + cwd),\n * scans the config for placeholders, and fails if any are unresolvable.\n *\n * @param mcpServers - The mcpServers map (server-name \u2192 config)\n * @param options - Optional cwd and authFilePath overrides\n * @throws When a config references placeholders that cannot be resolved\n */\nexport async function resolveMcpPlaceholders(\n mcpServers: Record<string, Record<string, unknown>>,\n options: ResolveMcpPlaceholdersOptions = {}\n): Promise<Record<string, Record<string, unknown>>> {\n const needed = findPlaceholders(mcpServers);\n if (needed.length === 0) {\n return mcpServers;\n }\n\n const placeholders: Record<string, string> = {\n ...(await loadWixAuthPlaceholders(options.authFilePath)),\n ...(options.cwd ? { cwd: options.cwd } : {})\n };\n\n const unresolved = needed.filter((key) => !(key in placeholders));\n if (unresolved.length > 0) {\n throw new Error(\n `MCP config contains unresolvable placeholders: ${unresolved.map((k) => `{{${k}}}`).join(', ')}. ` +\n 'Ensure ~/.wix/auth/api-key.json exists (run `npx @wix/cli login`).'\n );\n }\n\n console.log(`[MCP] Resolved ${needed.length} placeholder(s)`);\n\n return resolveValue(mcpServers, placeholders) as Record<\n string,\n Record<string, unknown>\n >;\n}\n", "import { mkdir, writeFile } from 'fs/promises';\nimport { join } from 'path';\nimport type { SubAgent } from '@wix/evalforge-types';\nimport {\n resolveSubAgentMd,\n type FetchGitHubFileFn\n} from '../shared/resolve-capability-content.js';\n\nexport type { FetchGitHubFileFn };\n\n/** Directory where Claude Code discovers project sub-agents */\nconst AGENTS_DIR = '.claude/agents';\n\n/**\n * Build a unique, sanitized filename for a sub-agent.\n *\n * Sanitizes to lowercase alphanumeric + hyphens, falls back to\n * \"sub-agent-{index}\" for empty names, and appends a numeric suffix\n * (-2, -3, ...) when a name has already been used.\n */\nfunction toAgentFilename(\n name: string,\n index: number,\n nameCount: Map<string, number>\n): string {\n const base =\n (name || '')\n .toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^a-z0-9-]/g, '')\n .replace(/^-+|-+$/g, '') || `sub-agent-${index}`;\n\n const count = nameCount.get(base) ?? 0;\n nameCount.set(base, count + 1);\n\n return count === 0 ? base : `${base}-${count + 1}`;\n}\n\n/**\n * Write sub-agent markdown files to .claude/agents/ for Claude Code to discover.\n *\n * For sub-agents with a GitHub source, the latest .md file is live-fetched.\n * For inline sub-agents, the stored subAgentMd is used directly.\n *\n * @see https://code.claude.com/docs/en/sub-agents#write-subagent-files\n * @param cwd - Working directory (project root for Claude Code)\n * @param subAgents - Sub-agent entities to write\n * @param fetchFn - Optional GitHub fetcher (injectable for tests)\n */\nexport async function writeSubAgentsToFilesystem(\n cwd: string,\n subAgents: SubAgent[],\n fetchFn?: FetchGitHubFileFn\n): Promise<void> {\n if (subAgents.length === 0) return;\n\n const agentsDir = join(cwd, AGENTS_DIR);\n await mkdir(agentsDir, { recursive: true });\n\n const nameCount = new Map<string, number>();\n\n for (const [i, agent] of subAgents.entries()) {\n const filename = toAgentFilename(agent.name, i, nameCount);\n const filePath = join(agentsDir, `${filename}.md`);\n const content = await resolveSubAgentMd(agent, fetchFn);\n await writeFile(filePath, content, 'utf8');\n }\n\n console.log(`[SubAgents] Written to ${agentsDir}`);\n}\n", "import { mkdir, writeFile, readFile } from 'fs/promises';\nimport { join, resolve, sep } from 'path';\nimport type { Rule } from '@wix/evalforge-types';\nimport {\n resolveRuleText,\n type FetchGitHubFileFn\n} from '../shared/resolve-capability-content.js';\n\nexport type { FetchGitHubFileFn };\n\nconst CURSOR_RULES_DIR = '.cursor/rules';\n\n/**\n * Build a sanitized filename from a rule name.\n *\n * Sanitizes to lowercase alphanumeric + hyphens, falls back to\n * \"rule-{index}\" for empty names, and appends a numeric suffix\n * (-2, -3, ...) when a name has already been used.\n */\nfunction toRuleFilename(\n name: string,\n index: number,\n nameCount: Map<string, number>\n): string {\n const base =\n (name || '')\n .toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^a-z0-9-]/g, '')\n .replace(/^-+|-+$/g, '') || `rule-${index}`;\n\n const count = nameCount.get(base) ?? 0;\n nameCount.set(base, count + 1);\n\n return count === 0 ? base : `${base}-${count + 1}`;\n}\n\n/**\n * Safely append content to a file, creating it if it doesn't exist.\n * Separates appended blocks with double newlines.\n */\nasync function appendToFile(filePath: string, content: string): Promise<void> {\n let existing = '';\n try {\n existing = await readFile(filePath, 'utf8');\n } catch {\n // File doesn't exist yet\n }\n\n const merged = existing ? `${existing.trimEnd()}\\n\\n${content}` : content;\n\n await writeFile(filePath, merged, 'utf8');\n}\n\nfunction validateGenericDirectory(dir: string, cwd: string): string {\n const trimmed = dir.trim();\n if (!trimmed) {\n throw new Error(`Generic rule directory must not be empty`);\n }\n if (\n trimmed.startsWith('/') ||\n trimmed.startsWith('\\\\') ||\n trimmed.startsWith('~')\n ) {\n throw new Error(`Generic rule directory must be relative, got: \"${dir}\"`);\n }\n const segments = trimmed.split(/[\\\\/]/);\n if (segments.some((s) => s === '..')) {\n throw new Error(\n `Generic rule directory may not contain \"..\", got: \"${dir}\"`\n );\n }\n const normalizedCwd = cwd.endsWith(sep) ? cwd.slice(0, -1) : cwd;\n const resolved = resolve(normalizedCwd, trimmed);\n if (!resolved.startsWith(normalizedCwd + sep)) {\n throw new Error(\n `Generic rule directory escapes the working directory: \"${dir}\"`\n );\n }\n return trimmed;\n}\n\n/**\n * Write rule content to the filesystem based on each rule's `ruleType`.\n *\n * Placement:\n * - `claude-md` -> `{cwd}/CLAUDE.md` (appends if multiple)\n * - `agents-md` -> `{cwd}/AGENTS.md` (appends if multiple)\n * - `cursor-rule` -> `{cwd}/.cursor/rules/{name}.md` (one file per rule)\n * - `generic` -> `{cwd}/{rule.directory}` (defaults to `.opencode/rules`)\n *\n * For rules with a GitHub source, the latest content is live-fetched.\n * For inline rules, the stored content is used directly.\n *\n * @param cwd - Working directory (project root for Claude Code)\n * @param rules - Rule entities to write\n * @param fetchFn - Optional GitHub fetcher (injectable for tests)\n */\nexport async function writeRulesToFilesystem(\n cwd: string,\n rules: Rule[],\n fetchFn?: FetchGitHubFileFn\n): Promise<void> {\n if (rules.length === 0) return;\n\n const nameCount = new Map<string, number>();\n let hasCursorRules = false;\n\n for (const [i, rule] of rules.entries()) {\n const content = await resolveRuleText(rule, fetchFn);\n switch (rule.ruleType) {\n case 'claude-md': {\n await appendToFile(join(cwd, 'CLAUDE.md'), content);\n break;\n }\n case 'agents-md': {\n await appendToFile(join(cwd, 'AGENTS.md'), content);\n break;\n }\n case 'cursor-rule': {\n if (!hasCursorRules) {\n await mkdir(join(cwd, CURSOR_RULES_DIR), { recursive: true });\n hasCursorRules = true;\n }\n const filename = toRuleFilename(rule.name, i, nameCount);\n const filePath = join(cwd, CURSOR_RULES_DIR, `${filename}.md`);\n await writeFile(filePath, content, 'utf8');\n break;\n }\n case 'generic': {\n const directory = validateGenericDirectory(\n rule.directory ?? '.opencode/rules',\n cwd\n );\n const dirPath = join(cwd, directory);\n await mkdir(dirPath, { recursive: true });\n const filename = toRuleFilename(rule.name, i, nameCount);\n await writeFile(join(dirPath, `${filename}.md`), content, 'utf8');\n break;\n }\n default: {\n const _exhaustive: never = rule.ruleType;\n throw new Error(`Unhandled ruleType: ${_exhaustive}`);\n }\n }\n }\n\n console.log(`[Rules] Written ${rules.length} rule(s) to ${cwd}`);\n}\n", "import type { ConversationMessage } from '@wix/evalforge-types';\nimport type { TimestampedMessage } from './execute.js';\nimport type {\n SDKAssistantMessage,\n SDKUserMessage,\n SDKSystemMessage,\n SDKMessage\n} from '@anthropic-ai/claude-agent-sdk' with { 'resolution-mode': 'import' };\n\nfunction isAssistantMessage(\n message: SDKMessage\n): message is SDKAssistantMessage {\n return message.type === 'assistant';\n}\n\n/**\n * Build a full conversation from raw SDK messages.\n * Extracts text, thinking, tool_use, and tool_result blocks into a\n * serializable ConversationMessage array for storage and later display.\n */\nexport function buildConversation(\n timestampedMessages: TimestampedMessage[]\n): ConversationMessage[] {\n const messages: ConversationMessage[] = [];\n\n for (const { message, receivedAt } of timestampedMessages) {\n const timestamp = receivedAt.toISOString();\n\n if (isAssistantMessage(message)) {\n const content: ConversationMessage['content'] = [];\n for (const block of message.message.content) {\n if (block.type === 'text') {\n content.push({ type: 'text', text: block.text });\n } else if (block.type === 'thinking') {\n content.push({\n type: 'thinking',\n thinking: (block as { type: 'thinking'; thinking: string }).thinking\n });\n } else if (block.type === 'tool_use') {\n content.push({\n type: 'tool_use',\n toolName: block.name,\n toolId: block.id,\n input: block.input\n });\n }\n }\n if (content.length > 0) {\n messages.push({ role: 'assistant', content, timestamp });\n }\n } else if (message.type === 'user') {\n const userMsg = message as SDKUserMessage;\n const content: ConversationMessage['content'] = [];\n const msgContent = userMsg.message?.content;\n\n if (typeof msgContent === 'string') {\n content.push({ type: 'text', text: msgContent });\n } else if (Array.isArray(msgContent)) {\n for (const block of msgContent) {\n if (typeof block === 'object' && block !== null) {\n const b = block as unknown as Record<string, unknown>;\n if (b.type === 'tool_result') {\n const rawContent = b.content;\n let text = '';\n if (typeof rawContent === 'string') {\n text = rawContent;\n } else if (Array.isArray(rawContent)) {\n text = rawContent\n .filter(\n (c: unknown) =>\n typeof c === 'object' &&\n c !== null &&\n (c as Record<string, unknown>).type === 'text'\n )\n .map((c: unknown) => (c as { text: string }).text)\n .join('\\n');\n }\n content.push({\n type: 'tool_result',\n toolUseId: String(b.tool_use_id ?? ''),\n content: text,\n isError: b.is_error === true ? true : undefined\n });\n } else if (b.type === 'text' && typeof b.text === 'string') {\n content.push({ type: 'text', text: b.text });\n }\n }\n }\n }\n\n if (content.length > 0) {\n messages.push({ role: 'user', content, timestamp });\n }\n } else if (message.type === 'system') {\n const sysMsg = message as SDKSystemMessage;\n messages.push({\n role: 'system',\n content: [{ type: 'text', text: sysMsg.subtype || 'system' }],\n timestamp\n });\n }\n }\n\n return messages;\n}\n", "import type { LiveTraceEvent } from '@wix/evalforge-types';\nimport { TRACE_EVENT_PREFIX } from '@wix/evalforge-types';\n\n/**\n * Emit a live trace event to stdout for the backend to capture.\n *\n * When a `pushEvent` callback is provided (remote job execution, where stdout\n * is not accessible), the event is also pushed to the backend through it.\n * The callback is fire-and-forget; it must not throw.\n */\nexport function emitTraceEvent(\n event: LiveTraceEvent,\n pushEvent?: (event: LiveTraceEvent) => void\n): void {\n console.log(`${TRACE_EVENT_PREFIX}${JSON.stringify(event)}`);\n\n pushEvent?.(event);\n}\n", "/**\n * Claude Code agent adapter module.\n *\n * This module provides the Claude Code implementation of the AgentAdapter\n * interface. It wraps the @anthropic-ai/claude-agent-sdk to execute skills\n * with full LLM trace support.\n *\n * The adapter is automatically registered with the default registry when\n * this module is imported.\n */\n\n// Export the adapter class and singleton instance\nexport { ClaudeCodeAdapter, claudeCodeAdapter } from './claude-code-adapter.js';\n\n// Export the execution function for direct use if needed\nexport { executeWithClaudeCode } from './execute.js';\nexport { buildConversation } from './build-conversation.js';\n\n// Export Claude-specific types\nexport type {\n ClaudeCodeExecutionOptions,\n ClaudeCodeExecutionResult\n} from './types.js';\n\n// Re-export TraceContext from the shared types\nexport type { TraceContext } from '@wix/evalforge-types';\n\n// Register the adapter with the default registry\nimport { defaultRegistry } from '../registry.js';\nimport { claudeCodeAdapter } from './claude-code-adapter.js';\n\ndefaultRegistry.register(claudeCodeAdapter);\n", "import type {\n AgentAdapter,\n AgentExecutionContext,\n AgentExecutionResult,\n OpenCodeConfig\n} from '@wix/evalforge-types';\nimport { AgentRunCommand, OpenCodeConfigSchema } from '@wix/evalforge-types';\nimport { executeWithOpenCode, prepareOpenCodeEnvironment } from './execute.js';\nimport type { OpenCodeExecutionOptions } from './types.js';\n\n/**\n * OpenCode agent adapter.\n *\n * Implements the AgentAdapter interface by spawning the `opencode` CLI\n * and parsing NDJSON events from stdout.\n *\n * Supported commands: 'opencode'\n */\nexport class OpenCodeAdapter implements AgentAdapter {\n readonly id = 'opencode';\n readonly name = 'OpenCode';\n readonly supportedCommands = [AgentRunCommand.OPENCODE] as const;\n\n async prepareEnvironment(context: AgentExecutionContext): Promise<void> {\n await prepareOpenCodeEnvironment(context.cwd, context.skills, {\n mcps: context.mcps,\n subAgents: context.subAgents,\n rules: context.rules,\n systemPrompt: context.systemPrompt\n });\n }\n\n async execute(context: AgentExecutionContext): Promise<AgentExecutionResult> {\n const {\n skills,\n scenario,\n cwd,\n config,\n aiGatewayUrl,\n aiGatewayHeaders,\n traceContext,\n mcps,\n subAgents,\n rules,\n systemPrompt\n } = context;\n\n // Parse config with typed Zod schema\n const typed = config\n ? OpenCodeConfigSchema.passthrough().safeParse(config)\n : undefined;\n const cfg: OpenCodeConfig | undefined = typed?.success\n ? typed.data\n : undefined;\n\n // maxTurns 0 = unlimited\n const rawMaxTurns = cfg?.maxTurns;\n const maxTurns = rawMaxTurns === 0 ? undefined : rawMaxTurns;\n\n const options: OpenCodeExecutionOptions = {\n cwd,\n model: cfg?.model,\n temperature: cfg?.temperature,\n topP: cfg?.topP,\n maxTurns,\n thinkingVariant: cfg?.thinkingVariant,\n maxDurationMs: cfg?.maxDurationMs,\n aiGatewayUrl,\n aiGatewayHeaders,\n traceContext,\n mcps,\n subAgents,\n rules,\n systemPrompt,\n config\n };\n\n const { result, llmTrace, conversation } = await executeWithOpenCode(\n skills,\n scenario,\n options\n );\n\n return {\n outputText: result.outputText,\n durationMs: result.durationMs,\n usage: {\n inputTokens: result.usage.inputTokens,\n outputTokens: result.usage.outputTokens,\n totalTokens: result.usage.totalTokens\n },\n costUsd: result.costUsd,\n llmTrace,\n conversation\n };\n }\n}\n\nexport const openCodeAdapter = new OpenCodeAdapter();\n", "import { spawn, type ChildProcess } from 'child_process';\nimport { resolveTimeoutMs } from '../timeout.js';\nimport type {\n SkillWithLatestVersion,\n TestScenario,\n LLMTrace,\n LiveTraceEvent,\n ConversationMessage,\n TriggerPromptImage\n} from '@wix/evalforge-types';\nimport {\n DEFAULT_EVALUATOR_SYSTEM_PROMPT,\n LiveTraceEventType\n} from '@wix/evalforge-types';\nimport type {\n OpenCodeExecutionOptions,\n OpenCodeExecutionResult,\n OpenCodeEvent,\n OpenCodeTextEvent,\n OpenCodeToolUseEvent,\n OpenCodeStepFinishEvent,\n TimestampedOpenCodeEvent,\n TraceContext\n} from './types.js';\nimport { tryParseJson } from './types.js';\nimport { writeSkillsToFilesystem } from './write-skills.js';\nimport { writeSubAgentsToFilesystem } from './write-sub-agents.js';\nimport { writeRulesToFilesystem } from '../claude-code/write-rules.js';\nimport { buildOpenCodeEnv } from './config.js';\nimport { buildLLMTrace } from './build-trace.js';\nimport { buildConversation } from './build-conversation.js';\nimport { emitTraceEvent } from '../shared/trace-emit.js';\nimport { writeFile, mkdir } from 'fs/promises';\nimport { join } from 'path';\n\nconst KILL_GRACE_PERIOD_MS = 5_000;\nconst IDLE_TIMEOUT_MS = 120_000;\nconst IDLE_CHECK_INTERVAL_MS = 15_000;\nconst MAX_IDLE_RETRIES = 3;\n\n/**\n * Extract a human-readable action description from a tool event.\n */\nfunction extractToolAction(\n toolName: string,\n args: Record<string, unknown> | undefined\n): string {\n if (!toolName) return 'Using tool...';\n\n if (\n (toolName === 'Task' || toolName === 'dispatch_agent') &&\n args?.description\n ) {\n const desc = String(args.description).slice(0, 55);\n return `Task: ${desc}${String(args.description).length > 55 ? '...' : ''}`;\n }\n\n if (\n (toolName === 'Bash' || toolName === 'bash' || toolName === 'execute') &&\n args?.command\n ) {\n const cmd = String(args.command).slice(0, 50);\n return `Running: ${cmd}${String(args.command).length > 50 ? '...' : ''}`;\n }\n\n if (args?.file_path || args?.path || args?.target_file) {\n const filePath = String(\n args.file_path || args.path || args.target_file\n ).slice(0, 50);\n if (/write|edit/i.test(toolName)) return `Writing: ${filePath}`;\n if (/read|view/i.test(toolName)) return `Reading: ${filePath}`;\n }\n\n return `Using ${toolName}...`;\n}\n\n/**\n * Write trigger prompt images to disk so they can be passed via --file flags.\n *\n * Note: OpenCode CLI's --file flag currently has a known MIME-type detection bug\n * (hardcodes text/plain for all files). Images are still written to the cwd so the\n * agent can access them via its tools even if the CLI doesn't render them visually.\n *\n * @param cwd - Working directory where images will be written\n * @param images - Array of images with base64 data and metadata\n * @returns Array of absolute file paths for the written images\n */\nexport async function writePromptImages(\n cwd: string,\n images: TriggerPromptImage[]\n): Promise<string[]> {\n const imagesDir = join(cwd, 'prompt-images');\n await mkdir(imagesDir, { recursive: true });\n\n const filePaths: string[] = [];\n for (let i = 0; i < images.length; i++) {\n const img = images[i];\n const ext = img.mediaType.split('/')[1] || 'png';\n const filename = `image-${i}.${ext}`;\n const filepath = join(imagesDir, filename);\n\n const buffer = Buffer.from(img.base64, 'base64');\n await writeFile(filepath, buffer);\n filePaths.push(filepath);\n }\n\n return filePaths;\n}\n\n/**\n * Create a LiveTraceEvent from an NDJSON event.\n */\nfunction createTraceEventFromNdjson(\n evt: OpenCodeEvent,\n context: TraceContext,\n stepNumber: number,\n isComplete: boolean\n): LiveTraceEvent | null {\n const base = {\n evalRunId: context.evalRunId,\n scenarioId: context.scenarioId,\n scenarioName: context.scenarioName,\n targetId: context.targetId,\n targetName: context.targetName,\n stepNumber,\n timestamp: new Date().toISOString(),\n isComplete\n };\n\n switch (evt.type) {\n case 'text': {\n const te = evt as OpenCodeTextEvent;\n return {\n ...base,\n type: LiveTraceEventType.COMPLETION,\n outputPreview: te.part.text.slice(0, 500)\n };\n }\n case 'reasoning':\n return {\n ...base,\n type: LiveTraceEventType.THINKING,\n thinking: evt.part.text.slice(0, 500)\n };\n case 'tool_use': {\n const tu = evt as OpenCodeToolUseEvent;\n const toolName = tu.part.tool;\n const args = tu.part.state.input;\n const toolArgs = JSON.stringify(args).slice(0, 500);\n\n let type: LiveTraceEventType = LiveTraceEventType.TOOL_USE;\n let filePath: string | undefined;\n\n if (args) {\n if (args.file_path || args.path || args.target_file) {\n filePath = String(args.file_path || args.path || args.target_file);\n if (/write|edit/i.test(toolName)) {\n type = LiveTraceEventType.FILE_WRITE;\n } else if (/read|view/i.test(toolName)) {\n type = LiveTraceEventType.FILE_READ;\n }\n }\n }\n\n return { ...base, type, toolName, toolArgs, filePath };\n }\n case 'step_finish':\n return {\n ...base,\n type: LiveTraceEventType.PROGRESS,\n outputPreview: 'Step completed'\n };\n default:\n return null;\n }\n}\n\n/**\n * Write all infrastructure files (sub-agents, rules, skills)\n * to the working directory. Called by the adapter's `prepareEnvironment()` so\n * that the orchestrator can take the baseline snapshot *after* infra is in place.\n *\n * Note: MCPs for OpenCode are passed inline via config, not written to filesystem.\n */\nexport async function prepareOpenCodeEnvironment(\n cwd: string,\n skills: SkillWithLatestVersion[],\n options: Pick<\n OpenCodeExecutionOptions,\n 'mcps' | 'subAgents' | 'rules' | 'systemPrompt'\n >\n): Promise<void> {\n if (options.mcps && options.mcps.length > 0) {\n console.log(\n `[MCP] ${options.mcps.length} MCP(s) will be configured inline`\n );\n }\n\n if (options.subAgents && options.subAgents.length > 0) {\n await writeSubAgentsToFilesystem(cwd, options.subAgents);\n }\n\n if (options.rules && options.rules.length > 0) {\n await writeRulesToFilesystem(cwd, options.rules);\n }\n\n try {\n await writeSkillsToFilesystem(cwd, skills);\n } catch (writeError) {\n throw new Error(\n `Failed to write skills to filesystem: ${writeError instanceof Error ? writeError.message : String(writeError)}`\n );\n }\n\n let systemPrompt: string | undefined;\n if (options.systemPrompt === null || options.systemPrompt === '') {\n // Explicitly disabled\n } else if (options.systemPrompt != null) {\n systemPrompt = options.systemPrompt;\n } else {\n systemPrompt = DEFAULT_EVALUATOR_SYSTEM_PROMPT;\n }\n if (systemPrompt) {\n await writeSystemPromptRule(cwd, systemPrompt);\n }\n}\n\n/**\n * Write the system prompt as an OpenCode rule file so it is picked up by the CLI.\n */\nasync function writeSystemPromptRule(\n cwd: string,\n systemPrompt: string\n): Promise<void> {\n const rulesDir = join(cwd, '.opencode', 'rules');\n await mkdir(rulesDir, { recursive: true });\n await writeFile(\n join(rulesDir, 'evalforge-system-prompt.md'),\n systemPrompt,\n 'utf-8'\n );\n}\n\n/**\n * Kill a process and its process group (for cleanup of MCP servers, bash, etc.).\n */\nfunction killProcess(child: ChildProcess, resolved: boolean): void {\n if (!child) return;\n\n const killSignal = (signal: NodeJS.Signals): void => {\n if (child.pid) {\n try {\n process.kill(-child.pid, signal);\n console.log(\n `[OpenCode] Sent ${signal} to process group (pid: -${child.pid})`\n );\n return;\n } catch {\n // Process group kill failed, fall back\n }\n }\n child.kill(signal);\n };\n\n killSignal('SIGTERM');\n setTimeout(() => {\n if (child && !resolved) {\n killSignal('SIGKILL');\n }\n }, KILL_GRACE_PERIOD_MS);\n}\n\n// ---------------------------------------------------------------------------\n// Retry support\n// ---------------------------------------------------------------------------\n\ninterface SpawnAttemptResult {\n events: TimestampedOpenCodeEvent[];\n success: boolean;\n isIdleTimeout: boolean;\n error?: Error;\n finalStepNumber: number;\n}\n\n/**\n * Build a summary of tool actions from events, used in the recovery prompt.\n */\nfunction summarizeToolActions(events: TimestampedOpenCodeEvent[]): string {\n const actions: string[] = [];\n for (const { event: evt } of events) {\n if (evt.type === 'tool_use') {\n const tu = evt as OpenCodeToolUseEvent;\n const tool = tu.part.tool;\n const input = tu.part.state.input;\n const filePath = input?.file_path || input?.path || input?.target_file;\n if (filePath) {\n actions.push(`- ${tool}: ${String(filePath)}`);\n } else if (input?.command) {\n actions.push(`- ${tool}: ${String(input.command).slice(0, 80)}`);\n } else {\n actions.push(`- ${tool}`);\n }\n }\n }\n return actions.length > 0 ? actions.join('\\n') : '(no tool actions recorded)';\n}\n\n/**\n * Build a recovery prompt for retrying after an idle timeout.\n * Tells the agent to continue the original task, noting what was already done.\n */\nfunction buildRecoveryPrompt(\n originalPrompt: string,\n events: TimestampedOpenCodeEvent[]\n): string {\n const toolSummary = summarizeToolActions(events);\n return `You are continuing a task that was interrupted due to a session error.\n\nORIGINAL TASK:\n${originalPrompt}\n\nACTIONS ALREADY COMPLETED IN THE PREVIOUS SESSION:\n${toolSummary}\n\nINSTRUCTIONS:\n1. Review the actions listed above that were already completed in the previous session\n2. Check the filesystem to verify what was already done\n3. Continue with any remaining work needed to fulfill the original task\n4. Do NOT redo work that is already done \u2014 only continue from where the previous session left off`;\n}\n\n/**\n * Spawn a single OpenCode process, collect NDJSON events, and return the result.\n * Always resolves (never rejects) so the caller can inspect the result and retry.\n *\n * @see https://github.com/anomalyco/opencode/issues/13230 - Memory leak causes OOM\n * @see https://github.com/anomalyco/opencode/issues/13841 - LLM connection stalls\n */\nfunction spawnOpenCodeProcess(opts: {\n args: string[];\n env: NodeJS.ProcessEnv;\n cwd: string;\n skillNames: string;\n scenarioName: string;\n sdkTimeoutMs: number;\n traceContext?: TraceContext;\n initialStepNumber: number;\n}): Promise<SpawnAttemptResult> {\n const {\n args,\n env,\n cwd,\n skillNames,\n scenarioName,\n sdkTimeoutMs,\n traceContext,\n initialStepNumber\n } = opts;\n\n return new Promise((resolve) => {\n let resolved = false;\n let stderr = '';\n let lineBuffer = '';\n let lastOutputTime = Date.now();\n let traceStepNumber = initialStepNumber;\n let lastAction = 'Starting...';\n let lastToolName: string | undefined;\n let lastFilePath: string | undefined;\n\n const events: TimestampedOpenCodeEvent[] = [];\n\n const timers: {\n timeout?: ReturnType<typeof setTimeout>;\n idleCheck?: ReturnType<typeof setInterval>;\n heartbeat?: ReturnType<typeof setInterval>;\n } = {};\n\n const cleanup = (): void => {\n if (timers.timeout) clearTimeout(timers.timeout);\n if (timers.idleCheck) clearInterval(timers.idleCheck);\n if (timers.heartbeat) clearInterval(timers.heartbeat);\n };\n\n const finalize = (\n success: boolean,\n isIdleTimeout: boolean,\n error?: Error\n ): void => {\n if (resolved) return;\n resolved = true;\n cleanup();\n\n resolve({\n events,\n success,\n isIdleTimeout,\n error,\n finalStepNumber: traceStepNumber\n });\n };\n\n // Spawn the process\n let child: ChildProcess;\n try {\n child = spawn('opencode', args, {\n cwd,\n env,\n stdio: ['ignore', 'pipe', 'pipe'],\n detached: true\n });\n } catch (spawnError) {\n resolve({\n events: [],\n success: false,\n isIdleTimeout: false,\n error: new Error(\n `Failed to spawn opencode: ${spawnError instanceof Error ? spawnError.message : String(spawnError)}`\n ),\n finalStepNumber: traceStepNumber\n });\n return;\n }\n\n // Total timeout\n timers.timeout = setTimeout(() => {\n if (!resolved) {\n console.error(`[OpenCode] Process timed out after ${sdkTimeoutMs}ms`);\n killProcess(child, resolved);\n finalize(\n false,\n false,\n new Error(\n `OpenCode execution timed out after ${sdkTimeoutMs}ms. ` +\n `Skills: ${skillNames}, Scenario: ${scenarioName}`\n )\n );\n }\n }, sdkTimeoutMs);\n\n // Idle watchdog\n timers.idleCheck = setInterval(() => {\n if (resolved) return;\n const idleTime = Date.now() - lastOutputTime;\n if (idleTime >= IDLE_TIMEOUT_MS) {\n console.warn(\n `[OpenCode] Process appears stuck - no output for ${Math.round(idleTime / 1000)}s. Killing process.`\n );\n killProcess(child, resolved);\n finalize(\n false,\n true,\n new Error(\n `OpenCode process stuck - no output for ${Math.round(idleTime / 1000)} seconds (idle timeout). ` +\n `Skills: ${skillNames}, Scenario: ${scenarioName}`\n )\n );\n }\n }, IDLE_CHECK_INTERVAL_MS);\n\n // Heartbeat for live tracing\n if (traceContext) {\n const executionStartTime = Date.now();\n let lastReportedAction = '';\n let sameActionCount = 0;\n\n timers.heartbeat = setInterval(() => {\n const elapsedMs = Date.now() - executionStartTime;\n let progressMessage = lastAction;\n\n if (lastAction === lastReportedAction) {\n sameActionCount++;\n } else {\n sameActionCount = 1;\n lastReportedAction = lastAction;\n }\n\n const isTaskTool =\n lastToolName === 'Task' || lastToolName === 'dispatch_agent';\n if (isTaskTool && sameActionCount > 1) {\n progressMessage = `Waiting for ${lastAction}`;\n } else if (lastToolName && lastFilePath) {\n progressMessage = `${lastToolName}: ${lastFilePath}`;\n } else if (lastToolName && !isTaskTool) {\n progressMessage = `Using ${lastToolName}...`;\n }\n\n const elapsedSec = Math.round(elapsedMs / 1000);\n progressMessage += ` (${elapsedSec}s, step ${traceStepNumber})`;\n\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: traceStepNumber,\n type: LiveTraceEventType.PROGRESS,\n outputPreview: progressMessage,\n toolName: lastToolName,\n filePath: lastFilePath,\n elapsedMs,\n timestamp: new Date().toISOString(),\n isComplete: false\n },\n traceContext.pushEvent\n );\n }, 10_000);\n }\n\n // Process stdout (NDJSON lines)\n child.stdout?.on('data', (data: Buffer) => {\n const text = data.toString();\n lastOutputTime = Date.now();\n\n lineBuffer += text;\n const lines = lineBuffer.split('\\n');\n lineBuffer = lines.pop() || '';\n\n for (const line of lines) {\n if (!line.trim()) continue;\n\n const evt = tryParseJson<OpenCodeEvent>(line);\n if (!evt || !evt.type) continue;\n\n events.push({ event: evt, receivedAt: Date.now() });\n\n // Live tracing\n if (traceContext) {\n traceStepNumber++;\n const traceEvt = createTraceEventFromNdjson(\n evt,\n traceContext,\n traceStepNumber,\n false\n );\n if (traceEvt) {\n lastToolName = traceEvt.toolName;\n lastFilePath = traceEvt.filePath;\n if (traceEvt.type === LiveTraceEventType.THINKING) {\n lastAction = 'Thinking...';\n } else if (traceEvt.type === LiveTraceEventType.TOOL_USE) {\n lastAction = extractToolAction(\n traceEvt.toolName ?? '',\n undefined\n );\n } else if (traceEvt.type === LiveTraceEventType.FILE_WRITE) {\n lastAction = `Writing: ${traceEvt.filePath || 'file'}`;\n } else if (traceEvt.type === LiveTraceEventType.FILE_READ) {\n lastAction = `Reading: ${traceEvt.filePath || 'file'}`;\n } else if (traceEvt.type === LiveTraceEventType.COMPLETION) {\n lastAction = 'Processing response...';\n }\n emitTraceEvent(traceEvt, traceContext.pushEvent);\n }\n }\n }\n });\n\n // Process stderr\n child.stderr?.on('data', (data: Buffer) => {\n const text = data.toString();\n stderr += text;\n lastOutputTime = Date.now();\n });\n\n // Handle process close\n child.on('close', (code) => {\n // Flush remaining line buffer\n if (lineBuffer.trim()) {\n const evt = tryParseJson<OpenCodeEvent>(lineBuffer);\n if (evt && evt.type) {\n events.push({ event: evt, receivedAt: Date.now() });\n }\n }\n\n console.log(\n `[executeWithOpenCode] Process exited with code ${code}, ${events.length} events collected`\n );\n\n if (code === 0) {\n finalize(true, false);\n } else {\n finalize(\n false,\n false,\n new Error(\n `OpenCode CLI exited with code ${code}.\\nStderr: ${stderr.slice(0, 1000)}`\n )\n );\n }\n });\n\n // Handle spawn errors\n child.on('error', (error) => {\n finalize(\n false,\n false,\n new Error(`OpenCode CLI spawn error: ${error.message}`)\n );\n });\n });\n}\n\n/**\n * Execute skills using the OpenCode CLI with automatic retry on idle timeouts.\n *\n * When the OpenCode process stalls (no output for 120s), it is killed and\n * retried with a recovery prompt that carries context about work already done.\n * This works around known OpenCode hanging issues where the upstream LLM\n * connection stalls mid-stream.\n *\n * @see https://github.com/anomalyco/opencode/issues/13230 - Memory leak causes OOM\n * @see https://github.com/anomalyco/opencode/issues/13841 - LLM connection stalls\n */\nexport async function executeWithOpenCode(\n skills: SkillWithLatestVersion[],\n scenario: TestScenario,\n options: OpenCodeExecutionOptions\n): Promise<{\n result: OpenCodeExecutionResult;\n llmTrace: LLMTrace;\n conversation: ConversationMessage[];\n}> {\n const skillNames = skills.map((s) => s.name).join(', ');\n console.log('[executeWithOpenCode] Starting execution', {\n skillCount: skills.length,\n skillNames,\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n cwd: options.cwd,\n aiGatewayUrl: options.aiGatewayUrl,\n hasAiGatewayHeaders: !!options.aiGatewayHeaders,\n model: options.model\n });\n\n const maxTurns = options.maxTurns || undefined;\n const sdkTimeoutMs = resolveTimeoutMs(maxTurns, options.maxDurationMs);\n\n const { env, providerID, modelID } = await buildOpenCodeEnv({\n model: options.model,\n temperature: options.temperature,\n topP: options.topP,\n maxTurns,\n aiGatewayUrl: options.aiGatewayUrl,\n aiGatewayHeaders: options.aiGatewayHeaders,\n mcps: options.mcps,\n rules: options.rules,\n cwd: options.cwd,\n config: options.config\n });\n\n const startTime = new Date();\n\n const traceContext = options.traceContext;\n\n // Emit pre-execution diagnostic\n if (traceContext) {\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: 0,\n type: LiveTraceEventType.DIAGNOSTIC,\n outputPreview: JSON.stringify({\n event: 'pre-cli-execution',\n model: `${providerID}/${modelID}`,\n maxTurns,\n timestamp: new Date().toISOString()\n }),\n timestamp: new Date().toISOString(),\n isComplete: false\n },\n traceContext.pushEvent\n );\n }\n\n // Build base CLI args (prompt is appended per attempt)\n // thinkingVariant: 'none' omits --thinking entirely; otherwise pass --variant value\n const variant = options.thinkingVariant ?? 'high';\n const thinkingArgs =\n variant === 'none' ? [] : ['--thinking', '--variant', variant];\n\n const baseArgs = [\n 'run',\n '--format',\n 'json',\n ...thinkingArgs,\n '--model',\n `${providerID}/${modelID}`,\n '--dir',\n options.cwd\n ];\n\n // Write images to disk and build --file flags for the CLI\n const hasImages =\n scenario.triggerPromptImages && scenario.triggerPromptImages.length > 0;\n const imageFileArgs: string[] = [];\n if (hasImages) {\n const imagePaths = await writePromptImages(\n options.cwd,\n scenario.triggerPromptImages!\n );\n for (const imgPath of imagePaths) {\n imageFileArgs.push('-f', imgPath);\n }\n }\n\n // Retry loop \u2014 on idle timeout, kill the process and retry with recovery context\n const accumulatedEvents: TimestampedOpenCodeEvent[] = [];\n let traceStepNumber = 0;\n let lastAttemptResult: SpawnAttemptResult | undefined;\n\n for (let attempt = 1; attempt <= MAX_IDLE_RETRIES; attempt++) {\n const prompt =\n attempt === 1\n ? scenario.triggerPrompt\n : buildRecoveryPrompt(scenario.triggerPrompt, accumulatedEvents);\n\n if (attempt > 1) {\n console.log(\n `[OpenCode] Retry attempt ${attempt}/${MAX_IDLE_RETRIES} \u2014 starting fresh session with recovery context`\n );\n if (traceContext) {\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: traceStepNumber + 1,\n type: LiveTraceEventType.DIAGNOSTIC,\n outputPreview: JSON.stringify({\n event: 'idle-timeout-retry',\n attempt,\n maxRetries: MAX_IDLE_RETRIES,\n eventsFromPreviousAttempts: accumulatedEvents.length\n }),\n timestamp: new Date().toISOString(),\n isComplete: false\n },\n traceContext.pushEvent\n );\n }\n }\n\n const args = [...baseArgs, ...imageFileArgs, prompt];\n console.log(\n `[executeWithOpenCode] Spawning attempt ${attempt}: opencode`,\n args.slice(0, 5)\n );\n\n lastAttemptResult = await spawnOpenCodeProcess({\n args,\n env,\n cwd: options.cwd,\n skillNames,\n scenarioName: scenario.name,\n sdkTimeoutMs,\n traceContext,\n initialStepNumber: traceStepNumber\n });\n\n accumulatedEvents.push(...lastAttemptResult.events);\n traceStepNumber = lastAttemptResult.finalStepNumber;\n\n if (lastAttemptResult.success) {\n break;\n }\n\n if (!lastAttemptResult.isIdleTimeout || attempt >= MAX_IDLE_RETRIES) {\n // Non-retryable error or all retries exhausted\n if (traceContext) {\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: traceStepNumber + 1,\n type: LiveTraceEventType.DIAGNOSTIC,\n outputPreview: JSON.stringify({\n event: 'cli-execution-failed',\n error: lastAttemptResult.error?.message ?? 'Unknown error',\n attempt,\n isIdleTimeout: lastAttemptResult.isIdleTimeout\n }).slice(0, 2000),\n timestamp: new Date().toISOString(),\n isComplete: true\n },\n traceContext.pushEvent\n );\n }\n throw (\n lastAttemptResult.error ??\n new Error(\n `OpenCode CLI execution failed.\\nAttempt: ${attempt}, Events: ${accumulatedEvents.length}`\n )\n );\n }\n\n console.warn(\n `[OpenCode] Attempt ${attempt} failed due to idle timeout, will retry`\n );\n }\n\n // Build final result from accumulated events across all attempts\n const endTime = new Date();\n const totalDurationMs = endTime.getTime() - startTime.getTime();\n\n let outputText = '';\n for (const { event: evt } of accumulatedEvents) {\n if (evt.type === 'text') {\n outputText += (evt as OpenCodeTextEvent).part.text;\n }\n }\n\n if (!outputText) {\n throw new Error(\n 'Agent produced no text output. ' +\n `Model: ${providerID}/${modelID}, Events: ${accumulatedEvents.length}`\n );\n }\n\n let inputTokens = 0;\n let outputTokens = 0;\n let costUsd = 0;\n for (const { event: evt } of accumulatedEvents) {\n if (evt.type === 'step_finish') {\n const sf = evt as OpenCodeStepFinishEvent;\n inputTokens += sf.part.tokens.input;\n outputTokens += sf.part.tokens.output;\n costUsd += sf.part.cost;\n }\n }\n\n // Emit completion trace event\n if (traceContext) {\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: traceStepNumber + 1,\n type: LiveTraceEventType.COMPLETION,\n outputPreview: 'Scenario execution completed',\n timestamp: new Date().toISOString(),\n isComplete: true\n },\n traceContext.pushEvent\n );\n }\n\n const modelStr = options.model || `${providerID}/${modelID}`;\n const llmTrace = buildLLMTrace(\n accumulatedEvents,\n totalDurationMs,\n modelStr,\n providerID,\n startTime\n );\n const conversation = buildConversation(accumulatedEvents);\n\n return {\n result: {\n outputText,\n durationMs: totalDurationMs,\n usage: {\n inputTokens,\n outputTokens,\n totalTokens: inputTokens + outputTokens\n },\n costUsd\n },\n llmTrace,\n conversation\n };\n}\n", "import type { MCPEntity, SubAgent, Rule } from '@wix/evalforge-types';\n\nexport type { TraceContext } from '@wix/evalforge-types';\n\n// ---------------------------------------------------------------------------\n// NDJSON event types emitted by `opencode run --format json`\n// ---------------------------------------------------------------------------\n\nexport interface OpenCodeTextEvent {\n type: 'text';\n part: { text: string };\n}\n\nexport interface OpenCodeReasoningEvent {\n type: 'reasoning';\n part: { text: string };\n}\n\nexport interface OpenCodeToolUseEvent {\n type: 'tool_use';\n part: {\n tool: string;\n callID: string;\n state: {\n status: string;\n input?: Record<string, unknown>;\n output?: string;\n error?: string;\n title?: string;\n metadata?: Record<string, unknown>;\n };\n };\n}\n\nexport interface OpenCodeStepFinishEvent {\n type: 'step_finish';\n part: {\n reason: string;\n cost: number;\n tokens: {\n total: number;\n input: number;\n output: number;\n reasoning: number;\n cache: { read: number; write: number };\n };\n modelID?: string;\n providerID?: string;\n };\n}\n\nexport type OpenCodeEvent =\n | OpenCodeTextEvent\n | OpenCodeReasoningEvent\n | OpenCodeToolUseEvent\n | OpenCodeStepFinishEvent;\n\nexport interface TimestampedOpenCodeEvent {\n event: OpenCodeEvent;\n receivedAt: number;\n}\n\n// ---------------------------------------------------------------------------\n// Execution options & result\n// ---------------------------------------------------------------------------\n\nexport interface OpenCodeExecutionOptions {\n cwd: string;\n mcps?: MCPEntity[];\n subAgents?: SubAgent[];\n rules?: Rule[];\n model?: string;\n temperature?: number;\n /** Nucleus sampling (0\u20131). Alternative to temperature. */\n topP?: number;\n maxTurns?: number;\n /** Thinking variant: 'high' | 'low' | 'none'. Default: 'high'. 'none' omits --thinking flag. */\n thinkingVariant?: string;\n /** Execution timeout override in milliseconds */\n maxDurationMs?: number;\n aiGatewayUrl?: string;\n aiGatewayHeaders?: Record<string, string>;\n traceContext?: import('@wix/evalforge-types').TraceContext;\n systemPrompt?: string | null;\n /** Agent config bag for passing to buildOpenCodeEnv (permission overrides, etc.) */\n config?: Record<string, unknown>;\n}\n\nexport interface OpenCodeExecutionResult {\n outputText: string;\n durationMs: number;\n usage: {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n };\n costUsd?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nexport function tryParseJson<T>(text: string): T | null {\n try {\n return JSON.parse(text) as T;\n } catch {\n return null;\n }\n}\n", "import { mkdir } from 'fs/promises';\nimport { join } from 'path';\nimport type { SkillWithLatestVersion } from '@wix/evalforge-types';\nimport {\n resolveSkillFiles,\n type FetchGitHubFolderFn\n} from '../shared/resolve-capability-content.js';\nimport { writeFilesToDirectory } from '../../utils/write-files.js';\n\nexport type { FetchGitHubFolderFn };\n\n/**\n * Write all skills to .opencode/skills/ so OpenCode can discover them.\n * Content is resolved by the shared capability fetcher (stored snapshot or\n * live GitHub fetch).\n */\nexport async function writeSkillsToFilesystem(\n cwd: string,\n skills: SkillWithLatestVersion[],\n fetchFn?: FetchGitHubFolderFn\n): Promise<void> {\n await Promise.all(\n skills.map((skill) => writeSkillToFilesystem(cwd, skill, fetchFn))\n );\n}\n\nasync function writeSkillToFilesystem(\n cwd: string,\n skill: SkillWithLatestVersion,\n fetchFn?: FetchGitHubFolderFn\n): Promise<void> {\n const skillDir = join(cwd, '.opencode', 'skills', skill.name);\n await mkdir(skillDir, { recursive: true });\n\n try {\n const files = await resolveSkillFiles(skill, fetchFn);\n await writeFilesToDirectory(skillDir, files);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n throw new Error(\n `Failed to write skill ${skill.name} to filesystem: ${message}`\n );\n }\n}\n", "import { mkdir, writeFile } from 'fs/promises';\nimport { join } from 'path';\nimport type { SubAgent } from '@wix/evalforge-types';\nimport {\n resolveSubAgentMd,\n type FetchGitHubFileFn\n} from '../shared/resolve-capability-content.js';\n\nexport type { FetchGitHubFileFn };\n\nconst AGENTS_DIR = '.opencode/agents';\n\nfunction toAgentFilename(\n name: string,\n index: number,\n nameCount: Map<string, number>\n): string {\n const base =\n (name || '')\n .toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^a-z0-9-]/g, '')\n .replace(/^-+|-+$/g, '') || `sub-agent-${index}`;\n\n const count = nameCount.get(base) ?? 0;\n nameCount.set(base, count + 1);\n\n return count === 0 ? base : `${base}-${count + 1}`;\n}\n\n/**\n * Write sub-agent markdown files to .opencode/agents/ for OpenCode to discover.\n */\nexport async function writeSubAgentsToFilesystem(\n cwd: string,\n subAgents: SubAgent[],\n fetchFn?: FetchGitHubFileFn\n): Promise<void> {\n if (subAgents.length === 0) return;\n\n const agentsDir = join(cwd, AGENTS_DIR);\n await mkdir(agentsDir, { recursive: true });\n\n const nameCount = new Map<string, number>();\n\n for (const [i, agent] of subAgents.entries()) {\n const filename = toAgentFilename(agent.name, i, nameCount);\n const filePath = join(agentsDir, `${filename}.md`);\n const content = await resolveSubAgentMd(agent, fetchFn);\n await writeFile(filePath, content, 'utf8');\n }\n\n console.log(`[SubAgents] Written to ${agentsDir}`);\n}\n", "import { homedir } from 'os';\nimport {\n ClaudeModel,\n AVAILABLE_OPENAI_MODEL_IDS,\n AVAILABLE_GEMINI_MODEL_IDS,\n OpenCodeConfigSchema,\n type MCPEntity,\n type OpenCodePermission,\n type Rule\n} from '@wix/evalforge-types';\nimport { resolveMcpPlaceholders } from '../shared/resolve-mcp-placeholders.js';\nimport { resolveMcpConfig } from '../shared/resolve-capability-content.js';\n\nconst DEFAULT_MODEL = `${ClaudeModel.CLAUDE_4_5_SONNET_1_0}`;\n\nexport interface OpenCodeConfigOptions {\n model?: string;\n temperature?: number;\n topP?: number;\n maxTurns?: number;\n aiGatewayUrl?: string;\n aiGatewayHeaders?: Record<string, string>;\n mcps?: MCPEntity[];\n rules?: Rule[];\n cwd: string;\n /** Agent config bag \u2014 may contain permission overrides */\n config?: Record<string, unknown>;\n}\n\n/**\n * OpenCode's provider registry requires versioned Claude model IDs\n * (e.g. `claude-sonnet-4-0` not `claude-sonnet-4`).\n * Our canonical IDs omit the patch suffix for the 4.0 family \u2014 map them here.\n */\nconst OPENCODE_MODEL_ALIASES: Record<string, string> = {\n 'claude-sonnet-4': 'claude-sonnet-4-0',\n 'claude-opus-4': 'claude-opus-4-0'\n};\n\n/**\n * Parse a model string into provider and model ID.\n * Accepts \"provider/model-id\" or bare \"model-id\" (defaults to anthropic).\n */\nfunction parseModel(model: string): { providerID: string; modelID: string } {\n const slashIndex = model.indexOf('/');\n if (slashIndex > 0) {\n const providerID = model.slice(0, slashIndex);\n const rawModelID = model.slice(slashIndex + 1);\n return {\n providerID,\n modelID: OPENCODE_MODEL_ALIASES[rawModelID] ?? rawModelID\n };\n }\n const modelID = OPENCODE_MODEL_ALIASES[model] ?? model;\n const isOpenAI = (AVAILABLE_OPENAI_MODEL_IDS as readonly string[]).includes(\n model\n );\n const isGemini = (AVAILABLE_GEMINI_MODEL_IDS as readonly string[]).includes(\n model\n );\n if (isGemini) return { providerID: 'google', modelID };\n return { providerID: isOpenAI ? 'openai' : 'anthropic', modelID };\n}\n\n/**\n * Convert generic MCP server entries into the OpenCode config format.\n */\nfunction toOpenCodeMcpConfig(\n servers: Record<string, Record<string, unknown>>\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [name, entry] of Object.entries(servers)) {\n if (entry.type === 'local' || entry.type === 'remote') {\n result[name] = entry;\n continue;\n }\n\n if (entry.url && typeof entry.url === 'string') {\n result[name] = {\n type: 'remote' as const,\n url: entry.url,\n ...(entry.headers\n ? { headers: entry.headers as Record<string, string> }\n : {}),\n ...(typeof entry.enabled === 'boolean'\n ? { enabled: entry.enabled }\n : {})\n };\n continue;\n }\n\n if (entry.command && typeof entry.command === 'string') {\n const commandArray = [\n entry.command as string,\n ...((entry.args as string[]) || [])\n ];\n result[name] = {\n type: 'local' as const,\n command: commandArray,\n ...(entry.env\n ? { environment: entry.env as Record<string, string> }\n : {}),\n ...(typeof entry.enabled === 'boolean'\n ? { enabled: entry.enabled }\n : {})\n };\n continue;\n }\n\n console.warn(\n `[MCP] Server \"${name}\" has unrecognized format, passing through as-is:`,\n JSON.stringify(entry)\n );\n result[name] = entry;\n }\n\n return result;\n}\n\n/**\n * Ensure `~/.opencode/bin` is on a PATH string.\n */\nfunction ensureOpenCodeInPath(currentPath: string): string {\n const opencodeBin = `${homedir()}/.opencode/bin`;\n if (currentPath.includes(opencodeBin)) {\n return currentPath;\n }\n return `${opencodeBin}:${currentPath}`;\n}\n\n/**\n * Build environment variables for spawning `opencode run`.\n *\n * Returns the env object (including `OPENCODE_CONFIG_CONTENT`) and the\n * parsed provider/model IDs needed by the caller.\n */\nexport async function buildOpenCodeEnv(\n options: OpenCodeConfigOptions\n): Promise<{\n env: NodeJS.ProcessEnv;\n providerID: string;\n modelID: string;\n}> {\n const modelStr = options.model || DEFAULT_MODEL;\n const { providerID, modelID } = parseModel(modelStr);\n\n // Build provider config\n const provider: Record<string, unknown> = {};\n if (options.aiGatewayUrl) {\n // @ai-sdk/google uses 'google' as its provider ID, but our proxy is\n // mounted at /proxy/gemini (matching the Gemini REST API format).\n const proxyPath = providerID === 'google' ? 'gemini' : providerID;\n const providerOptions: Record<string, unknown> = {\n baseURL: `${options.aiGatewayUrl}/proxy/${proxyPath}`,\n apiKey: 'sk-placeholder-auth-handled-by-gateway'\n };\n if (options.aiGatewayHeaders) {\n providerOptions.headers = { ...options.aiGatewayHeaders };\n }\n provider[providerID] = { options: providerOptions };\n }\n\n // Build MCP config\n let mcp: Record<string, unknown> | undefined;\n if (options.mcps && options.mcps.length > 0) {\n const mcpServers: Record<string, Record<string, unknown>> = {};\n for (const mcpEntity of options.mcps) {\n const entityConfig = await resolveMcpConfig(mcpEntity);\n for (const [key, value] of Object.entries(entityConfig)) {\n if (\n typeof value !== 'object' ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new Error(\n `MCP \"${mcpEntity.name}\" has invalid config: value for key \"${key}\" must be an object (got ${typeof value}).`\n );\n }\n mcpServers[key] = value as Record<string, unknown>;\n }\n }\n const resolved = await resolveMcpPlaceholders(mcpServers, {\n cwd: options.cwd\n });\n mcp = toOpenCodeMcpConfig(resolved);\n }\n\n // Build agent overrides\n const agentOverrides: Record<string, unknown> = {};\n if (options.temperature != null) {\n agentOverrides.temperature = options.temperature;\n }\n if (options.topP != null) {\n agentOverrides.top_p = options.topP;\n }\n // 0 = unlimited \u2014 omit maxSteps so the CLI uses its default (unlimited)\n if (options.maxTurns != null && options.maxTurns > 0) {\n agentOverrides.maxSteps = options.maxTurns;\n }\n\n // Merge permission overrides from agent config bag (default: allow-all).\n // OpenCode CLI permission config supports a mixed format:\n // { \"*\": \"allow\", bash: { \"git *\": \"allow\", \"*\": \"deny\" }, edit: { \"*\": \"allow\" } }\n // Valid nested categories: edit, bash, external_directory, * (catch-all).\n // Keys like \"webfetch\" or \"doom_loop\" are internal permission IDs and are NOT valid\n // as nested config keys \u2014 use \"*\": \"allow\" to cover them instead.\n const parsed = options.config\n ? OpenCodeConfigSchema.passthrough().safeParse(options.config)\n : undefined;\n const configPermission: OpenCodePermission | undefined = parsed?.success\n ? parsed.data.permission\n : undefined;\n const defaultPermission: Record<string, string | Record<string, string>> = {\n '*': 'allow'\n };\n const permission: Record<string, string | Record<string, string>> = {\n ...defaultPermission,\n ...configPermission\n };\n\n // Collect unique directories from generic rules and emit as instructions globs.\n let instructions: string[] | undefined;\n if (options.rules && options.rules.length > 0) {\n const genericDirs = new Set<string>();\n for (const rule of options.rules) {\n if (rule.ruleType === 'generic') {\n genericDirs.add(rule.directory ?? '.opencode/rules');\n }\n }\n if (genericDirs.size > 0) {\n instructions = Array.from(genericDirs)\n .sort()\n .map((d) => `${d}/*.md`);\n }\n }\n\n // Assemble the full config object\n const config: Record<string, unknown> = {\n model: `${providerID}/${modelID}`,\n provider,\n ...(Object.keys(agentOverrides).length > 0\n ? { agent: { build: agentOverrides } }\n : {}),\n permission,\n // Align with ditto/codegen: LSP post-edit diagnostics can hang remote eval machines.\n lsp: false,\n ...(mcp ? { mcp } : {}),\n ...(instructions ? { instructions } : {})\n };\n\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n PATH: ensureOpenCodeInPath(process.env.PATH || ''),\n OPENCODE_CONFIG_CONTENT: JSON.stringify(config),\n OPENCODE_DISABLE_LSP_DOWNLOAD: 'true',\n OPENCODE_DISABLE_FILETIME_CHECK: 'true'\n };\n\n return { env, providerID, modelID };\n}\n", "import type {\n LLMTrace,\n LLMTraceStep,\n LLMTraceSummary\n} from '@wix/evalforge-types';\nimport { LLMStepType } from '@wix/evalforge-types';\nimport { randomUUID } from 'crypto';\nimport type {\n OpenCodeTextEvent,\n OpenCodeReasoningEvent,\n OpenCodeToolUseEvent,\n OpenCodeStepFinishEvent,\n TimestampedOpenCodeEvent\n} from './types.js';\n\n/**\n * A \"turn\" is a group of events between two step_finish boundaries.\n * Each turn produces one or more LLMTraceSteps.\n */\ninterface Turn {\n textParts: string[];\n reasoningParts: string[];\n toolCalls: Array<{ toolName: string; args: unknown }>;\n stepFinish?: OpenCodeStepFinishEvent['part'];\n receivedAt?: number;\n}\n\n/**\n * Build an LLMTrace from the NDJSON events emitted by `opencode run --format json`.\n *\n * Events are grouped into turns delimited by `step_finish` events.\n * Each turn may produce THINKING, TOOL_USE, and COMPLETION sub-steps\n * to match the claude-code trace format.\n */\n/**\n * Strip the provider prefix from a model ID if present.\n * OpenCode formats model IDs as \"provider/model\" (e.g. \"anthropic/claude-sonnet-4-6\").\n * Returns the canonical model ID without the prefix.\n */\nfunction toCanonicalModelId(modelId: string): string {\n const slashIndex = modelId.indexOf('/');\n return slashIndex > 0 ? modelId.slice(slashIndex + 1) : modelId;\n}\n\nexport function buildLLMTrace(\n timestampedEvents: TimestampedOpenCodeEvent[],\n totalDurationMs: number,\n model: string,\n provider: string,\n executionStartTime: Date\n): LLMTrace {\n const canonicalModel = toCanonicalModelId(model);\n\n // Group events into turns\n const turns: Turn[] = [];\n let current: Turn = {\n textParts: [],\n reasoningParts: [],\n toolCalls: []\n };\n\n for (const { event: evt, receivedAt } of timestampedEvents) {\n switch (evt.type) {\n case 'text':\n current.textParts.push((evt as OpenCodeTextEvent).part.text);\n break;\n case 'reasoning':\n current.reasoningParts.push((evt as OpenCodeReasoningEvent).part.text);\n break;\n case 'tool_use': {\n const tu = evt as OpenCodeToolUseEvent;\n current.toolCalls.push({\n toolName: tu.part.tool,\n args: tu.part.state.input\n });\n break;\n }\n case 'step_finish': {\n const sf = evt as OpenCodeStepFinishEvent;\n current.stepFinish = sf.part;\n current.receivedAt = receivedAt;\n turns.push(current);\n current = {\n textParts: [],\n reasoningParts: [],\n toolCalls: []\n };\n break;\n }\n }\n }\n\n // If there are remaining events with no step_finish, flush them\n if (\n current.textParts.length > 0 ||\n current.reasoningParts.length > 0 ||\n current.toolCalls.length > 0\n ) {\n // Use the last event's receivedAt for the incomplete turn\n if (timestampedEvents.length > 0) {\n current.receivedAt =\n timestampedEvents[timestampedEvents.length - 1].receivedAt;\n }\n turns.push(current);\n }\n\n // Convert turns into trace steps using real per-turn timing\n const executionStartMs = executionStartTime.getTime();\n\n const allSteps: LLMTraceStep[] = turns\n .flatMap((turn, turnIndex) => {\n const sf = turn.stepFinish;\n const stepInputTokens = sf?.tokens.input ?? 0;\n const stepOutputTokens = sf?.tokens.output ?? 0;\n const stepCost = sf?.cost ?? 0;\n const finishReason = sf?.reason ?? 'unknown';\n const stepModel = toCanonicalModelId(sf?.modelID || model);\n const stepProvider = sf?.providerID || provider;\n\n // Compute real timing from receivedAt timestamps\n const turnEndMs = turn.receivedAt ?? executionStartMs + totalDurationMs;\n const prevEndMs =\n turnIndex > 0\n ? (turns[turnIndex - 1].receivedAt ?? executionStartMs)\n : executionStartMs;\n const durationMs = Math.max(0, turnEndMs - prevEndMs);\n const startedAt = new Date(prevEndMs).toISOString();\n\n const text = turn.textParts.join('');\n const thinking = turn.reasoningParts.join('');\n const toolCallCount = turn.toolCalls.length;\n const hasThinking = !!thinking;\n const hasText = !!text;\n const isSuccess = finishReason !== 'error';\n const errorMsg =\n finishReason === 'error' ? 'Generation failed' : undefined;\n\n const subSteps: LLMTraceStep[] = [];\n const thinkingSubSteps =\n hasThinking && (hasText || toolCallCount > 0) ? 1 : 0;\n const toolSubSteps = toolCallCount;\n const textSubSteps = hasText && toolCallCount > 0 ? 1 : 0;\n const totalSubSteps = thinkingSubSteps + toolSubSteps + textSubSteps || 1;\n\n // THINKING sub-step\n if (hasThinking && (hasText || toolCallCount > 0)) {\n subSteps.push({\n id: randomUUID(),\n stepNumber: 0,\n turnIndex,\n type: LLMStepType.THINKING,\n model: stepModel,\n provider: stepProvider,\n startedAt,\n durationMs: Math.round(durationMs / totalSubSteps),\n tokenUsage: {\n prompt: Math.round(stepInputTokens / totalSubSteps),\n completion: Math.round(stepOutputTokens / totalSubSteps),\n total: Math.round(\n (stepInputTokens + stepOutputTokens) / totalSubSteps\n )\n },\n costUsd: stepCost / totalSubSteps,\n outputPreview: thinking.slice(0, 200),\n success: isSuccess,\n error: errorMsg\n });\n }\n\n // TOOL_USE sub-steps\n if (toolCallCount > 0) {\n for (let tcIdx = 0; tcIdx < toolCallCount; tcIdx++) {\n const tc = turn.toolCalls[tcIdx];\n const isLast = tcIdx === toolCallCount - 1 && textSubSteps === 0;\n const toolBudgetSteps = toolSubSteps + textSubSteps;\n const toolFraction = toolBudgetSteps > 0 ? 1 / toolBudgetSteps : 1;\n const remainingFraction =\n (totalSubSteps - thinkingSubSteps) / totalSubSteps;\n\n subSteps.push({\n id: randomUUID(),\n stepNumber: 0,\n turnIndex,\n type: LLMStepType.TOOL_USE,\n model: stepModel,\n provider: stepProvider,\n startedAt,\n durationMs: isLast\n ? durationMs - subSteps.reduce((s, ss) => s + ss.durationMs, 0)\n : Math.round(durationMs * remainingFraction * toolFraction),\n tokenUsage: {\n prompt: Math.round(\n stepInputTokens * remainingFraction * toolFraction\n ),\n completion: Math.round(\n stepOutputTokens * remainingFraction * toolFraction\n ),\n total: Math.round(\n (stepInputTokens + stepOutputTokens) *\n remainingFraction *\n toolFraction\n )\n },\n costUsd: stepCost * remainingFraction * toolFraction,\n toolName: tc.toolName,\n toolArguments: JSON.stringify(tc.args),\n outputPreview:\n tcIdx === 0 && !hasText\n ? (text || thinking)?.slice(0, 200)\n : undefined,\n success: isSuccess,\n error: errorMsg\n });\n }\n }\n\n // COMPLETION sub-step (text when tools were also present)\n if (hasText && toolCallCount > 0) {\n subSteps.push({\n id: randomUUID(),\n stepNumber: 0,\n turnIndex,\n type: LLMStepType.COMPLETION,\n model: stepModel,\n provider: stepProvider,\n startedAt,\n durationMs:\n durationMs - subSteps.reduce((s, ss) => s + ss.durationMs, 0),\n tokenUsage: {\n prompt:\n stepInputTokens -\n subSteps.reduce((s, ss) => s + ss.tokenUsage.prompt, 0),\n completion:\n stepOutputTokens -\n subSteps.reduce((s, ss) => s + ss.tokenUsage.completion, 0),\n total:\n stepInputTokens +\n stepOutputTokens -\n subSteps.reduce((s, ss) => s + ss.tokenUsage.total, 0)\n },\n costUsd: stepCost - subSteps.reduce((s, ss) => s + ss.costUsd, 0),\n outputPreview: text.slice(0, 200),\n success: isSuccess,\n error: errorMsg\n });\n }\n\n // Fallback: pure text or pure thinking\n if (subSteps.length === 0) {\n const stepType =\n hasThinking && !hasText\n ? LLMStepType.THINKING\n : LLMStepType.COMPLETION;\n subSteps.push({\n id: randomUUID(),\n stepNumber: 0,\n turnIndex,\n type: stepType,\n model: stepModel,\n provider: stepProvider,\n startedAt,\n durationMs,\n tokenUsage: {\n prompt: stepInputTokens,\n completion: stepOutputTokens,\n total: stepInputTokens + stepOutputTokens\n },\n costUsd: stepCost,\n outputPreview: (text || thinking)?.slice(0, 200),\n success: isSuccess,\n error: errorMsg\n });\n }\n\n return subSteps;\n })\n .map((s, i) => ({ ...s, stepNumber: i + 1 }));\n\n // Aggregate totals\n let totalPrompt = 0;\n let totalCompletion = 0;\n let totalCost = 0;\n for (const turn of turns) {\n if (turn.stepFinish) {\n totalPrompt += turn.stepFinish.tokens.input;\n totalCompletion += turn.stepFinish.tokens.output;\n totalCost += turn.stepFinish.cost;\n }\n }\n const totalTokens = {\n prompt: totalPrompt,\n completion: totalCompletion,\n total: totalPrompt + totalCompletion\n };\n\n const stepTypeBreakdown: Record<\n string,\n { count: number; durationMs: number; tokens: number; costUsd: number }\n > = {};\n for (const step of allSteps) {\n const entry = stepTypeBreakdown[step.type] ?? {\n count: 0,\n durationMs: 0,\n tokens: 0,\n costUsd: 0\n };\n entry.count += 1;\n entry.durationMs += step.durationMs;\n entry.tokens += step.tokenUsage.total;\n entry.costUsd += step.costUsd;\n stepTypeBreakdown[step.type] = entry;\n }\n\n const modelUsed = allSteps[0]?.model || canonicalModel;\n const summary: LLMTraceSummary = {\n totalSteps: allSteps.length,\n totalTurns: turns.length,\n totalDurationMs,\n totalTokens,\n totalCostUsd: totalCost,\n modelBreakdown: {\n [modelUsed]: {\n count: allSteps.length,\n durationMs: totalDurationMs,\n tokens: totalTokens.total,\n costUsd: totalCost\n }\n },\n modelsUsed: [modelUsed],\n stepTypeBreakdown\n };\n\n return {\n id: randomUUID(),\n steps: allSteps,\n summary\n };\n}\n", "import type { ConversationMessage } from '@wix/evalforge-types';\nimport type {\n OpenCodeTextEvent,\n OpenCodeReasoningEvent,\n OpenCodeToolUseEvent,\n TimestampedOpenCodeEvent\n} from './types.js';\n\n/**\n * Build a conversation from the NDJSON events emitted by\n * `opencode run --format json`.\n *\n * Events are grouped into assistant turns (text, reasoning, tool_use)\n * separated by step_finish events. Tool results appear as user messages.\n */\nexport function buildConversation(\n timestampedEvents: TimestampedOpenCodeEvent[]\n): ConversationMessage[] {\n const result: ConversationMessage[] = [];\n\n let assistantContent: ConversationMessage['content'] = [];\n let userContent: ConversationMessage['content'] = [];\n let latestReceivedAt = 0;\n\n const flushAssistant = (): void => {\n if (assistantContent.length > 0) {\n const timestamp =\n latestReceivedAt > 0\n ? new Date(latestReceivedAt).toISOString()\n : new Date().toISOString();\n result.push({ role: 'assistant', content: assistantContent, timestamp });\n assistantContent = [];\n }\n };\n\n const flushUser = (): void => {\n if (userContent.length > 0) {\n const timestamp =\n latestReceivedAt > 0\n ? new Date(latestReceivedAt).toISOString()\n : new Date().toISOString();\n result.push({ role: 'user', content: userContent, timestamp });\n userContent = [];\n }\n };\n\n for (const { event: evt, receivedAt } of timestampedEvents) {\n latestReceivedAt = receivedAt;\n\n switch (evt.type) {\n case 'text': {\n const te = evt as OpenCodeTextEvent;\n assistantContent.push({ type: 'text', text: te.part.text });\n break;\n }\n case 'reasoning': {\n const re = evt as OpenCodeReasoningEvent;\n assistantContent.push({ type: 'thinking', thinking: re.part.text });\n break;\n }\n case 'tool_use': {\n const tu = evt as OpenCodeToolUseEvent;\n // Tool invocation goes on the assistant side\n assistantContent.push({\n type: 'tool_use',\n toolName: tu.part.tool,\n toolId: tu.part.callID,\n input: tu.part.state.input\n });\n\n // If the tool has completed or errored, emit a user tool_result\n if (\n tu.part.state.status === 'completed' ||\n tu.part.state.status === 'error'\n ) {\n // Flush any pending assistant content first\n flushAssistant();\n\n const isError = tu.part.state.status === 'error';\n const content = isError\n ? tu.part.state.error || 'Tool execution failed'\n : tu.part.state.output || '';\n userContent.push({\n type: 'tool_result',\n toolUseId: tu.part.callID,\n content,\n ...(isError ? { isError: true } : {})\n });\n flushUser();\n }\n break;\n }\n case 'step_finish': {\n // Flush the current turn\n flushAssistant();\n flushUser();\n break;\n }\n }\n }\n\n // Flush any remaining content\n flushAssistant();\n flushUser();\n\n return result;\n}\n", "/**\n * OpenCode agent adapter module.\n *\n * Provides the OpenCode implementation of the AgentAdapter interface.\n * Spawns the `opencode` CLI and parses NDJSON events from stdout.\n *\n * The adapter is automatically registered with the default registry when\n * this module is imported.\n */\n\nexport { OpenCodeAdapter, openCodeAdapter } from './opencode-adapter.js';\nexport { executeWithOpenCode } from './execute.js';\nexport { buildConversation } from './build-conversation.js';\n\nexport type {\n OpenCodeExecutionOptions,\n OpenCodeExecutionResult\n} from './types.js';\nexport type { TraceContext } from '@wix/evalforge-types';\n\n// Register the adapter with the default registry\nimport { defaultRegistry } from '../registry.js';\nimport { openCodeAdapter } from './opencode-adapter.js';\n\ndefaultRegistry.register(openCodeAdapter);\n", "import { resolveTimeoutMs } from '../timeout.js';\nimport {\n APICallError,\n generateText,\n streamText,\n stepCountIs,\n type LanguageModel,\n type StepResult,\n type ToolSet\n} from 'ai';\nimport { createAnthropic } from '@ai-sdk/anthropic';\nimport { createGoogleGenerativeAI } from '@ai-sdk/google';\nimport { createOpenAI } from '@ai-sdk/openai';\nimport type {\n AgentExecutionContext,\n AgentExecutionResult,\n LLMTrace,\n TraceContext,\n SimpleAgentConfig\n} from '@wix/evalforge-types';\nimport {\n AVAILABLE_CLAUDE_MODEL_IDS,\n AVAILABLE_GEMINI_MODEL_IDS,\n GEMINI_THINKING_MODEL_IDS,\n OPENAI_RESPONSES_MODEL_IDS,\n LLMStepType,\n LiveTraceEventType,\n SimpleAgentConfigSchema\n} from '@wix/evalforge-types';\nimport { randomUUID } from 'crypto';\nimport { buildMcpTools, closeMcpClients } from './mcp-tools.js';\nimport { emitTraceEvent } from '../shared/trace-emit.js';\nimport { detectMcpToolError } from '../shared/detect-tool-error.js';\nimport { calculateStepCost } from './cost-calculation.js';\nimport { buildConversation } from './build-conversation.js';\n\nconst PROVIDER_ANTHROPIC = 'anthropic';\nconst PROVIDER_OPENAI = 'openai';\nconst PROVIDER_GEMINI = 'gemini';\n\n/**\n * Default agentic loop iterations when MCP tools are available.\n * Caps tool-use rounds to prevent runaway loops; a single-step\n * limit is used when no tools are present. Can be overridden via\n * config.maxTurns.\n */\nconst DEFAULT_MAX_TOOL_STEPS = 25;\n\nexport function createModel(\n modelId: string,\n baseUrl: string,\n headers: Record<string, string>\n): LanguageModel {\n if (isClaudeModelId(modelId)) {\n const anthropic = createAnthropic({\n baseURL: `${baseUrl}/proxy/anthropic`,\n apiKey: 'proxy-auth',\n headers\n });\n return anthropic(modelId);\n }\n\n if (isGeminiModelId(modelId)) {\n const google = createGoogleGenerativeAI({\n baseURL: `${baseUrl}/proxy/gemini`,\n apiKey: 'proxy-auth',\n headers\n });\n return google(modelId);\n }\n\n const openai = createOpenAI({\n baseURL: `${baseUrl}/proxy/openai`,\n apiKey: 'proxy-auth',\n headers\n });\n\n if (\n [...OPENAI_RESPONSES_MODEL_IDS].some(\n (id) => modelId === id || modelId.startsWith(id)\n )\n ) {\n return openai.responses(modelId);\n }\n\n return openai.chat(modelId);\n}\n\nexport function isClaudeModelId(modelId: string): boolean {\n return (AVAILABLE_CLAUDE_MODEL_IDS as string[]).some(\n (id) => modelId === id || modelId.startsWith(id)\n );\n}\n\nexport function isGeminiModelId(modelId: string): boolean {\n return (AVAILABLE_GEMINI_MODEL_IDS as string[]).some(\n (id) => modelId === id || modelId.startsWith(id)\n );\n}\n\n/**\n * Extract text content from a skill's latest version files.\n * Concatenates all file contents, prioritizing SKILL.md if present.\n */\nexport function extractSkillContent(\n files: Array<{ path: string; content: string }> | undefined\n): string | undefined {\n if (!files || files.length === 0) return undefined;\n\n const skillMd = files.find((f) => f.path === 'SKILL.md');\n if (skillMd) return skillMd.content;\n\n return files.map((f) => f.content).join('\\n\\n');\n}\n\nexport async function executeWithAiSdk(\n context: AgentExecutionContext\n): Promise<AgentExecutionResult> {\n const {\n scenario,\n cwd,\n config,\n aiGatewayUrl,\n aiGatewayHeaders = {},\n mcps,\n traceContext\n } = context;\n\n // Parse config with typed Zod schema \u2014 all model + agent-specific params\n const typed = config\n ? SimpleAgentConfigSchema.passthrough().safeParse(config)\n : undefined;\n const cfg: SimpleAgentConfig | undefined = typed?.success\n ? typed.data\n : undefined;\n\n // Extract unknown config keys to forward as generateText options\n const schemaKeys = new Set(Object.keys(SimpleAgentConfigSchema.shape));\n const configExtras: Record<string, unknown> = {};\n if (config) {\n for (const [key, value] of Object.entries(config)) {\n if (!schemaKeys.has(key)) configExtras[key] = value;\n }\n }\n\n if (!aiGatewayUrl) {\n throw new Error('Simple Agent requires aiGatewayUrl');\n }\n if (!cfg?.model) {\n throw new Error('Simple Agent requires a model in config');\n }\n\n const modelId = cfg.model;\n const model = createModel(modelId, aiGatewayUrl, aiGatewayHeaders);\n const provider = isClaudeModelId(modelId)\n ? PROVIDER_ANTHROPIC\n : isGeminiModelId(modelId)\n ? PROVIDER_GEMINI\n : PROVIDER_OPENAI;\n\n const systemPrompt = composeSystemPrompt(context);\n\n const { tools: mcpTools, clients } =\n mcps && mcps.length > 0\n ? await buildMcpTools(mcps, cwd)\n : { tools: undefined, clients: [] };\n\n const startTime = Date.now();\n\n if (traceContext) {\n emitStartEvent(traceContext, startTime);\n }\n\n // maxTurns: 0 = unlimited (omit stopWhen), undefined = use default\n const effectiveMaxTurns =\n cfg.maxTurns === 0 ? undefined : (cfg.maxTurns ?? DEFAULT_MAX_TOOL_STEPS);\n\n const SDK_TIMEOUT_MS = resolveTimeoutMs(\n effectiveMaxTurns,\n (cfg as { maxDurationMs?: number }).maxDurationMs\n );\n const abortController = new AbortController();\n const timeoutHandle = setTimeout(() => {\n abortController.abort(\n new Error(\n `Simple Agent generateText / streamText timed out after ${SDK_TIMEOUT_MS}ms (model=${modelId}, scenario=${scenario.name})`\n )\n );\n }, SDK_TIMEOUT_MS);\n\n try {\n const isAnthropic = provider === PROVIDER_ANTHROPIC;\n const isResponsesAPI = [...OPENAI_RESPONSES_MODEL_IDS].some(\n (id) => modelId === id || modelId.startsWith(id)\n );\n const isGemini = provider === PROVIDER_GEMINI;\n const isGeminiThinking = isGemini && GEMINI_THINKING_MODEL_IDS.has(modelId);\n const supportsThinking = isAnthropic || isResponsesAPI || isGeminiThinking;\n\n const thinkingBudgetTokens = cfg.thinkingBudgetTokens ?? 10_000;\n\n const reasoningEffort = cfg.reasoningEffort ?? 'high';\n\n const computedProviderOpts = {\n ...(isAnthropic && {\n anthropic: {\n thinking: { type: 'enabled', budgetTokens: thinkingBudgetTokens }\n }\n }),\n ...(isResponsesAPI && {\n openai: {\n // Prevent the SDK from sending item_reference inputs that the proxy can't forward\n store: false,\n forceReasoning: true,\n reasoningEffort: reasoningEffort as 'low' | 'medium' | 'high',\n reasoningSummary: 'detailed' as const\n }\n }),\n ...(isGeminiThinking && {\n google: {\n thinkingConfig: {\n includeThoughts: true,\n thinkingBudget: 10000\n }\n }\n })\n };\n\n // Deep-merge: user extras first, computed values win\n const { providerOptions: extraProviderOptions, ...topLevelExtras } =\n configExtras;\n const mergedProviderOptions = {\n ...(extraProviderOptions && typeof extraProviderOptions === 'object'\n ? (extraProviderOptions as Record<string, unknown>)\n : {}),\n ...computedProviderOpts\n };\n\n const stepTimestamps: number[] = [];\n\n // Build user content with text and optional images\n const { triggerPromptImages } = context;\n const hasImages = triggerPromptImages && triggerPromptImages.length > 0;\n\n const sdkParams = {\n ...topLevelExtras,\n model,\n abortSignal: abortController.signal,\n system: systemPrompt,\n ...(hasImages\n ? {\n messages: [\n {\n role: 'user' as const,\n content: [\n { type: 'text' as const, text: scenario.triggerPrompt },\n ...triggerPromptImages!.map((img) => ({\n type: 'image' as const,\n image: img.base64,\n mediaType: img.mediaType\n }))\n ]\n }\n ]\n }\n : { prompt: scenario.triggerPrompt }),\n temperature: supportsThinking ? undefined : cfg.temperature,\n topP: supportsThinking ? undefined : cfg.topP,\n frequencyPenalty: cfg.frequencyPenalty,\n presencePenalty: cfg.presencePenalty,\n seed: cfg.seed,\n stopSequences: cfg.stopSequences,\n maxOutputTokens: cfg.maxTokens,\n tools: mcpTools as ToolSet | undefined,\n ...(mcpTools && effectiveMaxTurns != null\n ? { stopWhen: stepCountIs(effectiveMaxTurns) }\n : !mcpTools\n ? { stopWhen: stepCountIs(1) }\n : {}),\n providerOptions: mergedProviderOptions,\n onStepFinish: (step: StepResult<ToolSet>) => {\n stepTimestamps.push(Date.now());\n if (traceContext) {\n const isToolStep = step.toolCalls.length > 0;\n const firstToolCall = step.toolCalls[0];\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: stepTimestamps.length,\n type: isToolStep\n ? LiveTraceEventType.TOOL_USE\n : LiveTraceEventType.COMPLETION,\n toolName: firstToolCall?.toolName,\n toolArgs: firstToolCall\n ? (JSON.stringify(firstToolCall.input) ?? '').slice(0, 500)\n : undefined,\n outputPreview: step.text?.slice(0, 500),\n elapsedMs: Date.now() - startTime,\n timestamp: new Date().toISOString(),\n isComplete: false\n },\n traceContext.pushEvent\n );\n }\n }\n };\n\n // ResponsesAPI models use a blocking gateway call on the proxy side \u2192 JSON response.\n // All other models use the streaming gateway path \u2192 SSE.\n const shouldStream = !isResponsesAPI;\n\n let text: string;\n let steps: StepResult<ToolSet>[];\n let rawUsage: {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n };\n\n if (shouldStream) {\n const stream = streamText(sdkParams);\n [text, steps, rawUsage] = await Promise.all([\n stream.text,\n stream.steps,\n stream.usage\n ]);\n } else {\n const result = await generateText(sdkParams);\n text = result.text;\n steps = result.steps;\n rawUsage = result.usage;\n }\n\n const durationMs = Date.now() - startTime;\n\n const usage = {\n inputTokens: rawUsage.inputTokens ?? 0,\n outputTokens: rawUsage.outputTokens ?? 0,\n totalTokens: rawUsage.totalTokens ?? 0\n };\n\n const llmTrace = buildLLMTrace(\n steps,\n durationMs,\n usage,\n modelId,\n provider,\n startTime,\n stepTimestamps\n );\n\n if (traceContext) {\n emitCompletionEvent(traceContext, stepTimestamps.length + 1);\n }\n\n const conversation = buildConversation(\n scenario.triggerPrompt,\n steps,\n startTime,\n stepTimestamps\n );\n\n return {\n outputText: text,\n durationMs,\n usage,\n llmTrace,\n conversation\n };\n } catch (err) {\n const baseMsg = err instanceof Error ? err.message : String(err);\n const ctx = extractGatewayErrorContext(err);\n const apiError = findApiCallError(err);\n console.error(\n '[AI gateway error]',\n JSON.stringify({\n provider,\n model: modelId,\n message: baseMsg,\n statusCode: apiError?.statusCode,\n xWixRequestId: getHeader(apiError?.responseHeaders, 'x-wix-request-id'),\n proxyRequestId: getProxyBodyFields(apiError?.responseBody)\n .proxy_request_id,\n failurePhase: getProxyBodyFields(apiError?.responseBody).failure_phase\n })\n );\n throw new Error(\n `AI gateway request failed (provider=${provider}, model=${modelId}): ${baseMsg}${ctx}`,\n { cause: err }\n );\n } finally {\n clearTimeout(timeoutHandle);\n await closeMcpClients(clients);\n }\n}\n\n/**\n * Header names whose values identify a request on the upstream side\n * (OpenAI / openai-proxy / Cloudflare / wix-ai-gateway). Surfacing these in\n * the wrapped error message lets the AI-tools team correlate a failure with\n * their logs without needing the evalforge run id.\n */\nconst UPSTREAM_REQUEST_ID_HEADERS = [\n 'openai-request-id',\n 'x-request-id',\n 'cf-ray',\n 'x-wix-request-id'\n] as const;\n\n/**\n * Body fields stamped by the wix-ai-gateway-proxy (this repo's proxy package)\n * on every error response. Distinct from upstream headers because they\n * reliably tell us which side (our proxy vs. wix-ai-gateway) emitted the\n * error and let us search each side's logs by id.\n */\nconst PROXY_BODY_FIELDS = [\n 'proxy_request_id',\n 'upstream_request_id',\n 'failure_phase'\n] as const;\n\nconst MAX_ERROR_WALK_DEPTH = 5;\n\nfunction findApiCallError(err: unknown, depth = 0): APICallError | undefined {\n if (err == null || depth > MAX_ERROR_WALK_DEPTH) return undefined;\n if (APICallError.isInstance(err)) return err;\n\n if (typeof err === 'object') {\n const errors = (err as { errors?: unknown }).errors;\n if (Array.isArray(errors)) {\n for (let i = errors.length - 1; i >= 0; i--) {\n const found = findApiCallError(errors[i], depth + 1);\n if (found) return found;\n }\n }\n const cause = (err as { cause?: unknown }).cause;\n if (cause != null) return findApiCallError(cause, depth + 1);\n }\n\n return undefined;\n}\n\nfunction getHeader(\n headers: Record<string, string> | undefined,\n name: string\n): string | undefined {\n if (!headers) return undefined;\n const target = name.toLowerCase();\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() === target) return value;\n }\n return undefined;\n}\n\nfunction getProxyBodyFields(\n responseBody: unknown\n): Partial<Record<(typeof PROXY_BODY_FIELDS)[number], string>> {\n if (typeof responseBody !== 'string' || responseBody.length === 0) {\n return {};\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(responseBody);\n } catch {\n return {};\n }\n if (parsed == null || typeof parsed !== 'object') return {};\n\n const out: Partial<Record<(typeof PROXY_BODY_FIELDS)[number], string>> = {};\n for (const name of PROXY_BODY_FIELDS) {\n const value = (parsed as Record<string, unknown>)[name];\n if (typeof value === 'string' && value.length > 0) {\n out[name] = value;\n }\n }\n return out;\n}\n\n/**\n * Pull status code, upstream request-id headers, and the wix-ai-gateway-proxy's\n * own body fields (`proxy_request_id` / `upstream_request_id` / `failure_phase`)\n * from any AI SDK `APICallError` reachable via `cause` or a\n * `RetryError.errors[]` chain. Formatted as\n * ` [status=503, x-request-id=..., proxy_request_id=..., failure_phase=gateway]`.\n * Returns an empty string when nothing useful is found.\n */\nexport function extractGatewayErrorContext(err: unknown): string {\n const apiError = findApiCallError(err);\n if (!apiError) return '';\n\n const fields: string[] = [];\n if (typeof apiError.statusCode === 'number') {\n fields.push(`status=${apiError.statusCode}`);\n }\n for (const name of UPSTREAM_REQUEST_ID_HEADERS) {\n const value = getHeader(apiError.responseHeaders, name);\n if (value) fields.push(`${name}=${value}`);\n }\n const bodyFields = getProxyBodyFields(apiError.responseBody);\n for (const name of PROXY_BODY_FIELDS) {\n const value = bodyFields[name];\n if (value) fields.push(`${name}=${value}`);\n }\n return fields.length > 0 ? ` [${fields.join(', ')}]` : '';\n}\n\n/**\n * Build the system prompt for Simple Agent from skills, rules, and optional override.\n *\n * Unlike CLI agents (which have DEFAULT_EVALUATOR_SYSTEM_PROMPT), the Simple Agent\n * has no built-in default instructions. The three-state `systemPrompt` contract\n * (undefined = default, null = none, string = custom) effectively collapses to\n * two states here: both undefined and null result in no base prompt being prepended,\n * while a non-empty string is included as the first segment.\n */\nexport function composeSystemPrompt(\n context: AgentExecutionContext\n): string | undefined {\n const parts: string[] = [];\n\n if (context.systemPrompt) {\n parts.push(context.systemPrompt);\n }\n\n for (const skill of context.skills) {\n const content = extractSkillContent(skill.latestVersion?.files);\n if (content) {\n parts.push(content);\n }\n }\n\n if (context.rules) {\n for (const rule of context.rules) {\n if (rule.content) {\n parts.push(rule.content);\n }\n }\n }\n\n return parts.length > 0 ? parts.join('\\n\\n---\\n\\n') : undefined;\n}\n\n/**\n * Check if any tool result in a step indicates an error.\n * Returns the error text if found, null otherwise.\n */\nfunction findToolResultError(step: StepResult<ToolSet>): string | null {\n for (const tr of step.toolResults) {\n const output = (tr as { output?: unknown }).output;\n const error = detectMcpToolError(output);\n if (error) return error;\n }\n return null;\n}\n\nexport function buildLLMTrace(\n steps: StepResult<ToolSet>[],\n totalDurationMs: number,\n totalUsage: {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n },\n modelId: string,\n provider: string,\n executionStartMs: number,\n stepTimestamps: number[]\n): LLMTrace {\n const traceSteps = steps.map((step, i) => {\n const stepFinishedAt = stepTimestamps[i] ?? executionStartMs;\n const stepStartedAt =\n i === 0 ? executionStartMs : (stepTimestamps[i - 1] ?? executionStartMs);\n const stepDurationMs = stepFinishedAt - stepStartedAt;\n const firstToolCall = step.toolCalls[0];\n\n const tokenUsage = {\n prompt: step.usage.inputTokens ?? 0,\n completion: step.usage.outputTokens ?? 0,\n total: step.usage.totalTokens ?? 0\n };\n\n const costUsd = calculateStepCost(step, modelId, provider, tokenUsage);\n\n // Check if any tool result for this step indicates an error.\n // MCP tool results embed isError in the output content.\n const toolResultError = findToolResultError(step);\n\n return {\n id: randomUUID(),\n stepNumber: i + 1,\n turnIndex: i,\n type:\n step.toolCalls.length > 0\n ? LLMStepType.TOOL_USE\n : LLMStepType.COMPLETION,\n model: modelId,\n provider,\n startedAt: new Date(stepStartedAt).toISOString(),\n durationMs: stepDurationMs,\n tokenUsage,\n costUsd,\n toolName: firstToolCall?.toolName,\n toolArguments: firstToolCall\n ? (JSON.stringify(firstToolCall.input) ?? undefined)\n : undefined,\n outputPreview: step.text?.slice(0, 200),\n success: step.finishReason !== 'error' && !toolResultError,\n error:\n step.finishReason === 'error'\n ? 'Generation failed'\n : (toolResultError ?? undefined)\n };\n });\n\n const totalCostUsd = traceSteps.reduce((sum, s) => sum + s.costUsd, 0);\n\n const finalTokens = {\n prompt: totalUsage.inputTokens,\n completion: totalUsage.outputTokens,\n total: totalUsage.totalTokens\n };\n\n return {\n id: randomUUID(),\n steps: traceSteps,\n summary: {\n totalSteps: traceSteps.length,\n totalTurns: traceSteps.length,\n totalDurationMs,\n totalTokens: finalTokens,\n totalCostUsd,\n modelBreakdown: {\n [modelId]: {\n count: traceSteps.length,\n durationMs: totalDurationMs,\n tokens: finalTokens.total,\n costUsd: totalCostUsd\n }\n },\n modelsUsed: [modelId]\n }\n };\n}\n\nfunction emitStartEvent(traceContext: TraceContext, startTime: number): void {\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber: 0,\n type: LiveTraceEventType.PROGRESS,\n outputPreview: 'Starting Simple Agent execution...',\n elapsedMs: Date.now() - startTime,\n timestamp: new Date().toISOString(),\n isComplete: false\n },\n traceContext.pushEvent\n );\n}\n\nfunction emitCompletionEvent(\n traceContext: TraceContext,\n stepNumber: number\n): void {\n emitTraceEvent(\n {\n evalRunId: traceContext.evalRunId,\n scenarioId: traceContext.scenarioId,\n scenarioName: traceContext.scenarioName,\n targetId: traceContext.targetId,\n targetName: traceContext.targetName,\n stepNumber,\n type: LiveTraceEventType.COMPLETION,\n outputPreview: 'Scenario execution completed',\n timestamp: new Date().toISOString(),\n isComplete: true\n },\n traceContext.pushEvent\n );\n}\n", "import { createMCPClient } from '@ai-sdk/mcp';\nimport { Experimental_StdioMCPTransport } from '@ai-sdk/mcp/mcp-stdio';\nimport type { MCPEntity } from '@wix/evalforge-types';\nimport { resolveMcpPlaceholders } from '../shared/resolve-mcp-placeholders.js';\n\ninterface McpToolsResult {\n tools: Record<string, unknown>;\n clients: Array<{ close: () => Promise<void> }>;\n}\n\n/**\n * Build AI SDK tools from MCP entity configs.\n *\n * Each `MCPEntity.config` is a keyed record matching the `.mcp.json` shape,\n * e.g. `{ \"server-name\": { \"type\": \"stdio\", \"command\": \"node\", \"args\": [\"server.js\"] } }`.\n * Each entry becomes a live MCP client whose tools are merged into the result.\n */\nexport async function buildMcpTools(\n mcps: MCPEntity[],\n cwd: string\n): Promise<McpToolsResult> {\n const allTools: Record<string, unknown> = {};\n const clients: Array<{ close: () => Promise<void> }> = [];\n\n try {\n for (const mcp of mcps) {\n const resolvedConfig = await resolveMcpPlaceholders(\n mcp.config as Record<string, Record<string, unknown>>,\n { cwd }\n );\n for (const [serverName, serverConfig] of Object.entries(resolvedConfig)) {\n const config = serverConfig as Record<string, unknown>;\n const transport = buildTransport(serverName, config, cwd);\n const client = await createMCPClient({ transport });\n clients.push(client);\n const tools = await client.tools();\n\n // Prefix with the server name so tools from different servers never collide.\n // Non-alphanumeric characters (e.g. dashes) are replaced with underscores so\n // the resulting key is a valid Gemini function name ([a-zA-Z][a-zA-Z0-9_]*).\n // A single underscore separator is used intentionally \u2014 the Wix AI Gateway\n // strips everything before __ (double underscore) from Gemini function names,\n // so double underscores must be avoided.\n const safePrefix = serverName.replace(/[^a-zA-Z0-9]/g, '_');\n for (const [toolName, tool] of Object.entries(tools)) {\n allTools[`${safePrefix}_${toolName}`] = tool;\n }\n }\n }\n } catch (err) {\n await closeMcpClients(clients);\n throw err;\n }\n\n return { tools: allTools, clients };\n}\n\nexport async function closeMcpClients(\n clients: Array<{ close: () => Promise<void> }>\n): Promise<void> {\n await Promise.allSettled(clients.map((c) => c.close()));\n}\n\n/**\n * Build an AI SDK MCP transport from a server config entry.\n *\n * Supports three transport types:\n * - stdio: local process (Experimental_StdioMCPTransport)\n * - http: streamable HTTP (config object with type: 'http')\n * - sse: Server-Sent Events (config object with type: 'sse')\n */\nexport function buildTransport(\n serverName: string,\n config: Record<string, unknown>,\n cwd: string\n) {\n const type = config.type as string | undefined;\n const headers = config.headers as Record<string, string> | undefined;\n\n if (type === 'stdio' || config.command) {\n return new Experimental_StdioMCPTransport({\n command: config.command as string,\n args: (config.args as string[]) ?? [],\n env: { ...(config.env as Record<string, string> | undefined), PWD: cwd },\n cwd\n });\n }\n\n if (type === 'http') {\n return {\n type: 'http' as const,\n url: config.url as string,\n ...(headers && { headers })\n };\n }\n\n if (type === 'sse' || config.url) {\n return {\n type: 'sse' as const,\n url: config.url as string,\n ...(headers && { headers })\n };\n }\n\n throw new Error(\n `MCP server \"${serverName}\" has unsupported transport config (type=${type ?? 'unset'}). ` +\n `Expected type \"stdio\", \"http\", or \"sse\", or a config with \"command\" or \"url\".`\n );\n}\n", "/**\n * Detect if an MCP tool result output indicates an error.\n *\n * MCP tool results embed `isError: true` in the output object.\n * We first check the structured object, then fall back to string matching\n * for cases where the output is already serialized.\n *\n * @returns The error text if found, null otherwise.\n */\nexport function detectMcpToolError(output: unknown): string | null {\n if (output == null) return null;\n\n // Structured check: output is an object with isError flag\n if (typeof output === 'object' && 'isError' in output) {\n const obj = output as {\n isError?: boolean;\n content?: Array<{ text?: string }>;\n };\n if (obj.isError === true) {\n return extractErrorText(obj.content);\n }\n }\n\n // Fallback: output is a serialized string containing the error pattern\n const str = typeof output === 'string' ? output : null;\n if (\n str &&\n (str.includes('\"isError\":true') || str.includes('\"isError\": true'))\n ) {\n try {\n const parsed = JSON.parse(str) as {\n isError?: boolean;\n content?: Array<{ text?: string }>;\n };\n if (parsed.isError === true) {\n return extractErrorText(parsed.content);\n }\n } catch {\n // Unparseable \u2014 return raw string as error\n return str.slice(0, 500);\n }\n }\n\n return null;\n}\n\nfunction extractErrorText(\n content: Array<{ text?: string }> | undefined\n): string {\n if (Array.isArray(content)) {\n const text = content\n .filter((c) => typeof c.text === 'string')\n .map((c) => c.text)\n .join('\\n');\n if (text) return text.slice(0, 500);\n }\n return 'Tool call failed';\n}\n", "import type { StepResult, ToolSet } from 'ai';\nimport { normalizeModelId } from '@wix/evalforge-types';\n\nconst PROVIDER_ANTHROPIC = 'anthropic';\nconst PROVIDER_GEMINI = 'gemini';\n\n/**\n * Per-1M-token pricing keyed by official model ID.\n * Used as fallback when the gateway doesn't report cost.\n */\nconst MODEL_PRICING: Record<string, { input: number; output: number }> = {\n // Anthropic \u2014 Claude 4.6\n 'claude-sonnet-4-6': { input: 3, output: 15 },\n 'claude-opus-4-6': { input: 15, output: 75 },\n // Anthropic \u2014 Claude 4.5\n 'claude-opus-4-5': { input: 5, output: 25 },\n 'claude-sonnet-4-5': { input: 3, output: 15 },\n 'claude-haiku-4-5': { input: 1, output: 5 },\n // Anthropic \u2014 Claude 4\n 'claude-opus-4': { input: 15, output: 75 },\n 'claude-sonnet-4': { input: 3, output: 15 },\n\n // OpenAI \u2014 GPT-5\n 'gpt-5': { input: 1.25, output: 10 },\n 'gpt-5-mini': { input: 0.25, output: 2 },\n 'gpt-5-nano': { input: 0.05, output: 0.4 },\n // OpenAI \u2014 GPT-4.1\n 'gpt-4.1': { input: 2, output: 8 },\n 'gpt-4.1-mini': { input: 0.4, output: 1.6 },\n 'gpt-4.1-nano': { input: 0.1, output: 0.4 },\n // OpenAI \u2014 GPT-4o\n 'gpt-4o': { input: 2.5, output: 10 },\n 'gpt-4o-mini': { input: 0.15, output: 0.6 },\n // OpenAI \u2014 Reasoning\n o3: { input: 2, output: 8 },\n 'o4-mini': { input: 1.1, output: 4.4 },\n 'o3-mini': { input: 1.1, output: 4.4 },\n o1: { input: 15, output: 60 },\n\n // Google Gemini 2.0\n 'gemini-2.0-flash': { input: 0.1, output: 0.4 },\n 'gemini-2.0-flash-lite': { input: 0.075, output: 0.3 },\n // Google Gemini 2.5\n 'gemini-2.5-pro': { input: 1.25, output: 10.0 },\n 'gemini-2.5-flash': { input: 0.15, output: 0.6 },\n 'gemini-2.5-flash-lite': { input: 0.075, output: 0.3 },\n // Google Gemini 3.x \u2014 standard pricing up to 200K context tokens\n 'gemini-3-pro-preview': { input: 2.0, output: 12.0 },\n 'gemini-3-flash-preview': { input: 0.5, output: 3.0 },\n 'gemini-3.1-pro-preview': { input: 2.0, output: 12.0 },\n 'gemini-3.5-flash': { input: 1.5, output: 9.0 }\n};\n\n/**\n * Extract gateway-computed cost from a Vercel AI SDK step result.\n * The Wix AI Gateway reports accurate cost (including cache discounts)\n * via `total_cost_usd` injected by the proxy into the provider response.\n *\n * - Anthropic: available in `providerMetadata.anthropic.usage.total_cost_usd`\n * - OpenAI/Gemini: available at the top level of `response.body.total_cost_usd`\n */\nfunction extractGatewayCost(\n step: StepResult<ToolSet>,\n provider: string\n): number | undefined {\n try {\n if (provider === PROVIDER_ANTHROPIC) {\n const meta = step.providerMetadata as Record<string, unknown> | undefined;\n const anthropic = meta?.anthropic as Record<string, unknown> | undefined;\n const usage = anthropic?.usage as Record<string, unknown> | undefined;\n const cost = usage?.total_cost_usd;\n return typeof cost === 'number' && cost > 0 ? cost : undefined;\n }\n\n if (provider === PROVIDER_GEMINI) {\n const meta = step.providerMetadata as Record<string, unknown> | undefined;\n const google = meta?.google as Record<string, unknown> | undefined;\n const cost = google?.total_cost_usd;\n if (typeof cost === 'number' && cost > 0) return cost;\n // Fallback: cost may also be in the raw response body\n const body = step.response?.body as Record<string, unknown> | undefined;\n const bodyCost = body?.total_cost_usd;\n return typeof bodyCost === 'number' && bodyCost > 0\n ? bodyCost\n : undefined;\n }\n\n const body = step.response?.body as Record<string, unknown> | undefined;\n const cost = body?.total_cost_usd;\n return typeof cost === 'number' && cost > 0 ? cost : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Calculate cost from the built-in pricing table.\n * Normalizes legacy gateway model IDs before lookup.\n * Returns 0 for unknown models.\n */\nfunction calculateFromPricing(\n modelId: string,\n tokenUsage: { prompt: number; completion: number }\n): number {\n const normalized = normalizeModelId(modelId);\n const pricing =\n MODEL_PRICING[normalized] ??\n MODEL_PRICING[\n Object.keys(MODEL_PRICING).find((key) => normalized.startsWith(key)) ?? ''\n ];\n if (!pricing) return 0;\n\n return (\n (tokenUsage.prompt / 1_000_000) * pricing.input +\n (tokenUsage.completion / 1_000_000) * pricing.output\n );\n}\n\n/**\n * Calculate the cost for a single LLM step.\n * Prefers the gateway-reported cost (accurate with cache discounts),\n * falling back to the built-in pricing table.\n */\nexport function calculateStepCost(\n step: StepResult<ToolSet>,\n modelId: string,\n provider: string,\n tokenUsage: { prompt: number; completion: number }\n): number {\n return (\n extractGatewayCost(step, provider) ??\n calculateFromPricing(modelId, tokenUsage)\n );\n}\n", "import type {\n ConversationBlock,\n ConversationMessage\n} from '@wix/evalforge-types';\nimport type { StepResult, ToolSet } from 'ai';\nimport { detectMcpToolError } from '../shared/detect-tool-error.js';\n\n/**\n * Build a serializable conversation from Vercel AI SDK step results.\n *\n * Maps the step-based execution model to the same ConversationMessage\n * format used by the Claude Code adapter, so both agent types render\n * identically in the Conversation tab.\n */\nexport function buildConversation(\n triggerPrompt: string,\n steps: StepResult<ToolSet>[],\n executionStartMs: number,\n stepTimestamps: number[]\n): ConversationMessage[] {\n const messages: ConversationMessage[] = [];\n\n messages.push({\n role: 'user',\n content: [{ type: 'text', text: triggerPrompt }],\n timestamp: new Date(executionStartMs).toISOString()\n });\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n const stepStartedAt =\n i === 0 ? executionStartMs : (stepTimestamps[i - 1] ?? executionStartMs);\n const stepFinishedAt = stepTimestamps[i] ?? executionStartMs;\n const assistantTimestamp = new Date(stepStartedAt).toISOString();\n const toolResultTimestamp = new Date(stepFinishedAt).toISOString();\n\n const assistantContent: ConversationBlock[] = [];\n\n if (step.reasoningText) {\n assistantContent.push({ type: 'thinking', thinking: step.reasoningText });\n }\n\n if (step.text) {\n assistantContent.push({ type: 'text', text: step.text });\n }\n\n for (const tc of step.toolCalls) {\n assistantContent.push({\n type: 'tool_use',\n toolName: tc.toolName,\n toolId: tc.toolCallId,\n input: tc.input\n });\n }\n\n if (assistantContent.length > 0) {\n messages.push({\n role: 'assistant',\n content: assistantContent,\n timestamp: assistantTimestamp\n });\n }\n\n if (step.toolResults.length > 0) {\n const resultBlocks: ConversationBlock[] = step.toolResults.map((tr) => {\n const outputStr =\n typeof tr.output === 'string' ? tr.output : JSON.stringify(tr.output);\n const isError = detectMcpToolError(tr.output) !== null;\n return {\n type: 'tool_result' as const,\n toolUseId: tr.toolCallId,\n content: outputStr,\n ...(isError ? { isError: true } : {})\n };\n });\n messages.push({\n role: 'user',\n content: resultBlocks,\n timestamp: toolResultTimestamp\n });\n }\n }\n\n return messages;\n}\n", "import type {\n AgentAdapter,\n AgentExecutionContext,\n AgentExecutionResult\n} from '@wix/evalforge-types';\nimport type { AgentRunCommand } from '@wix/evalforge-types';\nimport { executeWithAiSdk } from './execute.js';\n\n/**\n * Simple Agent adapter.\n *\n * Executes LLM calls in-process via the Vercel AI SDK, routing through\n * our proxy to support both Claude and OpenAI models. Supports MCP tools\n * for interacting with the working directory.\n *\n * Looked up by adapter ID (not CLI command) since SDK agents have\n * empty supportedCommands.\n */\nexport class SimpleAgentAdapter implements AgentAdapter {\n readonly id = 'simple-agent';\n readonly name = 'Simple Agent';\n readonly supportedCommands: readonly AgentRunCommand[] = [];\n\n async execute(context: AgentExecutionContext): Promise<AgentExecutionResult> {\n return executeWithAiSdk(context);\n }\n}\n\nexport const simpleAgentAdapter = new SimpleAgentAdapter();\n", "import { defaultRegistry } from '../registry.js';\nimport { simpleAgentAdapter } from './simple-agent-adapter.js';\n\ndefaultRegistry.register(simpleAgentAdapter);\n", "/**\n * File diff utilities for capturing and comparing file changes.\n *\n * Used to track changes made by Claude during scenario execution\n * when running against a template.\n */\n\nimport { readdirSync, readFileSync, statSync, existsSync } from 'fs';\nimport { join, relative } from 'path';\nimport { diffLines as computeDiff } from 'diff';\nimport type { DiffContent, DiffLine, TemplateFile } from '@wix/evalforge-types';\n\n/**\n * Derive the set of infrastructure file paths by comparing a pre-prepare\n * snapshot with the post-prepare (baseline) snapshot.\n * Any file that was created or modified by `prepareEnvironment()` is infrastructure.\n */\nexport function deriveInfrastructurePaths(\n prePrep: FileSnapshot,\n postPrep: FileSnapshot\n): Set<string> {\n const infraPaths = new Set<string>();\n for (const path of Object.keys(postPrep)) {\n if (prePrep[path] === undefined || prePrep[path] !== postPrep[path]) {\n infraPaths.add(path);\n }\n }\n return infraPaths;\n}\n\n/**\n * A snapshot of file contents in a directory.\n * Maps relative file paths to their contents.\n */\nexport interface FileSnapshot {\n [relativePath: string]: string;\n}\n\n/**\n * Directories and patterns to ignore when snapshotting.\n */\nconst IGNORED_PATTERNS = [\n 'node_modules',\n '.git',\n '.cursor',\n 'dist',\n 'build',\n '.next',\n '.turbo',\n '__pycache__',\n '.pytest_cache',\n '.venv',\n 'venv',\n '.DS_Store'\n];\n\n/**\n * File extensions to treat as binary (skip content reading).\n */\nconst BINARY_EXTENSIONS = [\n '.png',\n '.jpg',\n '.jpeg',\n '.gif',\n '.webp',\n '.ico',\n '.svg',\n '.woff',\n '.woff2',\n '.ttf',\n '.eot',\n '.mp3',\n '.mp4',\n '.wav',\n '.avi',\n '.mov',\n '.pdf',\n '.zip',\n '.tar',\n '.gz',\n '.rar',\n '.7z',\n '.exe',\n '.dll',\n '.so',\n '.dylib'\n];\n\n/**\n * Maximum file size to read (100KB).\n * Larger files are skipped to avoid memory issues.\n */\nconst MAX_FILE_SIZE = 100 * 1024;\n\n/**\n * Check if a path should be ignored.\n */\nfunction shouldIgnore(name: string): boolean {\n return IGNORED_PATTERNS.some(\n (pattern) => name === pattern || name.startsWith(pattern + '/')\n );\n}\n\n/**\n * Check if a file is binary based on extension.\n */\nfunction isBinaryFile(filename: string): boolean {\n const lower = filename.toLowerCase();\n return BINARY_EXTENSIONS.some((ext) => lower.endsWith(ext));\n}\n\n/**\n * Recursively snapshot a directory.\n *\n * @param dir - The directory to snapshot\n * @param baseDir - The base directory for computing relative paths\n * @returns A map of relative paths to file contents\n */\nexport function snapshotDirectory(dir: string, baseDir?: string): FileSnapshot {\n const snapshot: FileSnapshot = {};\n const base = baseDir || dir;\n\n if (!existsSync(dir)) {\n return snapshot;\n }\n\n const entries = readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n const relativePath = relative(base, fullPath);\n\n // Skip ignored directories and files\n if (shouldIgnore(entry.name)) {\n continue;\n }\n\n if (entry.isDirectory()) {\n // Recursively snapshot subdirectories\n const subSnapshot = snapshotDirectory(fullPath, base);\n Object.assign(snapshot, subSnapshot);\n } else if (entry.isFile()) {\n // Skip binary files\n if (isBinaryFile(entry.name)) {\n continue;\n }\n\n // Skip files that are too large\n try {\n const stats = statSync(fullPath);\n if (stats.size > MAX_FILE_SIZE) {\n continue;\n }\n\n // Read file contents\n const content = readFileSync(fullPath, 'utf-8');\n snapshot[relativePath] = content;\n } catch {\n // Skip files that can't be read\n continue;\n }\n }\n }\n\n return snapshot;\n}\n\n/**\n * Generate diff lines from before/after content using the Myers diff algorithm.\n * This correctly identifies the minimal set of changes by comparing content,\n * not just line positions.\n */\nfunction generateDiffLines(before: string, after: string): DiffLine[] {\n const changes = computeDiff(before, after);\n const result: DiffLine[] = [];\n let lineNumber = 1;\n\n for (const change of changes) {\n // Remove trailing newline and split into individual lines\n const lines = change.value.replace(/\\n$/, '').split('\\n');\n const type: DiffLine['type'] = change.added\n ? 'added'\n : change.removed\n ? 'removed'\n : 'unchanged';\n\n for (const content of lines) {\n result.push({\n type,\n content,\n lineNumber: lineNumber++\n });\n }\n }\n\n return result;\n}\n\n/**\n * Compare two snapshots and generate diffs for changed files.\n * Includes new empty files and detects file renames.\n *\n * @param before - Snapshot before execution\n * @param after - Snapshot after execution\n * @param infrastructurePaths - Optional set of paths known to be infrastructure files\n * @returns Array of DiffContent for files that were created, modified, or renamed\n */\nexport function diffSnapshots(\n before: FileSnapshot,\n after: FileSnapshot,\n infrastructurePaths?: Set<string>\n): DiffContent[] {\n const diffs: DiffContent[] = [];\n const allPaths = new Set([...Object.keys(before), ...Object.keys(after)]);\n\n for (const path of allPaths) {\n const beforeContent = before[path] ?? '';\n const afterContent = after[path] ?? '';\n\n // Skip when it's an existing file with no changes.\n if (before[path] !== undefined && beforeContent === afterContent) {\n continue;\n }\n\n // Generate diff\n const diffLines = generateDiffLines(beforeContent, afterContent);\n\n diffs.push({\n path,\n expected: beforeContent,\n actual: afterContent,\n diffLines,\n ...(infrastructurePaths?.has(path) && { isInfrastructure: true })\n });\n }\n\n const deletedPaths = [...allPaths].filter((p) => after[p] === undefined);\n const addedPaths = [...allPaths].filter((p) => before[p] === undefined);\n\n const renamedFromByNewPath = new Map<string, string>();\n const deletedPathsToRemove = new Set<string>();\n\n for (const addedPath of addedPaths) {\n const addedContent = after[addedPath] ?? '';\n const deletedMatch = deletedPaths.find(\n (dp) =>\n (before[dp] ?? '') === addedContent && !deletedPathsToRemove.has(dp)\n );\n if (deletedMatch) {\n renamedFromByNewPath.set(addedPath, deletedMatch);\n deletedPathsToRemove.add(deletedMatch);\n }\n }\n\n const result = diffs\n .filter((d) => !deletedPathsToRemove.has(d.path))\n .map((d) => {\n const renamedFrom = renamedFromByNewPath.get(d.path);\n return renamedFrom ? { ...d, renamedFrom } : d;\n });\n\n // Sort by path for consistent ordering\n result.sort((a, b) => a.path.localeCompare(b.path));\n\n return result;\n}\n\n/**\n * Extract template files with their status from before/after snapshots.\n *\n * @param before - Snapshot before execution\n * @param after - Snapshot after execution\n * @param infrastructurePaths - Optional set of paths known to be infrastructure files\n * @returns Array of TemplateFile with status indicators\n */\nexport function extractTemplateFiles(\n before: FileSnapshot,\n after: FileSnapshot,\n infrastructurePaths?: Set<string>\n): TemplateFile[] {\n const files: TemplateFile[] = [];\n const allPaths = new Set([...Object.keys(before), ...Object.keys(after)]);\n\n for (const path of allPaths) {\n const beforeContent = before[path];\n const afterContent = after[path];\n\n // Only include files that exist after execution (skip deleted files)\n if (afterContent === undefined) {\n continue;\n }\n\n let status: 'new' | 'modified' | 'unchanged';\n if (beforeContent === undefined) {\n status = 'new';\n } else if (beforeContent !== afterContent) {\n status = 'modified';\n } else {\n status = 'unchanged';\n }\n\n files.push({\n path,\n content: afterContent,\n status,\n ...(infrastructurePaths?.has(path) && { isInfrastructure: true })\n });\n }\n\n // Sort by path for consistent ordering\n files.sort((a, b) => a.path.localeCompare(b.path));\n\n return files;\n}\n", "function Diff() {}\nDiff.prototype = {\n diff: function diff(oldString, newString) {\n var _options$timeout;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = options.callback;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n var self = this;\n function done(value) {\n value = self.postProcess(value, options);\n if (callback) {\n setTimeout(function () {\n callback(value);\n }, 0);\n return true;\n } else {\n return value;\n }\n }\n\n // Allow subclasses to massage the input prior to running\n oldString = this.castInput(oldString, options);\n newString = this.castInput(newString, options);\n oldString = this.removeEmpty(this.tokenize(oldString, options));\n newString = this.removeEmpty(this.tokenize(newString, options));\n var newLen = newString.length,\n oldLen = oldString.length;\n var editLength = 1;\n var maxEditLength = newLen + oldLen;\n if (options.maxEditLength != null) {\n maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n }\n var maxExecutionTime = (_options$timeout = options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity;\n var abortAfterTimestamp = Date.now() + maxExecutionTime;\n var bestPath = [{\n oldPos: -1,\n lastComponent: undefined\n }];\n\n // Seed editLength = 0, i.e. the content starts with the same values\n var newPos = this.extractCommon(bestPath[0], newString, oldString, 0, options);\n if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // Identity per the equality and tokenizer\n return done(buildValues(self, bestPath[0].lastComponent, newString, oldString, self.useLongestToken));\n }\n\n // Once we hit the right edge of the edit graph on some diagonal k, we can\n // definitely reach the end of the edit graph in no more than k edits, so\n // there's no point in considering any moves to diagonal k+1 any more (from\n // which we're guaranteed to need at least k+1 more edits).\n // Similarly, once we've reached the bottom of the edit graph, there's no\n // point considering moves to lower diagonals.\n // We record this fact by setting minDiagonalToConsider and\n // maxDiagonalToConsider to some finite value once we've hit the edge of\n // the edit graph.\n // This optimization is not faithful to the original algorithm presented in\n // Myers's paper, which instead pointlessly extends D-paths off the end of\n // the edit graph - see page 7 of Myers's paper which notes this point\n // explicitly and illustrates it with a diagram. This has major performance\n // implications for some common scenarios. For instance, to compute a diff\n // where the new text simply appends d characters on the end of the\n // original text of length n, the true Myers algorithm will take O(n+d^2)\n // time while this optimization needs only O(n+d) time.\n var minDiagonalToConsider = -Infinity,\n maxDiagonalToConsider = Infinity;\n\n // Main worker method. checks all permutations of a given edit length for acceptance.\n function execEditLength() {\n for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {\n var basePath = void 0;\n var removePath = bestPath[diagonalPath - 1],\n addPath = bestPath[diagonalPath + 1];\n if (removePath) {\n // No one else is going to attempt to use this value, clear it\n bestPath[diagonalPath - 1] = undefined;\n }\n var canAdd = false;\n if (addPath) {\n // what newPos will be after we do an insertion:\n var addPathNewPos = addPath.oldPos - diagonalPath;\n canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;\n }\n var canRemove = removePath && removePath.oldPos + 1 < oldLen;\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\n }\n\n // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the old string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canRemove || canAdd && removePath.oldPos < addPath.oldPos) {\n basePath = self.addToPath(addPath, true, false, 0, options);\n } else {\n basePath = self.addToPath(removePath, false, true, 1, options);\n }\n newPos = self.extractCommon(basePath, newString, oldString, diagonalPath, options);\n if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // If we have hit the end of both strings, then we are done\n return done(buildValues(self, basePath.lastComponent, newString, oldString, self.useLongestToken));\n } else {\n bestPath[diagonalPath] = basePath;\n if (basePath.oldPos + 1 >= oldLen) {\n maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);\n }\n if (newPos + 1 >= newLen) {\n minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);\n }\n }\n }\n editLength++;\n }\n\n // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced, or until the edit length exceeds options.maxEditLength (if given),\n // in which case it will return undefined.\n if (callback) {\n (function exec() {\n setTimeout(function () {\n if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {\n return callback();\n }\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n })();\n } else {\n while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {\n var ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n }\n },\n addToPath: function addToPath(path, added, removed, oldPosInc, options) {\n var last = path.lastComponent;\n if (last && !options.oneChangePerToken && last.added === added && last.removed === removed) {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: {\n count: last.count + 1,\n added: added,\n removed: removed,\n previousComponent: last.previousComponent\n }\n };\n } else {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: {\n count: 1,\n added: added,\n removed: removed,\n previousComponent: last\n }\n };\n }\n },\n extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath, options) {\n var newLen = newString.length,\n oldLen = oldString.length,\n oldPos = basePath.oldPos,\n newPos = oldPos - diagonalPath,\n commonCount = 0;\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(oldString[oldPos + 1], newString[newPos + 1], options)) {\n newPos++;\n oldPos++;\n commonCount++;\n if (options.oneChangePerToken) {\n basePath.lastComponent = {\n count: 1,\n previousComponent: basePath.lastComponent,\n added: false,\n removed: false\n };\n }\n }\n if (commonCount && !options.oneChangePerToken) {\n basePath.lastComponent = {\n count: commonCount,\n previousComponent: basePath.lastComponent,\n added: false,\n removed: false\n };\n }\n basePath.oldPos = oldPos;\n return newPos;\n },\n equals: function equals(left, right, options) {\n if (options.comparator) {\n return options.comparator(left, right);\n } else {\n return left === right || options.ignoreCase && left.toLowerCase() === right.toLowerCase();\n }\n },\n removeEmpty: function removeEmpty(array) {\n var ret = [];\n for (var i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n return ret;\n },\n castInput: function castInput(value) {\n return value;\n },\n tokenize: function tokenize(value) {\n return Array.from(value);\n },\n join: function join(chars) {\n return chars.join('');\n },\n postProcess: function postProcess(changeObjects) {\n return changeObjects;\n }\n};\nfunction buildValues(diff, lastComponent, newString, oldString, useLongestToken) {\n // First we convert our linked list of components in reverse order to an\n // array in the right order:\n var components = [];\n var nextComponent;\n while (lastComponent) {\n components.push(lastComponent);\n nextComponent = lastComponent.previousComponent;\n delete lastComponent.previousComponent;\n lastComponent = nextComponent;\n }\n components.reverse();\n var componentPos = 0,\n componentLen = components.length,\n newPos = 0,\n oldPos = 0;\n for (; componentPos < componentLen; componentPos++) {\n var component = components[componentPos];\n if (!component.removed) {\n if (!component.added && useLongestToken) {\n var value = newString.slice(newPos, newPos + component.count);\n value = value.map(function (value, i) {\n var oldValue = oldString[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = diff.join(value);\n } else {\n component.value = diff.join(newString.slice(newPos, newPos + component.count));\n }\n newPos += component.count;\n\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n } else {\n component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));\n oldPos += component.count;\n }\n }\n return components;\n}\n\nvar characterDiff = new Diff();\nfunction diffChars(oldStr, newStr, options) {\n return characterDiff.diff(oldStr, newStr, options);\n}\n\nfunction longestCommonPrefix(str1, str2) {\n var i;\n for (i = 0; i < str1.length && i < str2.length; i++) {\n if (str1[i] != str2[i]) {\n return str1.slice(0, i);\n }\n }\n return str1.slice(0, i);\n}\nfunction longestCommonSuffix(str1, str2) {\n var i;\n\n // Unlike longestCommonPrefix, we need a special case to handle all scenarios\n // where we return the empty string since str1.slice(-0) will return the\n // entire string.\n if (!str1 || !str2 || str1[str1.length - 1] != str2[str2.length - 1]) {\n return '';\n }\n for (i = 0; i < str1.length && i < str2.length; i++) {\n if (str1[str1.length - (i + 1)] != str2[str2.length - (i + 1)]) {\n return str1.slice(-i);\n }\n }\n return str1.slice(-i);\n}\nfunction replacePrefix(string, oldPrefix, newPrefix) {\n if (string.slice(0, oldPrefix.length) != oldPrefix) {\n throw Error(\"string \".concat(JSON.stringify(string), \" doesn't start with prefix \").concat(JSON.stringify(oldPrefix), \"; this is a bug\"));\n }\n return newPrefix + string.slice(oldPrefix.length);\n}\nfunction replaceSuffix(string, oldSuffix, newSuffix) {\n if (!oldSuffix) {\n return string + newSuffix;\n }\n if (string.slice(-oldSuffix.length) != oldSuffix) {\n throw Error(\"string \".concat(JSON.stringify(string), \" doesn't end with suffix \").concat(JSON.stringify(oldSuffix), \"; this is a bug\"));\n }\n return string.slice(0, -oldSuffix.length) + newSuffix;\n}\nfunction removePrefix(string, oldPrefix) {\n return replacePrefix(string, oldPrefix, '');\n}\nfunction removeSuffix(string, oldSuffix) {\n return replaceSuffix(string, oldSuffix, '');\n}\nfunction maximumOverlap(string1, string2) {\n return string2.slice(0, overlapCount(string1, string2));\n}\n\n// Nicked from https://stackoverflow.com/a/60422853/1709587\nfunction overlapCount(a, b) {\n // Deal with cases where the strings differ in length\n var startA = 0;\n if (a.length > b.length) {\n startA = a.length - b.length;\n }\n var endB = b.length;\n if (a.length < b.length) {\n endB = a.length;\n }\n // Create a back-reference for each index\n // that should be followed in case of a mismatch.\n // We only need B to make these references:\n var map = Array(endB);\n var k = 0; // Index that lags behind j\n map[0] = 0;\n for (var j = 1; j < endB; j++) {\n if (b[j] == b[k]) {\n map[j] = map[k]; // skip over the same character (optional optimisation)\n } else {\n map[j] = k;\n }\n while (k > 0 && b[j] != b[k]) {\n k = map[k];\n }\n if (b[j] == b[k]) {\n k++;\n }\n }\n // Phase 2: use these references while iterating over A\n k = 0;\n for (var i = startA; i < a.length; i++) {\n while (k > 0 && a[i] != b[k]) {\n k = map[k];\n }\n if (a[i] == b[k]) {\n k++;\n }\n }\n return k;\n}\n\n/**\n * Returns true if the string consistently uses Windows line endings.\n */\nfunction hasOnlyWinLineEndings(string) {\n return string.includes('\\r\\n') && !string.startsWith('\\n') && !string.match(/[^\\r]\\n/);\n}\n\n/**\n * Returns true if the string consistently uses Unix line endings.\n */\nfunction hasOnlyUnixLineEndings(string) {\n return !string.includes('\\r\\n') && string.includes('\\n');\n}\n\n// Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode\n//\n// Ranges and exceptions:\n// Latin-1 Supplement, 0080\u201300FF\n// - U+00D7 \u00D7 Multiplication sign\n// - U+00F7 \u00F7 Division sign\n// Latin Extended-A, 0100\u2013017F\n// Latin Extended-B, 0180\u2013024F\n// IPA Extensions, 0250\u201302AF\n// Spacing Modifier Letters, 02B0\u201302FF\n// - U+02C7 \u02C7 &#711; Caron\n// - U+02D8 \u02D8 &#728; Breve\n// - U+02D9 \u02D9 &#729; Dot Above\n// - U+02DA \u02DA &#730; Ring Above\n// - U+02DB \u02DB &#731; Ogonek\n// - U+02DC \u02DC &#732; Small Tilde\n// - U+02DD \u02DD &#733; Double Acute Accent\n// Latin Extended Additional, 1E00\u20131EFF\nvar extendedWordChars = \"a-zA-Z0-9_\\\\u{C0}-\\\\u{FF}\\\\u{D8}-\\\\u{F6}\\\\u{F8}-\\\\u{2C6}\\\\u{2C8}-\\\\u{2D7}\\\\u{2DE}-\\\\u{2FF}\\\\u{1E00}-\\\\u{1EFF}\";\n\n// Each token is one of the following:\n// - A punctuation mark plus the surrounding whitespace\n// - A word plus the surrounding whitespace\n// - Pure whitespace (but only in the special case where this the entire text\n// is just whitespace)\n//\n// We have to include surrounding whitespace in the tokens because the two\n// alternative approaches produce horribly broken results:\n// * If we just discard the whitespace, we can't fully reproduce the original\n// text from the sequence of tokens and any attempt to render the diff will\n// get the whitespace wrong.\n// * If we have separate tokens for whitespace, then in a typical text every\n// second token will be a single space character. But this often results in\n// the optimal diff between two texts being a perverse one that preserves\n// the spaces between words but deletes and reinserts actual common words.\n// See https://github.com/kpdecker/jsdiff/issues/160#issuecomment-1866099640\n// for an example.\n//\n// Keeping the surrounding whitespace of course has implications for .equals\n// and .join, not just .tokenize.\n\n// This regex does NOT fully implement the tokenization rules described above.\n// Instead, it gives runs of whitespace their own \"token\". The tokenize method\n// then handles stitching whitespace tokens onto adjacent word or punctuation\n// tokens.\nvar tokenizeIncludingWhitespace = new RegExp(\"[\".concat(extendedWordChars, \"]+|\\\\s+|[^\").concat(extendedWordChars, \"]\"), 'ug');\nvar wordDiff = new Diff();\nwordDiff.equals = function (left, right, options) {\n if (options.ignoreCase) {\n left = left.toLowerCase();\n right = right.toLowerCase();\n }\n return left.trim() === right.trim();\n};\nwordDiff.tokenize = function (value) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var parts;\n if (options.intlSegmenter) {\n if (options.intlSegmenter.resolvedOptions().granularity != 'word') {\n throw new Error('The segmenter passed must have a granularity of \"word\"');\n }\n parts = Array.from(options.intlSegmenter.segment(value), function (segment) {\n return segment.segment;\n });\n } else {\n parts = value.match(tokenizeIncludingWhitespace) || [];\n }\n var tokens = [];\n var prevPart = null;\n parts.forEach(function (part) {\n if (/\\s/.test(part)) {\n if (prevPart == null) {\n tokens.push(part);\n } else {\n tokens.push(tokens.pop() + part);\n }\n } else if (/\\s/.test(prevPart)) {\n if (tokens[tokens.length - 1] == prevPart) {\n tokens.push(tokens.pop() + part);\n } else {\n tokens.push(prevPart + part);\n }\n } else {\n tokens.push(part);\n }\n prevPart = part;\n });\n return tokens;\n};\nwordDiff.join = function (tokens) {\n // Tokens being joined here will always have appeared consecutively in the\n // same text, so we can simply strip off the leading whitespace from all the\n // tokens except the first (and except any whitespace-only tokens - but such\n // a token will always be the first and only token anyway) and then join them\n // and the whitespace around words and punctuation will end up correct.\n return tokens.map(function (token, i) {\n if (i == 0) {\n return token;\n } else {\n return token.replace(/^\\s+/, '');\n }\n }).join('');\n};\nwordDiff.postProcess = function (changes, options) {\n if (!changes || options.oneChangePerToken) {\n return changes;\n }\n var lastKeep = null;\n // Change objects representing any insertion or deletion since the last\n // \"keep\" change object. There can be at most one of each.\n var insertion = null;\n var deletion = null;\n changes.forEach(function (change) {\n if (change.added) {\n insertion = change;\n } else if (change.removed) {\n deletion = change;\n } else {\n if (insertion || deletion) {\n // May be false at start of text\n dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, change);\n }\n lastKeep = change;\n insertion = null;\n deletion = null;\n }\n });\n if (insertion || deletion) {\n dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, null);\n }\n return changes;\n};\nfunction diffWords(oldStr, newStr, options) {\n // This option has never been documented and never will be (it's clearer to\n // just call `diffWordsWithSpace` directly if you need that behavior), but\n // has existed in jsdiff for a long time, so we retain support for it here\n // for the sake of backwards compatibility.\n if ((options === null || options === void 0 ? void 0 : options.ignoreWhitespace) != null && !options.ignoreWhitespace) {\n return diffWordsWithSpace(oldStr, newStr, options);\n }\n return wordDiff.diff(oldStr, newStr, options);\n}\nfunction dedupeWhitespaceInChangeObjects(startKeep, deletion, insertion, endKeep) {\n // Before returning, we tidy up the leading and trailing whitespace of the\n // change objects to eliminate cases where trailing whitespace in one object\n // is repeated as leading whitespace in the next.\n // Below are examples of the outcomes we want here to explain the code.\n // I=insert, K=keep, D=delete\n // 1. diffing 'foo bar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz'\n // After cleanup, we want: K:'foo ' D:'bar ' K:'baz'\n //\n // 2. Diffing 'foo bar baz' vs 'foo qux baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' I:' qux ' K:' baz'\n // After cleanup, we want K:'foo ' D:'bar' I:'qux' K:' baz'\n //\n // 3. Diffing 'foo\\nbar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:'\\nbar ' K:' baz'\n // After cleanup, we want K'foo' D:'\\nbar' K:' baz'\n //\n // 4. Diffing 'foo baz' vs 'foo\\nbar baz'\n // Prior to cleanup, we have K:'foo\\n' I:'\\nbar ' K:' baz'\n // After cleanup, we ideally want K'foo' I:'\\nbar' K:' baz'\n // but don't actually manage this currently (the pre-cleanup change\n // objects don't contain enough information to make it possible).\n //\n // 5. Diffing 'foo bar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz'\n // After cleanup, we want K:'foo ' D:' bar ' K:'baz'\n //\n // Our handling is unavoidably imperfect in the case where there's a single\n // indel between keeps and the whitespace has changed. For instance, consider\n // diffing 'foo\\tbar\\nbaz' vs 'foo baz'. Unless we create an extra change\n // object to represent the insertion of the space character (which isn't even\n // a token), we have no way to avoid losing information about the texts'\n // original whitespace in the result we return. Still, we do our best to\n // output something that will look sensible if we e.g. print it with\n // insertions in green and deletions in red.\n\n // Between two \"keep\" change objects (or before the first or after the last\n // change object), we can have either:\n // * A \"delete\" followed by an \"insert\"\n // * Just an \"insert\"\n // * Just a \"delete\"\n // We handle the three cases separately.\n if (deletion && insertion) {\n var oldWsPrefix = deletion.value.match(/^\\s*/)[0];\n var oldWsSuffix = deletion.value.match(/\\s*$/)[0];\n var newWsPrefix = insertion.value.match(/^\\s*/)[0];\n var newWsSuffix = insertion.value.match(/\\s*$/)[0];\n if (startKeep) {\n var commonWsPrefix = longestCommonPrefix(oldWsPrefix, newWsPrefix);\n startKeep.value = replaceSuffix(startKeep.value, newWsPrefix, commonWsPrefix);\n deletion.value = removePrefix(deletion.value, commonWsPrefix);\n insertion.value = removePrefix(insertion.value, commonWsPrefix);\n }\n if (endKeep) {\n var commonWsSuffix = longestCommonSuffix(oldWsSuffix, newWsSuffix);\n endKeep.value = replacePrefix(endKeep.value, newWsSuffix, commonWsSuffix);\n deletion.value = removeSuffix(deletion.value, commonWsSuffix);\n insertion.value = removeSuffix(insertion.value, commonWsSuffix);\n }\n } else if (insertion) {\n // The whitespaces all reflect what was in the new text rather than\n // the old, so we essentially have no information about whitespace\n // insertion or deletion. We just want to dedupe the whitespace.\n // We do that by having each change object keep its trailing\n // whitespace and deleting duplicate leading whitespace where\n // present.\n if (startKeep) {\n insertion.value = insertion.value.replace(/^\\s*/, '');\n }\n if (endKeep) {\n endKeep.value = endKeep.value.replace(/^\\s*/, '');\n }\n // otherwise we've got a deletion and no insertion\n } else if (startKeep && endKeep) {\n var newWsFull = endKeep.value.match(/^\\s*/)[0],\n delWsStart = deletion.value.match(/^\\s*/)[0],\n delWsEnd = deletion.value.match(/\\s*$/)[0];\n\n // Any whitespace that comes straight after startKeep in both the old and\n // new texts, assign to startKeep and remove from the deletion.\n var newWsStart = longestCommonPrefix(newWsFull, delWsStart);\n deletion.value = removePrefix(deletion.value, newWsStart);\n\n // Any whitespace that comes straight before endKeep in both the old and\n // new texts, and hasn't already been assigned to startKeep, assign to\n // endKeep and remove from the deletion.\n var newWsEnd = longestCommonSuffix(removePrefix(newWsFull, newWsStart), delWsEnd);\n deletion.value = removeSuffix(deletion.value, newWsEnd);\n endKeep.value = replacePrefix(endKeep.value, newWsFull, newWsEnd);\n\n // If there's any whitespace from the new text that HASN'T already been\n // assigned, assign it to the start:\n startKeep.value = replaceSuffix(startKeep.value, newWsFull, newWsFull.slice(0, newWsFull.length - newWsEnd.length));\n } else if (endKeep) {\n // We are at the start of the text. Preserve all the whitespace on\n // endKeep, and just remove whitespace from the end of deletion to the\n // extent that it overlaps with the start of endKeep.\n var endKeepWsPrefix = endKeep.value.match(/^\\s*/)[0];\n var deletionWsSuffix = deletion.value.match(/\\s*$/)[0];\n var overlap = maximumOverlap(deletionWsSuffix, endKeepWsPrefix);\n deletion.value = removeSuffix(deletion.value, overlap);\n } else if (startKeep) {\n // We are at the END of the text. Preserve all the whitespace on\n // startKeep, and just remove whitespace from the start of deletion to\n // the extent that it overlaps with the end of startKeep.\n var startKeepWsSuffix = startKeep.value.match(/\\s*$/)[0];\n var deletionWsPrefix = deletion.value.match(/^\\s*/)[0];\n var _overlap = maximumOverlap(startKeepWsSuffix, deletionWsPrefix);\n deletion.value = removePrefix(deletion.value, _overlap);\n }\n}\nvar wordWithSpaceDiff = new Diff();\nwordWithSpaceDiff.tokenize = function (value) {\n // Slightly different to the tokenizeIncludingWhitespace regex used above in\n // that this one treats each individual newline as a distinct tokens, rather\n // than merging them into other surrounding whitespace. This was requested\n // in https://github.com/kpdecker/jsdiff/issues/180 &\n // https://github.com/kpdecker/jsdiff/issues/211\n var regex = new RegExp(\"(\\\\r?\\\\n)|[\".concat(extendedWordChars, \"]+|[^\\\\S\\\\n\\\\r]+|[^\").concat(extendedWordChars, \"]\"), 'ug');\n return value.match(regex) || [];\n};\nfunction diffWordsWithSpace(oldStr, newStr, options) {\n return wordWithSpaceDiff.diff(oldStr, newStr, options);\n}\n\nfunction generateOptions(options, defaults) {\n if (typeof options === 'function') {\n defaults.callback = options;\n } else if (options) {\n for (var name in options) {\n /* istanbul ignore else */\n if (options.hasOwnProperty(name)) {\n defaults[name] = options[name];\n }\n }\n }\n return defaults;\n}\n\nvar lineDiff = new Diff();\nlineDiff.tokenize = function (value, options) {\n if (options.stripTrailingCr) {\n // remove one \\r before \\n to match GNU diff's --strip-trailing-cr behavior\n value = value.replace(/\\r\\n/g, '\\n');\n }\n var retLines = [],\n linesAndNewlines = value.split(/(\\n|\\r\\n)/);\n\n // Ignore the final empty token that occurs if the string ends with a new line\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n }\n\n // Merge the content and line separators into single tokens\n for (var i = 0; i < linesAndNewlines.length; i++) {\n var line = linesAndNewlines[i];\n if (i % 2 && !options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n } else {\n retLines.push(line);\n }\n }\n return retLines;\n};\nlineDiff.equals = function (left, right, options) {\n // If we're ignoring whitespace, we need to normalise lines by stripping\n // whitespace before checking equality. (This has an annoying interaction\n // with newlineIsToken that requires special handling: if newlines get their\n // own token, then we DON'T want to trim the *newline* tokens down to empty\n // strings, since this would cause us to treat whitespace-only line content\n // as equal to a separator between lines, which would be weird and\n // inconsistent with the documented behavior of the options.)\n if (options.ignoreWhitespace) {\n if (!options.newlineIsToken || !left.includes('\\n')) {\n left = left.trim();\n }\n if (!options.newlineIsToken || !right.includes('\\n')) {\n right = right.trim();\n }\n } else if (options.ignoreNewlineAtEof && !options.newlineIsToken) {\n if (left.endsWith('\\n')) {\n left = left.slice(0, -1);\n }\n if (right.endsWith('\\n')) {\n right = right.slice(0, -1);\n }\n }\n return Diff.prototype.equals.call(this, left, right, options);\n};\nfunction diffLines(oldStr, newStr, callback) {\n return lineDiff.diff(oldStr, newStr, callback);\n}\n\n// Kept for backwards compatibility. This is a rather arbitrary wrapper method\n// that just calls `diffLines` with `ignoreWhitespace: true`. It's confusing to\n// have two ways to do exactly the same thing in the API, so we no longer\n// document this one (library users should explicitly use `diffLines` with\n// `ignoreWhitespace: true` instead) but we keep it around to maintain\n// compatibility with code that used old versions.\nfunction diffTrimmedLines(oldStr, newStr, callback) {\n var options = generateOptions(callback, {\n ignoreWhitespace: true\n });\n return lineDiff.diff(oldStr, newStr, options);\n}\n\nvar sentenceDiff = new Diff();\nsentenceDiff.tokenize = function (value) {\n return value.split(/(\\S.+?[.!?])(?=\\s+|$)/);\n};\nfunction diffSentences(oldStr, newStr, callback) {\n return sentenceDiff.diff(oldStr, newStr, callback);\n}\n\nvar cssDiff = new Diff();\ncssDiff.tokenize = function (value) {\n return value.split(/([{}:;,]|\\s+)/);\n};\nfunction diffCss(oldStr, newStr, callback) {\n return cssDiff.diff(oldStr, newStr, callback);\n}\n\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar jsonDiff = new Diff();\n// Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\njsonDiff.useLongestToken = true;\njsonDiff.tokenize = lineDiff.tokenize;\njsonDiff.castInput = function (value, options) {\n var undefinedReplacement = options.undefinedReplacement,\n _options$stringifyRep = options.stringifyReplacer,\n stringifyReplacer = _options$stringifyRep === void 0 ? function (k, v) {\n return typeof v === 'undefined' ? undefinedReplacement : v;\n } : _options$stringifyRep;\n return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' ');\n};\njsonDiff.equals = function (left, right, options) {\n return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\\r\\n])/g, '$1'), right.replace(/,([\\r\\n])/g, '$1'), options);\n};\nfunction diffJson(oldObj, newObj, options) {\n return jsonDiff.diff(oldObj, newObj, options);\n}\n\n// This function handles the presence of circular references by bailing out when encountering an\n// object that is already on the \"stack\" of items being processed. Accepts an optional replacer\nfunction canonicalize(obj, stack, replacementStack, replacer, key) {\n stack = stack || [];\n replacementStack = replacementStack || [];\n if (replacer) {\n obj = replacer(key, obj);\n }\n var i;\n for (i = 0; i < stack.length; i += 1) {\n if (stack[i] === obj) {\n return replacementStack[i];\n }\n }\n var canonicalizedObj;\n if ('[object Array]' === Object.prototype.toString.call(obj)) {\n stack.push(obj);\n canonicalizedObj = new Array(obj.length);\n replacementStack.push(canonicalizedObj);\n for (i = 0; i < obj.length; i += 1) {\n canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);\n }\n stack.pop();\n replacementStack.pop();\n return canonicalizedObj;\n }\n if (obj && obj.toJSON) {\n obj = obj.toJSON();\n }\n if (_typeof(obj) === 'object' && obj !== null) {\n stack.push(obj);\n canonicalizedObj = {};\n replacementStack.push(canonicalizedObj);\n var sortedKeys = [],\n _key;\n for (_key in obj) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(obj, _key)) {\n sortedKeys.push(_key);\n }\n }\n sortedKeys.sort();\n for (i = 0; i < sortedKeys.length; i += 1) {\n _key = sortedKeys[i];\n canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);\n }\n stack.pop();\n replacementStack.pop();\n } else {\n canonicalizedObj = obj;\n }\n return canonicalizedObj;\n}\n\nvar arrayDiff = new Diff();\narrayDiff.tokenize = function (value) {\n return value.slice();\n};\narrayDiff.join = arrayDiff.removeEmpty = function (value) {\n return value;\n};\nfunction diffArrays(oldArr, newArr, callback) {\n return arrayDiff.diff(oldArr, newArr, callback);\n}\n\nfunction unixToWin(patch) {\n if (Array.isArray(patch)) {\n return patch.map(unixToWin);\n }\n return _objectSpread2(_objectSpread2({}, patch), {}, {\n hunks: patch.hunks.map(function (hunk) {\n return _objectSpread2(_objectSpread2({}, hunk), {}, {\n lines: hunk.lines.map(function (line, i) {\n var _hunk$lines;\n return line.startsWith('\\\\') || line.endsWith('\\r') || (_hunk$lines = hunk.lines[i + 1]) !== null && _hunk$lines !== void 0 && _hunk$lines.startsWith('\\\\') ? line : line + '\\r';\n })\n });\n })\n });\n}\nfunction winToUnix(patch) {\n if (Array.isArray(patch)) {\n return patch.map(winToUnix);\n }\n return _objectSpread2(_objectSpread2({}, patch), {}, {\n hunks: patch.hunks.map(function (hunk) {\n return _objectSpread2(_objectSpread2({}, hunk), {}, {\n lines: hunk.lines.map(function (line) {\n return line.endsWith('\\r') ? line.substring(0, line.length - 1) : line;\n })\n });\n })\n });\n}\n\n/**\n * Returns true if the patch consistently uses Unix line endings (or only involves one line and has\n * no line endings).\n */\nfunction isUnix(patch) {\n if (!Array.isArray(patch)) {\n patch = [patch];\n }\n return !patch.some(function (index) {\n return index.hunks.some(function (hunk) {\n return hunk.lines.some(function (line) {\n return !line.startsWith('\\\\') && line.endsWith('\\r');\n });\n });\n });\n}\n\n/**\n * Returns true if the patch uses Windows line endings and only Windows line endings.\n */\nfunction isWin(patch) {\n if (!Array.isArray(patch)) {\n patch = [patch];\n }\n return patch.some(function (index) {\n return index.hunks.some(function (hunk) {\n return hunk.lines.some(function (line) {\n return line.endsWith('\\r');\n });\n });\n }) && patch.every(function (index) {\n return index.hunks.every(function (hunk) {\n return hunk.lines.every(function (line, i) {\n var _hunk$lines2;\n return line.startsWith('\\\\') || line.endsWith('\\r') || ((_hunk$lines2 = hunk.lines[i + 1]) === null || _hunk$lines2 === void 0 ? void 0 : _hunk$lines2.startsWith('\\\\'));\n });\n });\n });\n}\n\nfunction parsePatch(uniDiff) {\n var diffstr = uniDiff.split(/\\n/),\n list = [],\n i = 0;\n function parseIndex() {\n var index = {};\n list.push(index);\n\n // Parse diff metadata\n while (i < diffstr.length) {\n var line = diffstr[i];\n\n // File header found, end parsing diff metadata\n if (/^(\\-\\-\\-|\\+\\+\\+|@@)\\s/.test(line)) {\n break;\n }\n\n // Diff index\n var header = /^(?:Index:|diff(?: -r \\w+)+)\\s+(.+?)\\s*$/.exec(line);\n if (header) {\n index.index = header[1];\n }\n i++;\n }\n\n // Parse file headers if they are defined. Unified diff requires them, but\n // there's no technical issues to have an isolated hunk without file header\n parseFileHeader(index);\n parseFileHeader(index);\n\n // Parse hunks\n index.hunks = [];\n while (i < diffstr.length) {\n var _line = diffstr[i];\n if (/^(Index:\\s|diff\\s|\\-\\-\\-\\s|\\+\\+\\+\\s|===================================================================)/.test(_line)) {\n break;\n } else if (/^@@/.test(_line)) {\n index.hunks.push(parseHunk());\n } else if (_line) {\n throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));\n } else {\n i++;\n }\n }\n }\n\n // Parses the --- and +++ headers, if none are found, no lines\n // are consumed.\n function parseFileHeader(index) {\n var fileHeader = /^(---|\\+\\+\\+)\\s+(.*)\\r?$/.exec(diffstr[i]);\n if (fileHeader) {\n var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';\n var data = fileHeader[2].split('\\t', 2);\n var fileName = data[0].replace(/\\\\\\\\/g, '\\\\');\n if (/^\".*\"$/.test(fileName)) {\n fileName = fileName.substr(1, fileName.length - 2);\n }\n index[keyPrefix + 'FileName'] = fileName;\n index[keyPrefix + 'Header'] = (data[1] || '').trim();\n i++;\n }\n }\n\n // Parses a hunk\n // This assumes that we are at the start of a hunk.\n function parseHunk() {\n var chunkHeaderIndex = i,\n chunkHeaderLine = diffstr[i++],\n chunkHeader = chunkHeaderLine.split(/@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/);\n var hunk = {\n oldStart: +chunkHeader[1],\n oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2],\n newStart: +chunkHeader[3],\n newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4],\n lines: []\n };\n\n // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart += 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart += 1;\n }\n var addCount = 0,\n removeCount = 0;\n for (; i < diffstr.length && (removeCount < hunk.oldLines || addCount < hunk.newLines || (_diffstr$i = diffstr[i]) !== null && _diffstr$i !== void 0 && _diffstr$i.startsWith('\\\\')); i++) {\n var _diffstr$i;\n var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0];\n if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\\\') {\n hunk.lines.push(diffstr[i]);\n if (operation === '+') {\n addCount++;\n } else if (operation === '-') {\n removeCount++;\n } else if (operation === ' ') {\n addCount++;\n removeCount++;\n }\n } else {\n throw new Error(\"Hunk at line \".concat(chunkHeaderIndex + 1, \" contained invalid line \").concat(diffstr[i]));\n }\n }\n\n // Handle the empty block count case\n if (!addCount && hunk.newLines === 1) {\n hunk.newLines = 0;\n }\n if (!removeCount && hunk.oldLines === 1) {\n hunk.oldLines = 0;\n }\n\n // Perform sanity checking\n if (addCount !== hunk.newLines) {\n throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n if (removeCount !== hunk.oldLines) {\n throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n return hunk;\n }\n while (i < diffstr.length) {\n parseIndex();\n }\n return list;\n}\n\n// Iterator that traverses in the range of [min, max], stepping\n// by distance from a given start position. I.e. for [0, 4], with\n// start of 2, this will iterate 2, 3, 1, 4, 0.\nfunction distanceIterator (start, minLine, maxLine) {\n var wantForward = true,\n backwardExhausted = false,\n forwardExhausted = false,\n localOffset = 1;\n return function iterator() {\n if (wantForward && !forwardExhausted) {\n if (backwardExhausted) {\n localOffset++;\n } else {\n wantForward = false;\n }\n\n // Check if trying to fit beyond text length, and if not, check it fits\n // after offset location (or desired location on first iteration)\n if (start + localOffset <= maxLine) {\n return start + localOffset;\n }\n forwardExhausted = true;\n }\n if (!backwardExhausted) {\n if (!forwardExhausted) {\n wantForward = true;\n }\n\n // Check if trying to fit before text beginning, and if not, check it fits\n // before offset location\n if (minLine <= start - localOffset) {\n return start - localOffset++;\n }\n backwardExhausted = true;\n return iterator();\n }\n\n // We tried to fit hunk before text beginning and beyond text length, then\n // hunk can't fit on the text. Return undefined\n };\n}\n\nfunction applyPatch(source, uniDiff) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (typeof uniDiff === 'string') {\n uniDiff = parsePatch(uniDiff);\n }\n if (Array.isArray(uniDiff)) {\n if (uniDiff.length > 1) {\n throw new Error('applyPatch only works with a single input.');\n }\n uniDiff = uniDiff[0];\n }\n if (options.autoConvertLineEndings || options.autoConvertLineEndings == null) {\n if (hasOnlyWinLineEndings(source) && isUnix(uniDiff)) {\n uniDiff = unixToWin(uniDiff);\n } else if (hasOnlyUnixLineEndings(source) && isWin(uniDiff)) {\n uniDiff = winToUnix(uniDiff);\n }\n }\n\n // Apply the diff to the input\n var lines = source.split('\\n'),\n hunks = uniDiff.hunks,\n compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) {\n return line === patchContent;\n },\n fuzzFactor = options.fuzzFactor || 0,\n minLine = 0;\n if (fuzzFactor < 0 || !Number.isInteger(fuzzFactor)) {\n throw new Error('fuzzFactor must be a non-negative integer');\n }\n\n // Special case for empty patch.\n if (!hunks.length) {\n return source;\n }\n\n // Before anything else, handle EOFNL insertion/removal. If the patch tells us to make a change\n // to the EOFNL that is redundant/impossible - i.e. to remove a newline that's not there, or add a\n // newline that already exists - then we either return false and fail to apply the patch (if\n // fuzzFactor is 0) or simply ignore the problem and do nothing (if fuzzFactor is >0).\n // If we do need to remove/add a newline at EOF, this will always be in the final hunk:\n var prevLine = '',\n removeEOFNL = false,\n addEOFNL = false;\n for (var i = 0; i < hunks[hunks.length - 1].lines.length; i++) {\n var line = hunks[hunks.length - 1].lines[i];\n if (line[0] == '\\\\') {\n if (prevLine[0] == '+') {\n removeEOFNL = true;\n } else if (prevLine[0] == '-') {\n addEOFNL = true;\n }\n }\n prevLine = line;\n }\n if (removeEOFNL) {\n if (addEOFNL) {\n // This means the final line gets changed but doesn't have a trailing newline in either the\n // original or patched version. In that case, we do nothing if fuzzFactor > 0, and if\n // fuzzFactor is 0, we simply validate that the source file has no trailing newline.\n if (!fuzzFactor && lines[lines.length - 1] == '') {\n return false;\n }\n } else if (lines[lines.length - 1] == '') {\n lines.pop();\n } else if (!fuzzFactor) {\n return false;\n }\n } else if (addEOFNL) {\n if (lines[lines.length - 1] != '') {\n lines.push('');\n } else if (!fuzzFactor) {\n return false;\n }\n }\n\n /**\n * Checks if the hunk can be made to fit at the provided location with at most `maxErrors`\n * insertions, substitutions, or deletions, while ensuring also that:\n * - lines deleted in the hunk match exactly, and\n * - wherever an insertion operation or block of insertion operations appears in the hunk, the\n * immediately preceding and following lines of context match exactly\n *\n * `toPos` should be set such that lines[toPos] is meant to match hunkLines[0].\n *\n * If the hunk can be applied, returns an object with properties `oldLineLastI` and\n * `replacementLines`. Otherwise, returns null.\n */\n function applyHunk(hunkLines, toPos, maxErrors) {\n var hunkLinesI = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var lastContextLineMatched = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var patchedLines = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];\n var patchedLinesLength = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n var nConsecutiveOldContextLines = 0;\n var nextContextLineMustMatch = false;\n for (; hunkLinesI < hunkLines.length; hunkLinesI++) {\n var hunkLine = hunkLines[hunkLinesI],\n operation = hunkLine.length > 0 ? hunkLine[0] : ' ',\n content = hunkLine.length > 0 ? hunkLine.substr(1) : hunkLine;\n if (operation === '-') {\n if (compareLine(toPos + 1, lines[toPos], operation, content)) {\n toPos++;\n nConsecutiveOldContextLines = 0;\n } else {\n if (!maxErrors || lines[toPos] == null) {\n return null;\n }\n patchedLines[patchedLinesLength] = lines[toPos];\n return applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1);\n }\n }\n if (operation === '+') {\n if (!lastContextLineMatched) {\n return null;\n }\n patchedLines[patchedLinesLength] = content;\n patchedLinesLength++;\n nConsecutiveOldContextLines = 0;\n nextContextLineMustMatch = true;\n }\n if (operation === ' ') {\n nConsecutiveOldContextLines++;\n patchedLines[patchedLinesLength] = lines[toPos];\n if (compareLine(toPos + 1, lines[toPos], operation, content)) {\n patchedLinesLength++;\n lastContextLineMatched = true;\n nextContextLineMustMatch = false;\n toPos++;\n } else {\n if (nextContextLineMustMatch || !maxErrors) {\n return null;\n }\n\n // Consider 3 possibilities in sequence:\n // 1. lines contains a *substitution* not included in the patch context, or\n // 2. lines contains an *insertion* not included in the patch context, or\n // 3. lines contains a *deletion* not included in the patch context\n // The first two options are of course only possible if the line from lines is non-null -\n // i.e. only option 3 is possible if we've overrun the end of the old file.\n return lines[toPos] && (applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength + 1) || applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1)) || applyHunk(hunkLines, toPos, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength);\n }\n }\n }\n\n // Before returning, trim any unmodified context lines off the end of patchedLines and reduce\n // toPos (and thus oldLineLastI) accordingly. This allows later hunks to be applied to a region\n // that starts in this hunk's trailing context.\n patchedLinesLength -= nConsecutiveOldContextLines;\n toPos -= nConsecutiveOldContextLines;\n patchedLines.length = patchedLinesLength;\n return {\n patchedLines: patchedLines,\n oldLineLastI: toPos - 1\n };\n }\n var resultLines = [];\n\n // Search best fit offsets for each hunk based on the previous ones\n var prevHunkOffset = 0;\n for (var _i = 0; _i < hunks.length; _i++) {\n var hunk = hunks[_i];\n var hunkResult = void 0;\n var maxLine = lines.length - hunk.oldLines + fuzzFactor;\n var toPos = void 0;\n for (var maxErrors = 0; maxErrors <= fuzzFactor; maxErrors++) {\n toPos = hunk.oldStart + prevHunkOffset - 1;\n var iterator = distanceIterator(toPos, minLine, maxLine);\n for (; toPos !== undefined; toPos = iterator()) {\n hunkResult = applyHunk(hunk.lines, toPos, maxErrors);\n if (hunkResult) {\n break;\n }\n }\n if (hunkResult) {\n break;\n }\n }\n if (!hunkResult) {\n return false;\n }\n\n // Copy everything from the end of where we applied the last hunk to the start of this hunk\n for (var _i2 = minLine; _i2 < toPos; _i2++) {\n resultLines.push(lines[_i2]);\n }\n\n // Add the lines produced by applying the hunk:\n for (var _i3 = 0; _i3 < hunkResult.patchedLines.length; _i3++) {\n var _line = hunkResult.patchedLines[_i3];\n resultLines.push(_line);\n }\n\n // Set lower text limit to end of the current hunk, so next ones don't try\n // to fit over already patched text\n minLine = hunkResult.oldLineLastI + 1;\n\n // Note the offset between where the patch said the hunk should've applied and where we\n // applied it, so we can adjust future hunks accordingly:\n prevHunkOffset = toPos + 1 - hunk.oldStart;\n }\n\n // Copy over the rest of the lines from the old text\n for (var _i4 = minLine; _i4 < lines.length; _i4++) {\n resultLines.push(lines[_i4]);\n }\n return resultLines.join('\\n');\n}\n\n// Wrapper that supports multiple file patches via callbacks.\nfunction applyPatches(uniDiff, options) {\n if (typeof uniDiff === 'string') {\n uniDiff = parsePatch(uniDiff);\n }\n var currentIndex = 0;\n function processIndex() {\n var index = uniDiff[currentIndex++];\n if (!index) {\n return options.complete();\n }\n options.loadFile(index, function (err, data) {\n if (err) {\n return options.complete(err);\n }\n var updatedContent = applyPatch(data, index, options);\n options.patched(index, updatedContent, function (err) {\n if (err) {\n return options.complete(err);\n }\n processIndex();\n });\n });\n }\n processIndex();\n}\n\nfunction structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n if (!options) {\n options = {};\n }\n if (typeof options === 'function') {\n options = {\n callback: options\n };\n }\n if (typeof options.context === 'undefined') {\n options.context = 4;\n }\n if (options.newlineIsToken) {\n throw new Error('newlineIsToken may not be used with patch-generation functions, only with diffing functions');\n }\n if (!options.callback) {\n return diffLinesResultToPatch(diffLines(oldStr, newStr, options));\n } else {\n var _options = options,\n _callback = _options.callback;\n diffLines(oldStr, newStr, _objectSpread2(_objectSpread2({}, options), {}, {\n callback: function callback(diff) {\n var patch = diffLinesResultToPatch(diff);\n _callback(patch);\n }\n }));\n }\n function diffLinesResultToPatch(diff) {\n // STEP 1: Build up the patch with no \"\\" lines and with the arrays\n // of lines containing trailing newline characters. We'll tidy up later...\n\n if (!diff) {\n return;\n }\n diff.push({\n value: '',\n lines: []\n }); // Append an empty value to make cleanup easier\n\n function contextLines(lines) {\n return lines.map(function (entry) {\n return ' ' + entry;\n });\n }\n var hunks = [];\n var oldRangeStart = 0,\n newRangeStart = 0,\n curRange = [],\n oldLine = 1,\n newLine = 1;\n var _loop = function _loop() {\n var current = diff[i],\n lines = current.lines || splitLines(current.value);\n current.lines = lines;\n if (current.added || current.removed) {\n var _curRange;\n // If we have previous context, start with that\n if (!oldRangeStart) {\n var prev = diff[i - 1];\n oldRangeStart = oldLine;\n newRangeStart = newLine;\n if (prev) {\n curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];\n oldRangeStart -= curRange.length;\n newRangeStart -= curRange.length;\n }\n }\n\n // Output our changes\n (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) {\n return (current.added ? '+' : '-') + entry;\n })));\n\n // Track the updated file position\n if (current.added) {\n newLine += lines.length;\n } else {\n oldLine += lines.length;\n }\n } else {\n // Identical context lines. Track line changes\n if (oldRangeStart) {\n // Close out any changes that have been output (or join overlapping)\n if (lines.length <= options.context * 2 && i < diff.length - 2) {\n var _curRange2;\n // Overlapping\n (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines)));\n } else {\n var _curRange3;\n // end the range and output\n var contextSize = Math.min(lines.length, options.context);\n (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize))));\n var _hunk = {\n oldStart: oldRangeStart,\n oldLines: oldLine - oldRangeStart + contextSize,\n newStart: newRangeStart,\n newLines: newLine - newRangeStart + contextSize,\n lines: curRange\n };\n hunks.push(_hunk);\n oldRangeStart = 0;\n newRangeStart = 0;\n curRange = [];\n }\n }\n oldLine += lines.length;\n newLine += lines.length;\n }\n };\n for (var i = 0; i < diff.length; i++) {\n _loop();\n }\n\n // Step 2: eliminate the trailing `\\n` from each line of each hunk, and, where needed, add\n // \"\\".\n for (var _i = 0, _hunks = hunks; _i < _hunks.length; _i++) {\n var hunk = _hunks[_i];\n for (var _i2 = 0; _i2 < hunk.lines.length; _i2++) {\n if (hunk.lines[_i2].endsWith('\\n')) {\n hunk.lines[_i2] = hunk.lines[_i2].slice(0, -1);\n } else {\n hunk.lines.splice(_i2 + 1, 0, '\\\');\n _i2++; // Skip the line we just added, then continue iterating\n }\n }\n }\n return {\n oldFileName: oldFileName,\n newFileName: newFileName,\n oldHeader: oldHeader,\n newHeader: newHeader,\n hunks: hunks\n };\n }\n}\nfunction formatPatch(diff) {\n if (Array.isArray(diff)) {\n return diff.map(formatPatch).join('\\n');\n }\n var ret = [];\n if (diff.oldFileName == diff.newFileName) {\n ret.push('Index: ' + diff.oldFileName);\n }\n ret.push('===================================================================');\n ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\\t' + diff.oldHeader));\n ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\\t' + diff.newHeader));\n for (var i = 0; i < diff.hunks.length; i++) {\n var hunk = diff.hunks[i];\n // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart -= 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart -= 1;\n }\n ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');\n ret.push.apply(ret, hunk.lines);\n }\n return ret.join('\\n') + '\\n';\n}\nfunction createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n var _options2;\n if (typeof options === 'function') {\n options = {\n callback: options\n };\n }\n if (!((_options2 = options) !== null && _options2 !== void 0 && _options2.callback)) {\n var patchObj = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options);\n if (!patchObj) {\n return;\n }\n return formatPatch(patchObj);\n } else {\n var _options3 = options,\n _callback2 = _options3.callback;\n structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, _objectSpread2(_objectSpread2({}, options), {}, {\n callback: function callback(patchObj) {\n if (!patchObj) {\n _callback2();\n } else {\n _callback2(formatPatch(patchObj));\n }\n }\n }));\n }\n}\nfunction createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n}\n\n/**\n * Split `text` into an array of lines, including the trailing newline character (where present)\n */\nfunction splitLines(text) {\n var hasTrailingNl = text.endsWith('\\n');\n var result = text.split('\\n').map(function (line) {\n return line + '\\n';\n });\n if (hasTrailingNl) {\n result.pop();\n } else {\n result.push(result.pop().slice(0, -1));\n }\n return result;\n}\n\nfunction arrayEqual(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n return arrayStartsWith(a, b);\n}\nfunction arrayStartsWith(array, start) {\n if (start.length > array.length) {\n return false;\n }\n for (var i = 0; i < start.length; i++) {\n if (start[i] !== array[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction calcLineCount(hunk) {\n var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines),\n oldLines = _calcOldNewLineCount.oldLines,\n newLines = _calcOldNewLineCount.newLines;\n if (oldLines !== undefined) {\n hunk.oldLines = oldLines;\n } else {\n delete hunk.oldLines;\n }\n if (newLines !== undefined) {\n hunk.newLines = newLines;\n } else {\n delete hunk.newLines;\n }\n}\nfunction merge(mine, theirs, base) {\n mine = loadPatch(mine, base);\n theirs = loadPatch(theirs, base);\n var ret = {};\n\n // For index we just let it pass through as it doesn't have any necessary meaning.\n // Leaving sanity checks on this to the API consumer that may know more about the\n // meaning in their own context.\n if (mine.index || theirs.index) {\n ret.index = mine.index || theirs.index;\n }\n if (mine.newFileName || theirs.newFileName) {\n if (!fileNameChanged(mine)) {\n // No header or no change in ours, use theirs (and ours if theirs does not exist)\n ret.oldFileName = theirs.oldFileName || mine.oldFileName;\n ret.newFileName = theirs.newFileName || mine.newFileName;\n ret.oldHeader = theirs.oldHeader || mine.oldHeader;\n ret.newHeader = theirs.newHeader || mine.newHeader;\n } else if (!fileNameChanged(theirs)) {\n // No header or no change in theirs, use ours\n ret.oldFileName = mine.oldFileName;\n ret.newFileName = mine.newFileName;\n ret.oldHeader = mine.oldHeader;\n ret.newHeader = mine.newHeader;\n } else {\n // Both changed... figure it out\n ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName);\n ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName);\n ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader);\n ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader);\n }\n }\n ret.hunks = [];\n var mineIndex = 0,\n theirsIndex = 0,\n mineOffset = 0,\n theirsOffset = 0;\n while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) {\n var mineCurrent = mine.hunks[mineIndex] || {\n oldStart: Infinity\n },\n theirsCurrent = theirs.hunks[theirsIndex] || {\n oldStart: Infinity\n };\n if (hunkBefore(mineCurrent, theirsCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(mineCurrent, mineOffset));\n mineIndex++;\n theirsOffset += mineCurrent.newLines - mineCurrent.oldLines;\n } else if (hunkBefore(theirsCurrent, mineCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset));\n theirsIndex++;\n mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines;\n } else {\n // Overlap, merge as best we can\n var mergedHunk = {\n oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart),\n oldLines: 0,\n newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset),\n newLines: 0,\n lines: []\n };\n mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines);\n theirsIndex++;\n mineIndex++;\n ret.hunks.push(mergedHunk);\n }\n }\n return ret;\n}\nfunction loadPatch(param, base) {\n if (typeof param === 'string') {\n if (/^@@/m.test(param) || /^Index:/m.test(param)) {\n return parsePatch(param)[0];\n }\n if (!base) {\n throw new Error('Must provide a base reference or pass in a patch');\n }\n return structuredPatch(undefined, undefined, base, param);\n }\n return param;\n}\nfunction fileNameChanged(patch) {\n return patch.newFileName && patch.newFileName !== patch.oldFileName;\n}\nfunction selectField(index, mine, theirs) {\n if (mine === theirs) {\n return mine;\n } else {\n index.conflict = true;\n return {\n mine: mine,\n theirs: theirs\n };\n }\n}\nfunction hunkBefore(test, check) {\n return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;\n}\nfunction cloneHunk(hunk, offset) {\n return {\n oldStart: hunk.oldStart,\n oldLines: hunk.oldLines,\n newStart: hunk.newStart + offset,\n newLines: hunk.newLines,\n lines: hunk.lines\n };\n}\nfunction mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) {\n // This will generally result in a conflicted hunk, but there are cases where the context\n // is the only overlap where we can successfully merge the content here.\n var mine = {\n offset: mineOffset,\n lines: mineLines,\n index: 0\n },\n their = {\n offset: theirOffset,\n lines: theirLines,\n index: 0\n };\n\n // Handle any leading content\n insertLeading(hunk, mine, their);\n insertLeading(hunk, their, mine);\n\n // Now in the overlap content. Scan through and select the best changes from each.\n while (mine.index < mine.lines.length && their.index < their.lines.length) {\n var mineCurrent = mine.lines[mine.index],\n theirCurrent = their.lines[their.index];\n if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) {\n // Both modified ...\n mutualChange(hunk, mine, their);\n } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') {\n var _hunk$lines;\n // Mine inserted\n (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine)));\n } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') {\n var _hunk$lines2;\n // Theirs inserted\n (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their)));\n } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') {\n // Mine removed or edited\n removal(hunk, mine, their);\n } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') {\n // Their removed or edited\n removal(hunk, their, mine, true);\n } else if (mineCurrent === theirCurrent) {\n // Context identity\n hunk.lines.push(mineCurrent);\n mine.index++;\n their.index++;\n } else {\n // Context mismatch\n conflict(hunk, collectChange(mine), collectChange(their));\n }\n }\n\n // Now push anything that may be remaining\n insertTrailing(hunk, mine);\n insertTrailing(hunk, their);\n calcLineCount(hunk);\n}\nfunction mutualChange(hunk, mine, their) {\n var myChanges = collectChange(mine),\n theirChanges = collectChange(their);\n if (allRemoves(myChanges) && allRemoves(theirChanges)) {\n // Special case for remove changes that are supersets of one another\n if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) {\n var _hunk$lines3;\n (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges));\n return;\n } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {\n var _hunk$lines4;\n (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges));\n return;\n }\n } else if (arrayEqual(myChanges, theirChanges)) {\n var _hunk$lines5;\n (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges));\n return;\n }\n conflict(hunk, myChanges, theirChanges);\n}\nfunction removal(hunk, mine, their, swap) {\n var myChanges = collectChange(mine),\n theirChanges = collectContext(their, myChanges);\n if (theirChanges.merged) {\n var _hunk$lines6;\n (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged));\n } else {\n conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges);\n }\n}\nfunction conflict(hunk, mine, their) {\n hunk.conflict = true;\n hunk.lines.push({\n conflict: true,\n mine: mine,\n theirs: their\n });\n}\nfunction insertLeading(hunk, insert, their) {\n while (insert.offset < their.offset && insert.index < insert.lines.length) {\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n insert.offset++;\n }\n}\nfunction insertTrailing(hunk, insert) {\n while (insert.index < insert.lines.length) {\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n }\n}\nfunction collectChange(state) {\n var ret = [],\n operation = state.lines[state.index][0];\n while (state.index < state.lines.length) {\n var line = state.lines[state.index];\n\n // Group additions that are immediately after subtractions and treat them as one \"atomic\" modify change.\n if (operation === '-' && line[0] === '+') {\n operation = '+';\n }\n if (operation === line[0]) {\n ret.push(line);\n state.index++;\n } else {\n break;\n }\n }\n return ret;\n}\nfunction collectContext(state, matchChanges) {\n var changes = [],\n merged = [],\n matchIndex = 0,\n contextChanges = false,\n conflicted = false;\n while (matchIndex < matchChanges.length && state.index < state.lines.length) {\n var change = state.lines[state.index],\n match = matchChanges[matchIndex];\n\n // Once we've hit our add, then we are done\n if (match[0] === '+') {\n break;\n }\n contextChanges = contextChanges || change[0] !== ' ';\n merged.push(match);\n matchIndex++;\n\n // Consume any additions in the other block as a conflict to attempt\n // to pull in the remaining context after this\n if (change[0] === '+') {\n conflicted = true;\n while (change[0] === '+') {\n changes.push(change);\n change = state.lines[++state.index];\n }\n }\n if (match.substr(1) === change.substr(1)) {\n changes.push(change);\n state.index++;\n } else {\n conflicted = true;\n }\n }\n if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) {\n conflicted = true;\n }\n if (conflicted) {\n return changes;\n }\n while (matchIndex < matchChanges.length) {\n merged.push(matchChanges[matchIndex++]);\n }\n return {\n merged: merged,\n changes: changes\n };\n}\nfunction allRemoves(changes) {\n return changes.reduce(function (prev, change) {\n return prev && change[0] === '-';\n }, true);\n}\nfunction skipRemoveSuperset(state, removeChanges, delta) {\n for (var i = 0; i < delta; i++) {\n var changeContent = removeChanges[removeChanges.length - delta + i].substr(1);\n if (state.lines[state.index + i] !== ' ' + changeContent) {\n return false;\n }\n }\n state.index += delta;\n return true;\n}\nfunction calcOldNewLineCount(lines) {\n var oldLines = 0;\n var newLines = 0;\n lines.forEach(function (line) {\n if (typeof line !== 'string') {\n var myCount = calcOldNewLineCount(line.mine);\n var theirCount = calcOldNewLineCount(line.theirs);\n if (oldLines !== undefined) {\n if (myCount.oldLines === theirCount.oldLines) {\n oldLines += myCount.oldLines;\n } else {\n oldLines = undefined;\n }\n }\n if (newLines !== undefined) {\n if (myCount.newLines === theirCount.newLines) {\n newLines += myCount.newLines;\n } else {\n newLines = undefined;\n }\n }\n } else {\n if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) {\n newLines++;\n }\n if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) {\n oldLines++;\n }\n }\n });\n return {\n oldLines: oldLines,\n newLines: newLines\n };\n}\n\nfunction reversePatch(structuredPatch) {\n if (Array.isArray(structuredPatch)) {\n return structuredPatch.map(reversePatch).reverse();\n }\n return _objectSpread2(_objectSpread2({}, structuredPatch), {}, {\n oldFileName: structuredPatch.newFileName,\n oldHeader: structuredPatch.newHeader,\n newFileName: structuredPatch.oldFileName,\n newHeader: structuredPatch.oldHeader,\n hunks: structuredPatch.hunks.map(function (hunk) {\n return {\n oldLines: hunk.newLines,\n oldStart: hunk.newStart,\n newLines: hunk.oldLines,\n newStart: hunk.oldStart,\n lines: hunk.lines.map(function (l) {\n if (l.startsWith('-')) {\n return \"+\".concat(l.slice(1));\n }\n if (l.startsWith('+')) {\n return \"-\".concat(l.slice(1));\n }\n return l;\n })\n };\n })\n });\n}\n\n// See: http://code.google.com/p/google-diff-match-patch/wiki/API\nfunction convertChangesToDMP(changes) {\n var ret = [],\n change,\n operation;\n for (var i = 0; i < changes.length; i++) {\n change = changes[i];\n if (change.added) {\n operation = 1;\n } else if (change.removed) {\n operation = -1;\n } else {\n operation = 0;\n }\n ret.push([operation, change.value]);\n }\n return ret;\n}\n\nfunction convertChangesToXML(changes) {\n var ret = [];\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n if (change.added) {\n ret.push('<ins>');\n } else if (change.removed) {\n ret.push('<del>');\n }\n ret.push(escapeHTML(change.value));\n if (change.added) {\n ret.push('</ins>');\n } else if (change.removed) {\n ret.push('</del>');\n }\n }\n return ret.join('');\n}\nfunction escapeHTML(s) {\n var n = s;\n n = n.replace(/&/g, '&amp;');\n n = n.replace(/</g, '&lt;');\n n = n.replace(/>/g, '&gt;');\n n = n.replace(/\"/g, '&quot;');\n return n;\n}\n\nexport { Diff, applyPatch, applyPatches, canonicalize, convertChangesToDMP, convertChangesToXML, createPatch, createTwoFilesPatch, diffArrays, diffChars, diffCss, diffJson, diffLines, diffSentences, diffTrimmedLines, diffWords, diffWordsWithSpace, formatPatch, merge, parsePatch, reversePatch, structuredPatch };\n", "export function substituteVariables(\n prompt: string,\n variables: Record<string, string> | undefined\n): string {\n if (!variables || Object.keys(variables).length === 0) return prompt;\n return prompt.replace(/\\{\\{([\\w-]+)\\}\\}/g, (original, key: string) =>\n key in variables ? variables[key] : original\n );\n}\n", "import { randomUUID } from 'crypto';\nimport type {\n EvalRunResult,\n TestScenario,\n Template,\n Assertion\n} from '@wix/evalforge-types';\nimport type { ScenarioItem, EvaluationData } from './fetch-evaluation-data.js';\n\nexport interface EvaluationLoopCallbacks {\n runScenario: (\n scenario: TestScenario,\n template: Template | undefined,\n resolvedAssertions: Assertion[] | undefined\n ) => Promise<EvalRunResult>;\n addResult: (result: EvalRunResult) => Promise<void>;\n onProgress: (completed: number, total: number, iterLabel: string) => void;\n}\n\nexport interface EvaluationLoopResult {\n completedExecutions: number;\n totalExecutions: number;\n erroredExecutions: number;\n /**\n * `outputText` of the first errored iteration (already prefixed with\n * `\"Execution error: \"`). Captured so the entry-point can surface a\n * representative error on the eval run row when every iteration errors.\n */\n firstErrorMessage?: string;\n}\n\n/**\n * Run all scenarios with iteration support.\n *\n * Per-iteration execution errors are caught and recorded as failed results\n * (passRate: 0, outputText containing the error) rather than aborting the run.\n * This enables flakiness detection: all N iterations of every scenario complete\n * even when some iterations fail transiently.\n *\n * Infrastructure errors (e.g. failure to persist a result) are not caught and\n * will propagate up to abort the run.\n */\nexport async function runEvaluationLoop(\n scenarioItems: ScenarioItem[],\n evalData: EvaluationData,\n callbacks: EvaluationLoopCallbacks\n): Promise<EvaluationLoopResult> {\n const runsPerScenario = evalData.evalRun.runsPerScenario ?? 1;\n let completedExecutions = 0;\n let erroredExecutions = 0;\n let firstErrorMessage: string | undefined;\n const totalExecutions = scenarioItems.length * runsPerScenario;\n const targetId =\n evalData.evalRun.presetId ?? evalData.agent?.id ?? evalData.evalRun.id;\n const targetName = evalData.presetName ?? evalData.agent?.name ?? '';\n\n for (const { scenario, template, resolvedAssertions } of scenarioItems) {\n for (\n let iterationIndex = 0;\n iterationIndex < runsPerScenario;\n iterationIndex++\n ) {\n const iterLabel =\n runsPerScenario > 1\n ? ` [run ${iterationIndex + 1}/${runsPerScenario}]`\n : '';\n\n callbacks.onProgress(completedExecutions + 1, totalExecutions, iterLabel);\n\n let scenarioResult: EvalRunResult | null = null;\n try {\n scenarioResult = await callbacks.runScenario(\n scenario,\n template,\n resolvedAssertions\n );\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n console.error(\n `[Evaluator] Scenario iteration failed, recording as error result: \"${scenario.name}\"${iterLabel} \u2014 ${errorMsg}`\n );\n const errorResult: EvalRunResult = {\n id: randomUUID(),\n targetId,\n targetName,\n scenarioId: scenario.id,\n scenarioName: scenario.name,\n assertionResults: [],\n passed: 0,\n failed: 0,\n passRate: 0,\n duration: 0,\n outputText: `Execution error: ${errorMsg}`,\n startedAt: new Date().toISOString(),\n completedAt: new Date().toISOString(),\n iterationIndex\n };\n await callbacks.addResult(errorResult);\n erroredExecutions++;\n if (firstErrorMessage === undefined) {\n firstErrorMessage = errorResult.outputText;\n }\n }\n\n if (scenarioResult !== null) {\n await callbacks.addResult({ ...scenarioResult, iterationIndex });\n }\n\n completedExecutions++;\n }\n }\n\n return {\n completedExecutions,\n totalExecutions,\n erroredExecutions,\n firstErrorMessage\n };\n}\n", "/**\n * Error Reporter Module\n *\n * Provides comprehensive error reporting functionality for the evaluator.\n * Captures detailed error information including stack traces and context,\n * and sends it to the server so failures can be debugged without accessing\n * the remote machine logs.\n */\n\nimport { EvalStatus } from '@wix/evalforge-types';\nimport type { EvaluatorConfig } from './config.js';\nimport { createApiClient } from './api-client.js';\n\n/**\n * Detailed error information to send to the server.\n */\nexport interface ErrorDetails {\n /** Short error message */\n message: string;\n /** Full stack trace if available */\n stack?: string;\n /** Error name/type (e.g., \"TypeError\", \"Error\") */\n errorType?: string;\n /** Phase of execution where the error occurred */\n phase?: string;\n /** Additional context about what was happening */\n context?: Record<string, unknown>;\n /** Timestamp when the error occurred */\n timestamp: string;\n}\n\n/**\n * Format an error into detailed error information.\n *\n * @param error - The error to format\n * @param phase - The phase of execution (e.g., \"config\", \"fetch\", \"execution\")\n * @param context - Additional context about what was happening\n * @returns Formatted error details\n */\nexport function formatError(\n error: unknown,\n phase?: string,\n context?: Record<string, unknown>\n): ErrorDetails {\n const timestamp = new Date().toISOString();\n\n if (error instanceof Error) {\n return {\n message: error.message,\n stack: error.stack,\n errorType: error.constructor.name,\n phase,\n context,\n timestamp\n };\n }\n\n // Handle non-Error types (strings, objects, etc.)\n return {\n message: String(error),\n errorType: typeof error,\n phase,\n context,\n timestamp\n };\n}\n\n/**\n * Format error details into a string suitable for the jobError field.\n * Includes the message, stack trace, and context in a readable format.\n *\n * @param details - The error details to format\n * @returns A formatted string with all error information\n */\nexport function formatErrorForJobError(details: ErrorDetails): string {\n const parts: string[] = [];\n\n // Add phase context\n if (details.phase) {\n parts.push(`[Phase: ${details.phase}]`);\n }\n\n // Add error type and message\n if (details.errorType && details.errorType !== 'Error') {\n parts.push(`${details.errorType}: ${details.message}`);\n } else {\n parts.push(details.message);\n }\n\n // Add context if present\n if (details.context && Object.keys(details.context).length > 0) {\n parts.push(`\\nContext: ${JSON.stringify(details.context)}`);\n }\n\n // Add stack trace (first 5 lines to keep it manageable)\n if (details.stack) {\n const stackLines = details.stack.split('\\n').slice(0, 6);\n parts.push(`\\nStack:\\n${stackLines.join('\\n')}`);\n }\n\n return parts.join(' ');\n}\n\n/**\n * Report an error to the server.\n *\n * This function attempts to update the eval run status to FAILED\n * with detailed error information. If the update fails, it logs\n * the error to stderr.\n *\n * @param config - Evaluator configuration (can be partial if config loading failed)\n * @param projectId - The project ID\n * @param evalRunId - The eval run ID\n * @param error - The error to report\n * @param phase - The phase where the error occurred\n * @param context - Additional context\n */\nexport async function reportError(\n config: Partial<EvaluatorConfig> | null,\n projectId: string,\n evalRunId: string,\n error: unknown,\n phase?: string,\n context?: Record<string, unknown>\n): Promise<void> {\n const errorDetails = formatError(error, phase, context);\n const jobError = formatErrorForJobError(errorDetails);\n\n // Log to stderr for local debugging\n console.error('[EVALUATOR-ERROR]', JSON.stringify(errorDetails, null, 2));\n\n // If we don't have a valid config, we can't report to the server\n if (!config?.serverUrl) {\n console.error('[EVALUATOR-ERROR] Cannot report to server: no serverUrl');\n return;\n }\n\n try {\n const api = createApiClient(config.serverUrl, {\n apiPrefix: config.apiPrefix,\n routeHeader: config.routeHeader,\n authToken: config.authToken\n });\n\n await api.updateEvalRun(projectId, evalRunId, {\n status: EvalStatus.FAILED,\n completedAt: new Date().toISOString(),\n jobError,\n jobStatus: 'FAILED'\n });\n\n console.error('[EVALUATOR-ERROR] Successfully reported error to server');\n } catch (reportErr) {\n console.error(\n '[EVALUATOR-ERROR] Failed to report error to server:',\n reportErr\n );\n }\n}\n\n/**\n * Execution phases for error context.\n */\nexport const ExecutionPhase = {\n /** Environment diagnostics phase (runs before execution) */\n DIAGNOSTICS: 'diagnostics',\n CONFIG: 'config-loading',\n API_CLIENT: 'api-client-creation',\n FETCH_EVAL_RUN: 'fetch-eval-run',\n FETCH_SKILLS: 'fetch-skills',\n FETCH_AGENT: 'fetch-agent',\n FETCH_SCENARIOS: 'fetch-scenarios',\n VALIDATION: 'validation',\n PREPARE_WORKSPACE: 'prepare-workspace',\n EXECUTE_SKILL: 'execute-skill',\n EXECUTE_AGENT: 'execute-agent',\n CLAUDE_SDK_IMPORT: 'claude-sdk-import',\n CLAUDE_SDK_EXECUTION: 'claude-sdk-execution',\n ADD_RESULT: 'add-result',\n UPDATE_STATUS: 'update-status'\n} as const;\n"],
5
+ "mappings": "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",
6
+ "names": ["resolve", "v", "path", "d", "b", "__assign", "o", "exports", "maybeGetDocument", "document", "undefined", "maybeGetGlobal", "self", "global", "_globals", "require", "readCookie", "name", "cookieValue", "getCookieByName", "split", "loadCookies", "documentObj", "maybeGetDocument", "cookie", "decodeURIComponent", "filter", "trim", "_cookies", "require", "XSRF_TOKEN_COOKIE_NAME", "exports", "XSRF_HEADER_NAME", "csrf", "value", "readCookie", "_globals", "require", "X_WIX_BRAND_NAME", "xWixBrand", "value", "extractBrand", "globalObj", "maybeGetGlobal", "commonConfig", "brand", "_globals", "require", "consentPolicy", "tryResolveNativeAPI", "tryResolveJsSDK", "none", "globalObj", "maybeGetGlobal", "Wix", "Utils", "_getConsentPolicyHeader", "undefined", "consentPolicyManager", "authorization", "signedInstance", "isCI", "isNode", "process", "env", "TEAMCITY_VERSION", "BUILDKITE", "_process$versions", "versions", "node", "_utils", "require", "artifactId", "override", "artifactIdToUse", "isNode", "process", "env", "ARTIFACT_ID", "APP_NAME", "isCI", "_globals", "require", "IGNORE_KEYS", "COMMON_CONFIG_NAME", "MAP_KEYS", "bsi", "extractCommonConfigValues", "globalObj", "maybeGetGlobal", "commonConfigObj", "commonConfig", "res", "addedKeys", "Object", "keys", "forEach", "key", "newKey", "indexOf", "commonConfigValues", "value", "JSON", "stringify", "encodeURIComponent", "exports", "exports", "module", "exports", "module", "encode", "_base", "_interopRequireDefault", "require", "LINGUIST_HEADER_KEY", "linguistHeader", "lang", "locale", "isPrimaryLanguage", "signedInstance", "isMultilingualOptionsAreValid", "instanceId", "getInstanceIdFromSignedInstance", "undefined", "toString", "join", "test", "encodedInstance", "startsWith", "split", "JSON", "parse", "base64", "decode", "e", "Brand", "exports", "WixHeadersParsingError", "Error", "constructor", "header", "value", "JSON", "stringify", "exports", "WixHeadersValidationError", "type", "key", "_errors", "require", "assertBoolean", "key", "value", "WixHeadersValidationError", "assertString", "_csrf", "require", "_xWixBrand", "_consentPolicy", "_authorization", "_artifactId", "_commonConfig", "_linguist", "_domain", "exports", "MultilingualOptions", "_assert", "createHeaders", "opts", "csrf", "signedInstance", "verifyOptsOrThrow", "headers", "xWixBrand", "consentPolicy", "authorization", "artifactId", "commonConfig", "linguistHeader", "multilingualOptions", "push", "filter", "hdrs", "Object", "values", "every", "v", "reduce", "result", "assertBoolean", "assertString", "exports", "exports", "path", "exports", "module", "exports", "exports", "exports", "module", "require_utils", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "resolve", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "encode", "exports", "module", "exports", "module", "self", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "useColors", "exports", "module", "exports", "module", "exports", "module", "URL", "self", "resolveUrl", "relative", "exports", "module", "exports", "module", "resolve", "reject", "__importStar", "exports", "req", "resolve", "__importStar", "__exportStar", "exports", "__importStar", "__importDefault", "exports", "__importDefault", "resolve", "exports", "__importStar", "__importDefault", "exports", "exports", "module", "exports", "module", "require_cookies", "exports", "module", "path", "exports", "module", "exports", "module", "exports", "module", "resolve", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "resolve", "exports", "module", "exports", "module", "exports", "module", "require_axios", "exports", "module", "exports", "HttpClient", "exports", "exports", "exports", "exports", "import_evalforge_types", "path", "path", "path", "resolvePath", "ConverterType", "_a", "_a", "_a", "_a", "_a", "_a", "_a", "_a", "_a", "diff", "projectId", "path", "projectId", "evalRunId", "projectId", "evalRunId", "import_evalforge_types", "import_fs", "import_promises", "import_path", "import_path", "path", "path", "evalRunId", "workDir", "import_crypto", "import_evalforge_types", "import_evalforge_types", "import_promises", "import_path", "import_evalforge_github_client", "import_evalforge_types", "import_crypto", "import_promises", "import_path", "import_evalforge_types", "import_promises", "import_path", "import_os", "import_promises", "import_path", "import_promises", "import_path", "timestamp", "import_evalforge_types", "path", "isAssistantMessage", "writeFile", "errObj", "sdkErrorKeys", "import_evalforge_types", "import_child_process", "import_evalforge_types", "import_promises", "import_path", "writeSkillsToFilesystem", "writeSkillToFilesystem", "import_promises", "import_path", "AGENTS_DIR", "toAgentFilename", "writeSubAgentsToFilesystem", "import_os", "import_evalforge_types", "DEFAULT_MODEL", "import_evalforge_types", "import_crypto", "buildConversation", "timestamp", "import_promises", "import_path", "writeSubAgentsToFilesystem", "writeSkillsToFilesystem", "resolve", "buildConversation", "import_evalforge_types", "import_crypto", "import_evalforge_types", "cost", "body", "buildConversation", "PROVIDER_ANTHROPIC", "PROVIDER_GEMINI", "buildLLMTrace", "buildConversation", "import_fs", "import_path", "self", "path", "join", "diff", "value", "o", "path", "diffLines", "import_evalforge_types", "evalRunId", "evalRunId", "evaluateAssertionsBase", "import_crypto", "import_evalforge_types", "timestamp", "projectId", "evalRunId"]
7
7
  }