diff --git a/dist/cody-agent.js b/dist/cody-agent.js index bfe22d48..f3166610 100644 --- a/dist/cody-agent.js +++ b/dist/cody-agent.js @@ -939,7 +939,7 @@ var require_command = __commonJS({ "../node_modules/.pnpm/commander@11.1.0/node_modules/commander/lib/command.js"(exports2) { var EventEmitter3 = require("events").EventEmitter; var childProcess = require("child_process"); - var path19 = require("path"); + var path20 = require("path"); var fs7 = require("fs"); var process3 = require("process"); var { Argument: Argument2, humanReadableArgName } = require_argument(); @@ -1772,10 +1772,10 @@ Expecting one of '${allowedValues.join("', '")}'`); let launchWithNode = false; const sourceExt = [".js", ".ts", ".tsx", ".mjs", ".cjs"]; function findFile(baseDir, baseName) { - const localBin = path19.resolve(baseDir, baseName); + const localBin = path20.resolve(baseDir, baseName); if (fs7.existsSync(localBin)) return localBin; - if (sourceExt.includes(path19.extname(baseName))) + if (sourceExt.includes(path20.extname(baseName))) return void 0; const foundExt = sourceExt.find((ext2) => fs7.existsSync(`${localBin}${ext2}`)); if (foundExt) @@ -1793,19 +1793,19 @@ Expecting one of '${allowedValues.join("', '")}'`); } catch (err3) { resolvedScriptPath = this._scriptPath; } - executableDir = path19.resolve(path19.dirname(resolvedScriptPath), executableDir); + executableDir = path20.resolve(path20.dirname(resolvedScriptPath), executableDir); } if (executableDir) { let localFile = findFile(executableDir, executableFile); if (!localFile && !subcommand._executableFile && this._scriptPath) { - const legacyName = path19.basename(this._scriptPath, path19.extname(this._scriptPath)); + const legacyName = path20.basename(this._scriptPath, path20.extname(this._scriptPath)); if (legacyName !== this._name) { localFile = findFile(executableDir, `${legacyName}-${subcommand._name}`); } } executableFile = localFile || executableFile; } - launchWithNode = sourceExt.includes(path19.extname(executableFile)); + launchWithNode = sourceExt.includes(path20.extname(executableFile)); let proc2; if (process3.platform !== "win32") { if (launchWithNode) { @@ -2607,7 +2607,7 @@ Expecting one of '${allowedValues.join("', '")}'`); * @return {Command} */ nameFromFilename(filename) { - this._name = path19.basename(filename, path19.extname(filename)); + this._name = path20.basename(filename, path20.extname(filename)); return this; } /** @@ -2621,10 +2621,10 @@ Expecting one of '${allowedValues.join("', '")}'`); * @param {string} [path] * @return {string|null|Command} */ - executableDir(path20) { - if (path20 === void 0) + executableDir(path21) { + if (path21 === void 0) return this._executableDir; - this._executableDir = path20; + this._executableDir = path21; return this; } /** @@ -2934,70 +2934,95 @@ var init_environments = __esm({ } }); -// ../lib/shared/src/chat-models/index.ts -function getProviderName(name) { - const providerName = name.toLowerCase(); - switch (providerName) { - case "anthropic": - return "Anthropic"; - case "openai": - return "OpenAI"; - default: - return providerName; - } -} -var defaultDotComChatModels, ChatModelProvider; -var init_chat_models = __esm({ - "../lib/shared/src/chat-models/index.ts"() { +// ../lib/shared/src/models/dotcom.ts +var DEFAULT_DOT_COM_MODELS; +var init_dotcom = __esm({ + "../lib/shared/src/models/dotcom.ts"() { "use strict"; - init_environments(); - defaultDotComChatModels = [ + DEFAULT_DOT_COM_MODELS = [ { title: "Claude 2.0", model: "anthropic/claude-2.0", provider: "Anthropic", default: true, - codyProOnly: false + codyProOnly: false, + usage: ["chat" /* Chat */, "edit" /* Edit */] }, { title: "Claude 2.1 Preview", model: "anthropic/claude-2.1", provider: "Anthropic", default: false, - codyProOnly: true + codyProOnly: true, + usage: ["chat" /* Chat */, "edit" /* Edit */] }, { title: "Claude Instant", model: "anthropic/claude-instant-1.2", provider: "Anthropic", default: false, - codyProOnly: true + codyProOnly: true, + usage: ["chat" /* Chat */, "edit" /* Edit */] }, { - title: "ChatGPT 3.5 Turbo", + title: "GPT-3.5 Turbo", model: "openai/gpt-3.5-turbo", provider: "OpenAI", default: false, - codyProOnly: true + codyProOnly: true, + usage: ["chat" /* Chat */, "edit" /* Edit */] }, { - title: "ChatGPT 4 Turbo Preview", + title: "GPT-4 Turbo Preview", model: "openai/gpt-4-1106-preview", provider: "OpenAI", default: false, - codyProOnly: true + codyProOnly: true, + usage: ["chat" /* Chat */, "edit" /* Edit */] }, { title: "Mixtral 8x7B", model: "fireworks/accounts/fireworks/models/mixtral-8x7b-instruct", provider: "Mistral", default: false, - codyProOnly: true + codyProOnly: true, + // TODO: Improve prompt for Mixtral + Edit to see if we can use it there too. + usage: ["chat" /* Chat */] } ]; - ChatModelProvider = class _ChatModelProvider { - constructor(model, isDefaultModel = true) { + } +}); + +// ../lib/shared/src/models/utils.ts +function getProviderName(name) { + const providerName = name.toLowerCase(); + switch (providerName) { + case "anthropic": + return "Anthropic"; + case "openai": + return "OpenAI"; + default: + return providerName; + } +} +var init_utils = __esm({ + "../lib/shared/src/models/utils.ts"() { + "use strict"; + } +}); + +// ../lib/shared/src/models/index.ts +var ModelProvider; +var init_models = __esm({ + "../lib/shared/src/models/index.ts"() { + "use strict"; + init_environments(); + init_dotcom(); + init_utils(); + ModelProvider = class _ModelProvider { + constructor(model, usage, isDefaultModel = true) { this.model = model; + this.usage = usage; const splittedModel = model.split("/"); this.provider = getProviderName(splittedModel[0]); this.title = splittedModel[1]?.replaceAll("-", " "); @@ -3010,29 +3035,29 @@ var init_chat_models = __esm({ // Providers available for non-dotcom instances static privateProviders = /* @__PURE__ */ new Map(); // Providers available for dotcom instances - static dotComProviders = defaultDotComChatModels; + static dotComProviders = DEFAULT_DOT_COM_MODELS; /** - * Adds a new chat model provider, instantiated from the given model string, - * to the internal providers set. This allows new chat models to be added and + * Adds a new model provider, instantiated from the given model string, + * to the internal providers set. This allows new models to be added and * made available for use. */ static add(provider) { - if (_ChatModelProvider.privateProviders.size) { - _ChatModelProvider.privateProviders.clear(); + if (_ModelProvider.privateProviders.size) { + _ModelProvider.privateProviders.clear(); } - _ChatModelProvider.privateProviders.set(provider.model.trim(), provider); + _ModelProvider.privateProviders.set(provider.model.trim(), provider); } /** - * Gets the chat model providers based on the endpoint and current model. + * Gets the model providers based on the endpoint and current model. * If endpoint is a dotcom endpoint, returns dotComProviders. * Otherwise returns providers. * If currentModel is provided, sets it as the default model. */ - static get(endpoint, currentModel) { + static get(type, endpoint, currentModel) { const isDotComUser = !endpoint || endpoint && isDotCom(endpoint); - const models = isDotComUser ? _ChatModelProvider.dotComProviders : Array.from(_ChatModelProvider.privateProviders.values()); + const models = (isDotComUser ? _ModelProvider.dotComProviders : Array.from(_ModelProvider.privateProviders.values())).filter((model) => model.usage.includes(type)); if (!isDotComUser) { - return Array.from(_ChatModelProvider.privateProviders.values()); + return models; } return models.map((model) => { return { @@ -3974,14 +3999,14 @@ var require_url_state_machine = __commonJS({ return url2.replace(/\u0009|\u000A|\u000D/g, ""); } function shortenPath(url2) { - const path19 = url2.path; - if (path19.length === 0) { + const path20 = url2.path; + if (path20.length === 0) { return; } - if (url2.scheme === "file" && path19.length === 1 && isNormalizedWindowsDriveLetter(path19[0])) { + if (url2.scheme === "file" && path20.length === 1 && isNormalizedWindowsDriveLetter(path20[0])) { return; } - path19.pop(); + path20.pop(); } function includesCredentials(url2) { return url2.username !== "" || url2.password !== ""; @@ -7808,12 +7833,12 @@ var require_status = __commonJS({ "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.SpanStatusCode = void 0; - var SpanStatusCode2; - (function(SpanStatusCode3) { - SpanStatusCode3[SpanStatusCode3["UNSET"] = 0] = "UNSET"; - SpanStatusCode3[SpanStatusCode3["OK"] = 1] = "OK"; - SpanStatusCode3[SpanStatusCode3["ERROR"] = 2] = "ERROR"; - })(SpanStatusCode2 = exports2.SpanStatusCode || (exports2.SpanStatusCode = {})); + var SpanStatusCode4; + (function(SpanStatusCode5) { + SpanStatusCode5[SpanStatusCode5["UNSET"] = 0] = "UNSET"; + SpanStatusCode5[SpanStatusCode5["OK"] = 1] = "OK"; + SpanStatusCode5[SpanStatusCode5["ERROR"] = 2] = "ERROR"; + })(SpanStatusCode4 = exports2.SpanStatusCode || (exports2.SpanStatusCode = {})); } }); @@ -8373,23 +8398,23 @@ function wrapInActiveSpan(name, fn) { return tracer.startActiveSpan(name, (span) => { const handleSuccess = (response) => { span.setStatus({ code: import_api.SpanStatusCode.OK }); + span.end(); return response; }; - const catchError = (error) => { + const handleError = (error) => { span.recordException(error); span.setStatus({ code: import_api.SpanStatusCode.ERROR }); + span.end(); throw error; }; try { - const response = fn(); - if (response instanceof Promise) { - return response.then(handleSuccess, catchError); + const response = fn(span); + if (typeof response === "object" && response !== null && "then" in response) { + return response.then(handleSuccess, handleError); } return handleSuccess(response); } catch (error) { - return catchError(error); - } finally { - span.end(); + return handleError(error); } }); } @@ -8400,6 +8425,12 @@ function addTraceparent(headers) { } }); } +function recordSpanWithError(span, error) { + span.recordException(error); + span.setStatus({ code: import_api.SpanStatusCode.ERROR }); + span.end(); + return error; +} var import_api, INSTRUMENTATION_SCOPE_NAME, INSTRUMENTATION_SCOPE_VERSION, tracer; var init_tracing = __esm({ "../lib/shared/src/tracing/index.ts"() { @@ -8407,7 +8438,10 @@ var init_tracing = __esm({ import_api = __toESM(require_src()); INSTRUMENTATION_SCOPE_NAME = "cody"; INSTRUMENTATION_SCOPE_VERSION = "0.1"; - tracer = import_api.default.trace.getTracer(INSTRUMENTATION_SCOPE_NAME, INSTRUMENTATION_SCOPE_VERSION); + tracer = import_api.default.trace.getTracer( + INSTRUMENTATION_SCOPE_NAME, + INSTRUMENTATION_SCOPE_VERSION + ); } }); @@ -8465,7 +8499,7 @@ git output: ${cloneURL}` } } var isError2; -var init_utils = __esm({ +var init_utils2 = __esm({ "../lib/shared/src/utils.ts"() { "use strict"; init_logger(); @@ -10022,11 +10056,11 @@ var require_lodash = __commonJS({ return isFunction2(object[key]); }); } - function baseGet(object, path19) { - path19 = castPath(path19, object); - var index = 0, length = path19.length; + function baseGet(object, path20) { + path20 = castPath(path20, object); + var index = 0, length = path20.length; while (object != null && index < length) { - object = object[toKey(path19[index++])]; + object = object[toKey(path20[index++])]; } return index && index == length ? object : undefined2; } @@ -10090,10 +10124,10 @@ var require_lodash = __commonJS({ }); return accumulator; } - function baseInvoke(object, path19, args3) { - path19 = castPath(path19, object); - object = parent(object, path19); - var func2 = object == null ? object : object[toKey(last(path19))]; + function baseInvoke(object, path20, args3) { + path20 = castPath(path20, object); + object = parent(object, path20); + var func2 = object == null ? object : object[toKey(last(path20))]; return func2 == null ? undefined2 : apply(func2, object, args3); } function baseIsArguments(value) { @@ -10249,13 +10283,13 @@ var require_lodash = __commonJS({ return object === source || baseIsMatch(object, source, matchData); }; } - function baseMatchesProperty(path19, srcValue) { - if (isKey(path19) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path19), srcValue); + function baseMatchesProperty(path20, srcValue) { + if (isKey(path20) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path20), srcValue); } return function(object) { - var objValue = get(object, path19); - return objValue === undefined2 && objValue === srcValue ? hasIn(object, path19) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + var objValue = get(object, path20); + return objValue === undefined2 && objValue === srcValue ? hasIn(object, path20) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); }; } function baseMerge(object, source, srcIndex, customizer, stack) { @@ -10352,23 +10386,23 @@ var require_lodash = __commonJS({ }); } function basePick(object, paths) { - return basePickBy(object, paths, function(value, path19) { - return hasIn(object, path19); + return basePickBy(object, paths, function(value, path20) { + return hasIn(object, path20); }); } function basePickBy(object, paths, predicate) { var index = -1, length = paths.length, result2 = {}; while (++index < length) { - var path19 = paths[index], value = baseGet(object, path19); - if (predicate(value, path19)) { - baseSet(result2, castPath(path19, object), value); + var path20 = paths[index], value = baseGet(object, path20); + if (predicate(value, path20)) { + baseSet(result2, castPath(path20, object), value); } } return result2; } - function basePropertyDeep(path19) { + function basePropertyDeep(path20) { return function(object) { - return baseGet(object, path19); + return baseGet(object, path20); }; } function basePullAll(array, values2, iteratee2, comparator) { @@ -10442,14 +10476,14 @@ var require_lodash = __commonJS({ var array = values(collection); return shuffleSelf(array, baseClamp(n, 0, array.length)); } - function baseSet(object, path19, value, customizer) { + function baseSet(object, path20, value, customizer) { if (!isObject3(object)) { return object; } - path19 = castPath(path19, object); - var index = -1, length = path19.length, lastIndex = length - 1, nested = object; + path20 = castPath(path20, object); + var index = -1, length = path20.length, lastIndex = length - 1, nested = object; while (nested != null && ++index < length) { - var key = toKey(path19[index]), newValue = value; + var key = toKey(path20[index]), newValue = value; if (key === "__proto__" || key === "constructor" || key === "prototype") { return object; } @@ -10457,7 +10491,7 @@ var require_lodash = __commonJS({ var objValue = nested[key]; newValue = customizer ? customizer(objValue, key, nested) : undefined2; if (newValue === undefined2) { - newValue = isObject3(objValue) ? objValue : isIndex(path19[index + 1]) ? [] : {}; + newValue = isObject3(objValue) ? objValue : isIndex(path20[index + 1]) ? [] : {}; } } assignValue(nested, key, newValue); @@ -10623,13 +10657,13 @@ var require_lodash = __commonJS({ } return result2; } - function baseUnset(object, path19) { - path19 = castPath(path19, object); - object = parent(object, path19); - return object == null || delete object[toKey(last(path19))]; + function baseUnset(object, path20) { + path20 = castPath(path20, object); + object = parent(object, path20); + return object == null || delete object[toKey(last(path20))]; } - function baseUpdate(object, path19, updater, customizer) { - return baseSet(object, path19, updater(baseGet(object, path19)), customizer); + function baseUpdate(object, path20, updater, customizer) { + return baseSet(object, path20, updater(baseGet(object, path20)), customizer); } function baseWhile(array, predicate, isDrop, fromRight) { var length = array.length, index = fromRight ? length : -1; @@ -11512,11 +11546,11 @@ var require_lodash = __commonJS({ var match2 = source.match(reWrapDetails); return match2 ? match2[1].split(reSplitDetails) : []; } - function hasPath(object, path19, hasFunc) { - path19 = castPath(path19, object); - var index = -1, length = path19.length, result2 = false; + function hasPath(object, path20, hasFunc) { + path20 = castPath(path20, object); + var index = -1, length = path20.length, result2 = false; while (++index < length) { - var key = toKey(path19[index]); + var key = toKey(path20[index]); if (!(result2 = object != null && hasFunc(object, key))) { break; } @@ -11718,8 +11752,8 @@ var require_lodash = __commonJS({ return apply(func2, this, otherArgs); }; } - function parent(object, path19) { - return path19.length < 2 ? object : baseGet(object, baseSlice(path19, 0, -1)); + function parent(object, path20) { + return path20.length < 2 ? object : baseGet(object, baseSlice(path20, 0, -1)); } function reorder(array, indexes) { var arrLength = array.length, length = nativeMin(indexes.length, arrLength), oldArray = copyArray(array); @@ -12354,10 +12388,10 @@ var require_lodash = __commonJS({ } return isString2(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1; } - var invokeMap = baseRest(function(collection, path19, args3) { - var index = -1, isFunc = typeof path19 == "function", result2 = isArrayLike(collection) ? Array2(collection.length) : []; + var invokeMap = baseRest(function(collection, path20, args3) { + var index = -1, isFunc = typeof path20 == "function", result2 = isArrayLike(collection) ? Array2(collection.length) : []; baseEach(collection, function(value) { - result2[++index] = isFunc ? apply(path19, value, args3) : baseInvoke(value, path19, args3); + result2[++index] = isFunc ? apply(path20, value, args3) : baseInvoke(value, path20, args3); }); return result2; }); @@ -13009,15 +13043,15 @@ var require_lodash = __commonJS({ function functionsIn(object) { return object == null ? [] : baseFunctions(object, keysIn(object)); } - function get(object, path19, defaultValue) { - var result2 = object == null ? undefined2 : baseGet(object, path19); + function get(object, path20, defaultValue) { + var result2 = object == null ? undefined2 : baseGet(object, path20); return result2 === undefined2 ? defaultValue : result2; } - function has(object, path19) { - return object != null && hasPath(object, path19, baseHas); + function has(object, path20) { + return object != null && hasPath(object, path20, baseHas); } - function hasIn(object, path19) { - return object != null && hasPath(object, path19, baseHasIn); + function hasIn(object, path20) { + return object != null && hasPath(object, path20, baseHasIn); } var invert = createInverter(function(result2, value, key) { if (value != null && typeof value.toString != "function") { @@ -13070,10 +13104,10 @@ var require_lodash = __commonJS({ return result2; } var isDeep = false; - paths = arrayMap(paths, function(path19) { - path19 = castPath(path19, object); - isDeep || (isDeep = path19.length > 1); - return path19; + paths = arrayMap(paths, function(path20) { + path20 = castPath(path20, object); + isDeep || (isDeep = path20.length > 1); + return path20; }); copyObject(object, getAllKeysIn(object), result2); if (isDeep) { @@ -13099,19 +13133,19 @@ var require_lodash = __commonJS({ return [prop]; }); predicate = getIteratee(predicate); - return basePickBy(object, props, function(value, path19) { - return predicate(value, path19[0]); + return basePickBy(object, props, function(value, path20) { + return predicate(value, path20[0]); }); } - function result(object, path19, defaultValue) { - path19 = castPath(path19, object); - var index = -1, length = path19.length; + function result(object, path20, defaultValue) { + path20 = castPath(path20, object); + var index = -1, length = path20.length; if (!length) { length = 1; object = undefined2; } while (++index < length) { - var value = object == null ? undefined2 : object[toKey(path19[index])]; + var value = object == null ? undefined2 : object[toKey(path20[index])]; if (value === undefined2) { index = length; value = defaultValue; @@ -13120,12 +13154,12 @@ var require_lodash = __commonJS({ } return object; } - function set(object, path19, value) { - return object == null ? object : baseSet(object, path19, value); + function set(object, path20, value) { + return object == null ? object : baseSet(object, path20, value); } - function setWith(object, path19, value, customizer) { + function setWith(object, path20, value, customizer) { customizer = typeof customizer == "function" ? customizer : undefined2; - return object == null ? object : baseSet(object, path19, value, customizer); + return object == null ? object : baseSet(object, path20, value, customizer); } var toPairs = createToPairs(keys); var toPairsIn = createToPairs(keysIn); @@ -13147,15 +13181,15 @@ var require_lodash = __commonJS({ }); return accumulator; } - function unset(object, path19) { - return object == null ? true : baseUnset(object, path19); + function unset(object, path20) { + return object == null ? true : baseUnset(object, path20); } - function update(object, path19, updater) { - return object == null ? object : baseUpdate(object, path19, castFunction(updater)); + function update(object, path20, updater) { + return object == null ? object : baseUpdate(object, path20, castFunction(updater)); } - function updateWith(object, path19, updater, customizer) { + function updateWith(object, path20, updater, customizer) { customizer = typeof customizer == "function" ? customizer : undefined2; - return object == null ? object : baseUpdate(object, path19, castFunction(updater), customizer); + return object == null ? object : baseUpdate(object, path20, castFunction(updater), customizer); } function values(object) { return object == null ? [] : baseValues(object, keys(object)); @@ -13331,7 +13365,7 @@ var require_lodash = __commonJS({ target = baseToString(target); return string.slice(position, position + target.length) == target; } - function template(string, options2, guard) { + function template2(string, options2, guard) { var settings = lodash.templateSettings; if (guard && isIterateeCall(string, options2, guard)) { options2 = undefined2; @@ -13536,17 +13570,17 @@ var require_lodash = __commonJS({ function matches(source) { return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); } - function matchesProperty(path19, srcValue) { - return baseMatchesProperty(path19, baseClone(srcValue, CLONE_DEEP_FLAG)); + function matchesProperty(path20, srcValue) { + return baseMatchesProperty(path20, baseClone(srcValue, CLONE_DEEP_FLAG)); } - var method = baseRest(function(path19, args3) { + var method = baseRest(function(path20, args3) { return function(object) { - return baseInvoke(object, path19, args3); + return baseInvoke(object, path20, args3); }; }); var methodOf = baseRest(function(object, args3) { - return function(path19) { - return baseInvoke(object, path19, args3); + return function(path20) { + return baseInvoke(object, path20, args3); }; }); function mixin(object, source, options2) { @@ -13593,12 +13627,12 @@ var require_lodash = __commonJS({ var over = createOver(arrayMap); var overEvery = createOver(arrayEvery); var overSome = createOver(arraySome); - function property(path19) { - return isKey(path19) ? baseProperty(toKey(path19)) : basePropertyDeep(path19); + function property(path20) { + return isKey(path20) ? baseProperty(toKey(path20)) : basePropertyDeep(path20); } function propertyOf(object) { - return function(path19) { - return object == null ? undefined2 : baseGet(object, path19); + return function(path20) { + return object == null ? undefined2 : baseGet(object, path20); }; } var range = createRange(); @@ -13966,7 +14000,7 @@ var require_lodash = __commonJS({ lodash.subtract = subtract2; lodash.sum = sum; lodash.sumBy = sumBy; - lodash.template = template; + lodash.template = template2; lodash.times = times; lodash.toFinite = toFinite; lodash.toInteger = toInteger; @@ -14051,12 +14085,12 @@ var require_lodash = __commonJS({ LazyWrapper.prototype.findLast = function(predicate) { return this.reverse().find(predicate); }; - LazyWrapper.prototype.invokeMap = baseRest(function(path19, args3) { - if (typeof path19 == "function") { + LazyWrapper.prototype.invokeMap = baseRest(function(path20, args3) { + if (typeof path20 == "function") { return new LazyWrapper(this); } return this.map(function(value) { - return baseInvoke(value, path19, args3); + return baseInvoke(value, path20, args3); }); }); LazyWrapper.prototype.reject = function(predicate) { @@ -14226,7 +14260,7 @@ var init_client = __esm({ import_vscode_uri = __toESM(require_umd()); init_logger(); init_tracing(); - init_utils(); + init_utils2(); init_environments(); init_queries(); init_url(); @@ -14713,7 +14747,7 @@ var init_client = __esm({ refreshConfigFeatures() { const previousConfigFeatures = this.configFeatures; this.configFeatures = this.fetchConfigFeatures().catch((error) => { - if (!error.message.includes("FetchError")) { + if (!(error.message.includes("FetchError") || error.message.includes("Cannot query field"))) { logError("ConfigFeaturesSingleton", "refreshConfigFeatures", error.message); } return previousConfigFeatures; @@ -14800,136 +14834,6 @@ var init_messages = __esm({ } }); -// ../lib/shared/src/chat/transcript/index.ts -function truncatePrompt(messages2, maxTokens) { - const newPromptMessages = []; - let availablePromptTokensBudget = maxTokens; - for (let i = messages2.length - 1; i >= 1; i -= 2) { - const humanMessage = messages2[i - 1]; - const botMessage = messages2[i]; - const combinedTokensUsage = estimateTokensUsage(humanMessage) + estimateTokensUsage(botMessage); - if (combinedTokensUsage <= availablePromptTokensBudget) { - newPromptMessages.push(botMessage, humanMessage); - availablePromptTokensBudget -= combinedTokensUsage; - } else { - break; - } - } - return newPromptMessages.reverse(); -} -function estimateTokensUsage(message) { - return Math.round((message.text || "").length / CHARS_PER_TOKEN); -} -var Transcript; -var init_transcript = __esm({ - "../lib/shared/src/chat/transcript/index.ts"() { - "use strict"; - init_constants(); - init_prompt_mixin(); - init_messages(); - Transcript = class { - interactions = []; - chatModel = void 0; - chatTitle = void 0; - constructor(interactions = [], chatModel, title) { - this.interactions = interactions; - this.chatModel = chatModel; - this.chatTitle = title || this.getLastInteraction()?.getHumanMessage()?.displayText; - } - get isEmpty() { - return this.interactions.length === 0; - } - addInteraction(interaction) { - if (!interaction) { - return; - } - this.interactions.push(interaction); - } - getLastInteraction() { - return this.interactions.length > 0 ? this.interactions.at(-1) : null; - } - addAssistantResponse(text, displayText) { - this.getLastInteraction()?.setAssistantMessage({ - speaker: "assistant", - text, - displayText - }); - } - /** - * Adds an error div to the assistant response. If the assistant has collected - * some response before, we will add the error message after it. - * @param error The error to be displayed. - */ - addErrorAsAssistantResponse(error) { - const lastInteraction = this.getLastInteraction(); - if (!lastInteraction) { - return; - } - lastInteraction.setAssistantMessage({ - ...lastInteraction.getAssistantMessage(), - text: "Failed to generate a response due to server error.", - // Serializing normal errors will lose name/message so - // just read them off manually and attach the rest of the fields. - error: errorToChatError(error) - }); - } - async getPromptForLastInteraction(preamble = [], maxPromptLength = MAX_AVAILABLE_PROMPT_LENGTH, onlyHumanMessages = false) { - if (this.interactions.length === 0) { - return { prompt: [], contextFiles: [], preciseContexts: [] }; - } - const messages2 = []; - for (let index = 0; index < this.interactions.length; index++) { - const interaction = this.interactions[index]; - const humanMessage = PromptMixin.mixInto(interaction.getHumanMessage()); - const assistantMessage = interaction.getAssistantMessage(); - const contextMessages = await interaction.getFullContext(); - if (index === this.interactions.length - 1 && !onlyHumanMessages) { - messages2.push(...contextMessages, humanMessage, assistantMessage); - } else { - messages2.push(humanMessage, assistantMessage); - } - } - const preambleTokensUsage = preamble.reduce( - (acc, message) => acc + estimateTokensUsage(message), - 0 - ); - let truncatedMessages = truncatePrompt(messages2, maxPromptLength - preambleTokensUsage); - const contextFiles = []; - const preciseContexts = []; - for (const msg of truncatedMessages) { - const contextFile = msg.file; - if (contextFile) { - contextFiles.push(contextFile); - } - const preciseContext = msg.preciseContext; - if (preciseContext) { - preciseContexts.push(preciseContext); - } - } - truncatedMessages = truncatedMessages.map(({ speaker, text }) => ({ speaker, text })); - return { - prompt: [...preamble, ...truncatedMessages], - contextFiles, - preciseContexts - }; - } - setUsedContextFilesForLastInteraction(contextFiles, preciseContexts = []) { - const lastInteraction = this.interactions.at(-1); - if (!lastInteraction) { - throw new Error("Cannot set context files for empty transcript"); - } - lastInteraction.setUsedContext(contextFiles, preciseContexts); - } - toChat() { - return this.interactions.flatMap((interaction) => interaction.toChat()); - } - reset() { - this.interactions = []; - } - }; - } -}); - // ../node_modules/.pnpm/ignore@5.2.4/node_modules/ignore/index.js var require_ignore = __commonJS({ "../node_modules/.pnpm/ignore@5.2.4/node_modules/ignore/index.js"(exports2, module2) { @@ -15146,17 +15050,17 @@ var require_ignore = __commonJS({ var throwError = (message, Ctor) => { throw new Ctor(message); }; - var checkPath = (path19, originalPath, doThrow) => { - if (!isString2(path19)) { + var checkPath = (path20, originalPath, doThrow) => { + if (!isString2(path20)) { return doThrow( `path must be a string, but got \`${originalPath}\``, TypeError ); } - if (!path19) { + if (!path20) { return doThrow(`path must not be empty`, TypeError); } - if (checkPath.isNotRelative(path19)) { + if (checkPath.isNotRelative(path20)) { const r = "`path.relative()`d"; return doThrow( `path should be a ${r} string, but got "${originalPath}"`, @@ -15165,7 +15069,7 @@ var require_ignore = __commonJS({ } return true; }; - var isNotRelative = (path19) => REGEX_TEST_INVALID_PATH.test(path19); + var isNotRelative = (path20) => REGEX_TEST_INVALID_PATH.test(path20); checkPath.isNotRelative = isNotRelative; checkPath.convert = (p) => p; var Ignore2 = class { @@ -15224,7 +15128,7 @@ var require_ignore = __commonJS({ // setting `checkUnignored` to `false` could reduce additional // path matching. // @returns {TestResult} true if a file is ignored - _testOne(path19, checkUnignored) { + _testOne(path20, checkUnignored) { let ignored = false; let unignored = false; this._rules.forEach((rule) => { @@ -15232,7 +15136,7 @@ var require_ignore = __commonJS({ if (unignored === negative && ignored !== unignored || negative && !ignored && !unignored && !checkUnignored) { return; } - const matched = rule.regex.test(path19); + const matched = rule.regex.test(path20); if (matched) { ignored = !negative; unignored = negative; @@ -15245,24 +15149,24 @@ var require_ignore = __commonJS({ } // @returns {TestResult} _test(originalPath, cache, checkUnignored, slices) { - const path19 = originalPath && checkPath.convert(originalPath); + const path20 = originalPath && checkPath.convert(originalPath); checkPath( - path19, + path20, originalPath, this._allowRelativePaths ? RETURN_FALSE : throwError ); - return this._t(path19, cache, checkUnignored, slices); + return this._t(path20, cache, checkUnignored, slices); } - _t(path19, cache, checkUnignored, slices) { - if (path19 in cache) { - return cache[path19]; + _t(path20, cache, checkUnignored, slices) { + if (path20 in cache) { + return cache[path20]; } if (!slices) { - slices = path19.split(SLASH); + slices = path20.split(SLASH); } slices.pop(); if (!slices.length) { - return cache[path19] = this._testOne(path19, checkUnignored); + return cache[path20] = this._testOne(path20, checkUnignored); } const parent = this._t( slices.join(SLASH) + SLASH, @@ -15270,24 +15174,24 @@ var require_ignore = __commonJS({ checkUnignored, slices ); - return cache[path19] = parent.ignored ? parent : this._testOne(path19, checkUnignored); + return cache[path20] = parent.ignored ? parent : this._testOne(path20, checkUnignored); } - ignores(path19) { - return this._test(path19, this._ignoreCache, false).ignored; + ignores(path20) { + return this._test(path20, this._ignoreCache, false).ignored; } createFilter() { - return (path19) => !this.ignores(path19); + return (path20) => !this.ignores(path20); } filter(paths) { return makeArray(paths).filter(this.createFilter()); } // @returns {TestResult} - test(path19) { - return this._test(path19, this._testCache, true); + test(path20) { + return this._test(path20, this._testCache, true); } }; var factory = (options2) => new Ignore2(options2); - var isPathValid = (path19) => checkPath(path19 && checkPath.convert(path19), path19, RETURN_FALSE); + var isPathValid = (path20) => checkPath(path20 && checkPath.convert(path20), path20, RETURN_FALSE); factory.isPathValid = isPathValid; factory.default = factory; module2.exports = factory; @@ -15298,7 +15202,7 @@ var require_ignore = __commonJS({ const makePosix = (str) => /^\\\\\?\\/.test(str) || /["<>|\u0000-\u001F]+/u.test(str) ? str : str.replace(/\\/g, "/"); checkPath.convert = makePosix; const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i; - checkPath.isNotRelative = (path19) => REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path19) || isNotRelative(path19); + checkPath.isNotRelative = (path20) => REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path20) || isNotRelative(path20); } } }); @@ -15315,9 +15219,12 @@ function isWindows() { } return false; } +var isPlatform, isMac; var init_platform = __esm({ "../lib/shared/src/common/platform.ts"() { "use strict"; + isPlatform = (platform5) => process.platform === platform5; + isMac = () => isPlatform("darwin"); } }); @@ -15328,50 +15235,50 @@ function pathFunctionsForURI(uri, isWindows2 = isWindows()) { function pathFunctions(isWindows2) { const sep2 = isWindows2 ? "\\" : "/"; const f = { - dirname(path19) { - if (path19 === "") { + dirname(path20) { + if (path20 === "") { return "."; } - if (isWindows2 && isDriveLetter(path19)) { - return path19; + if (isWindows2 && isDriveLetter(path20)) { + return path20; } - if (path19.endsWith(sep2)) { - path19 = path19.slice(0, -1); + if (path20.endsWith(sep2)) { + path20 = path20.slice(0, -1); } - if (isWindows2 && isDriveLetter(path19)) { - return path19 + sep2; + if (isWindows2 && isDriveLetter(path20)) { + return path20 + sep2; } - if (path19 === "") { + if (path20 === "") { return sep2; } - const i = path19.lastIndexOf(sep2); + const i = path20.lastIndexOf(sep2); if (i === -1) { return "."; } if (i === 0) { return sep2; } - path19 = path19.slice(0, i); - if (isWindows2 && isDriveLetter(path19)) { - return path19 + sep2; + path20 = path20.slice(0, i); + if (isWindows2 && isDriveLetter(path20)) { + return path20 + sep2; } - return path19; + return path20; }, - basename(path19, suffix) { - if (path19.endsWith(sep2)) { - path19 = path19.slice(0, -1); + basename(path20, suffix) { + if (path20.endsWith(sep2)) { + path20 = path20.slice(0, -1); } - if (isWindows2 && isDriveLetter(path19)) { + if (isWindows2 && isDriveLetter(path20)) { return ""; } - path19 = path19.split(sep2).at(-1) ?? ""; - if (suffix && path19.endsWith(suffix)) { - path19 = path19.slice(0, -suffix.length); + path20 = path20.split(sep2).at(-1) ?? ""; + if (suffix && path20.endsWith(suffix)) { + path20 = path20.slice(0, -suffix.length); } - return path19; + return path20; }, - extname(path19) { - const basename4 = f.basename(path19); + extname(path20) { + const basename4 = f.basename(path20); const i = basename4.lastIndexOf("."); if (i === 0 || i === -1) { return ""; @@ -15382,8 +15289,8 @@ function pathFunctions(isWindows2) { }; return f; } -function isDriveLetter(path19) { - return /^[A-Za-z]:$/.test(path19); +function isDriveLetter(path20) { + return /^[A-Za-z]:$/.test(path20); } function posixAndURIPathsRelative(from, to) { from = from.replaceAll(/\/{2,}/g, "/"); @@ -15567,8 +15474,9 @@ var init_ignore_helper = __esm({ const effectiveDir = ignoreFileEffectiveDirectory(ignoreFile.uri); const relativeFolderUriPath = this.relativePath(workspaceRoot, effectiveDir); for (let ignoreLine of ignoreFile.content.split("\n")) { + ignoreLine = ignoreLine.split("#")[0]; ignoreLine = ignoreLine.trim(); - if (!ignoreLine.length || ignoreLine.startsWith("#")) { + if (!ignoreLine.length) { continue; } let isInverted = false; @@ -15589,6 +15497,9 @@ var init_ignore_helper = __esm({ if (!this.isActive) { return false; } + if (uri.scheme === "https") { + return false; + } if (uri.scheme !== "file") { return true; } @@ -15855,9 +15766,9 @@ var require_purify_cjs = __commonJS({ const getChildNodes = lookupGetter(ElementPrototype, "childNodes"); const getParentNode = lookupGetter(ElementPrototype, "parentNode"); if (typeof HTMLTemplateElement === "function") { - const template = document2.createElement("template"); - if (template.content && template.content.ownerDocument) { - document2 = template.content.ownerDocument; + const template2 = document2.createElement("template"); + if (template2.content && template2.content.ownerDocument) { + document2 = template2.content.ownerDocument; } } let trustedTypesPolicy; @@ -28487,84 +28398,6 @@ var init_preamble = __esm({ } }); -// ../lib/shared/src/chat/transcript/interaction.ts -var Interaction; -var init_interaction = __esm({ - "../lib/shared/src/chat/transcript/interaction.ts"() { - "use strict"; - init_context_filter(); - Interaction = class { - constructor(humanMessage, assistantMessage, fullContext, usedContextFiles, usedPreciseContext = [], timestamp = (/* @__PURE__ */ new Date()).toISOString()) { - this.humanMessage = humanMessage; - this.assistantMessage = assistantMessage; - this.fullContext = fullContext; - this.usedContextFiles = usedContextFiles; - this.usedPreciseContext = usedPreciseContext; - this.timestamp = timestamp; - } - /** - * Removes context messages for files that should be ignored. - * - * Loops through the context messages and builds a new array, omitting any - * messages for files that match the CODY_IGNORE files filter. - * Also omits the assistant message after any ignored human message. - * - * This ensures context from ignored files does not get used. - */ - async removeCodyIgnoredFiles() { - const contextMessages = await this.fullContext; - const newMessages = []; - for (let i = 0; i < contextMessages.length; i++) { - const message = contextMessages[i]; - if (message.speaker === "human" && message.file) { - if (isCodyIgnoredFile(message.file.uri)) { - i++; - continue; - } - } - newMessages.push(message); - } - this.fullContext = Promise.resolve(newMessages); - return newMessages; - } - getAssistantMessage() { - return { ...this.assistantMessage }; - } - setAssistantMessage(assistantMessage) { - this.assistantMessage = { ...assistantMessage }; - } - getHumanMessage() { - return { ...this.humanMessage }; - } - async getFullContext() { - const msgs = await this.removeCodyIgnoredFiles(); - return msgs.map((msg) => ({ ...msg })); - } - setUsedContext(usedContextFiles, usedPreciseContext) { - this.usedContextFiles = usedContextFiles; - this.usedPreciseContext = usedPreciseContext; - } - /** - * Converts the interaction to chat message pair: one message from a human, one from an assistant. - */ - toChat() { - return [ - { - ...this.humanMessage, - contextFiles: this.usedContextFiles, - preciseContext: this.usedPreciseContext - }, - { - ...this.assistantMessage, - contextFiles: this.usedContextFiles, - preciseContext: this.usedPreciseContext - } - ]; - } - }; - } -}); - // ../lib/shared/src/chat/typewriter.ts var MAX_DELAY_MS, MIN_DELAY_MS, MIN_CHAR_CHUNK_SIZE, Typewriter; var init_typewriter = __esm({ @@ -28668,6 +28501,14 @@ var init_viewHelpers = __esm({ }); // ../lib/shared/src/common/languages.ts +function extensionForLanguage(language) { + for (const extension of Object.keys(EXTENSION_TO_LANGUAGE)) { + if (EXTENSION_TO_LANGUAGE[extension] === language) { + return extension; + } + } + return void 0; +} function languageFromFilename(file) { const extWithoutDot = uriExtname(file).slice(1); return EXTENSION_TO_LANGUAGE[extWithoutDot] ?? extWithoutDot; @@ -28718,8 +28559,9 @@ var init_languages = __esm({ }); // ../lib/shared/src/prompt/templates.ts -function populateCodeContextTemplate(code, fileUri, repoName) { - return (repoName ? CODE_CONTEXT_TEMPLATE_WITH_REPO.replace("{repoName}", repoName) : CODE_CONTEXT_TEMPLATE).replace("{filePath}", displayPath(fileUri)).replace("{languageID}", markdownCodeBlockLanguageIDForFilename(fileUri)).replace("{text}", code); +function populateCodeContextTemplate(code, fileUri, repoName, type = "chat") { + const template2 = type === "edit" ? CODE_CONTEXT_TEMPLATE_EDIT : repoName ? CODE_CONTEXT_TEMPLATE_WITH_REPO.replace("{repoName}", repoName) : CODE_CONTEXT_TEMPLATE; + return template2.replace("{filePath}", displayPath(fileUri)).replace("{languageID}", markdownCodeBlockLanguageIDForFilename(fileUri)).replace("{text}", code); } function populateMarkdownContextTemplate(markdown2, fileUri, repoName) { return (repoName ? MARKDOWN_CONTEXT_TEMPLATE_WITH_REPO.replace("{repoName}", repoName) : MARKDOWN_CONTEXT_TEMPLATE).replace("{filePath}", displayPath(fileUri)).replace("{text}", markdown2); @@ -28736,7 +28578,7 @@ function populateContextTemplateFromText(templateText, content, fileUri) { function populateCodeGenerationContextTemplate(precedingText, followingText, fileUri, tag) { return CODE_GENERATION_CONTEXT_TEMPLATE.replace("{precedingText}", precedingText).replace("{followingText}", followingText).replace("{filePath}", displayPath(fileUri)).replace("{outputTag}", tag); } -var CODE_CONTEXT_TEMPLATE, CODE_CONTEXT_TEMPLATE_WITH_REPO, MARKDOWN_CONTEXT_TEMPLATE, MARKDOWN_CONTEXT_TEMPLATE_WITH_REPO, DIAGNOSTICS_CONTEXT_TEMPLATE, SELECTED_CODE_CONTEXT_TEMPLATE, SELECTED_CODE_CONTEXT_TEMPLATE_WITH_REPO, CODE_GENERATION_CONTEXT_TEMPLATE; +var CODE_CONTEXT_TEMPLATE, CODE_CONTEXT_TEMPLATE_WITH_REPO, CODE_CONTEXT_TEMPLATE_EDIT, MARKDOWN_CONTEXT_TEMPLATE, MARKDOWN_CONTEXT_TEMPLATE_WITH_REPO, DIAGNOSTICS_CONTEXT_TEMPLATE, SELECTED_CODE_CONTEXT_TEMPLATE, SELECTED_CODE_CONTEXT_TEMPLATE_WITH_REPO, CODE_GENERATION_CONTEXT_TEMPLATE; var init_templates = __esm({ "../lib/shared/src/prompt/templates.ts"() { "use strict"; @@ -28750,14 +28592,16 @@ var init_templates = __esm({ \`\`\`{languageID} {text} \`\`\``; + CODE_CONTEXT_TEMPLATE_EDIT = `Use the following code snippet from file: {filePath}: +{text} +`; MARKDOWN_CONTEXT_TEMPLATE = "Use the following text from file `{filePath}`:\n{text}"; MARKDOWN_CONTEXT_TEMPLATE_WITH_REPO = "Use the following text from file `{filePath}` in repository `{repoName}`:\n{text}"; - DIAGNOSTICS_CONTEXT_TEMPLATE = `Use the following {type} from the code snippet in the file \`{filePath}\` + DIAGNOSTICS_CONTEXT_TEMPLATE = `Use the following {type} from the code snippet in the file: {filePath}: {prefix}: {message} Code snippet: -\`\`\`{languageID} {code} -\`\`\``; +`; SELECTED_CODE_CONTEXT_TEMPLATE = `"My selected {languageName} code from file \`{filePath}\`: {code} @@ -28785,13 +28629,12 @@ function createContextMessageByFile(file, content) { if (!code) { return []; } + const filepath = displayPath(file.uri); return [ { speaker: "human", - text: file.type === "file" ? `Context from file path @${file.uri?.path}: -${code}` : `$${file.symbolName} is a ${file.kind} symbol from file path @${displayPath( - file.uri - )}: + text: file.type === "file" ? `Context from file path @${filepath}: +${code}` : `$${file.symbolName} is a ${file.kind} symbol from file path @${filepath}: ${code}`, file }, @@ -28955,6 +28798,7 @@ var init_types = __esm({ DefaultChatCommands2["Explain"] = "explain"; DefaultChatCommands2["Unit"] = "unit"; DefaultChatCommands2["Smell"] = "smell"; + DefaultChatCommands2["Terminal"] = "terminal"; return DefaultChatCommands2; })(DefaultChatCommands || {}); DefaultEditCommands = /* @__PURE__ */ ((DefaultEditCommands2) => { @@ -29014,16 +28858,18 @@ var init_FeatureFlagProvider = __esm({ "../lib/shared/src/experimentation/FeatureFlagProvider.ts"() { "use strict"; init_graphql(); - init_utils(); + init_tracing(); + init_utils2(); FeatureFlag = /* @__PURE__ */ ((FeatureFlag2) => { FeatureFlag2["TestFlagDoNotUse"] = "test-flag-do-not-use"; FeatureFlag2["CodyAutocompleteTracing"] = "cody-autocomplete-tracing"; FeatureFlag2["CodyAutocompleteStarCoderHybrid"] = "cody-autocomplete-default-starcoder-hybrid"; FeatureFlag2["CodyAutocompleteStarCoder16B"] = "cody-autocomplete-default-starcoder-16b"; + FeatureFlag2["CodyAutocompleteLlamaCode13B"] = "cody-autocomplete-llama-code-13b"; FeatureFlag2["CodyAutocompleteContextBfgMixed"] = "cody-autocomplete-context-bfg-mixed"; - FeatureFlag2["CodyAutocompleteContextNewJaccardSimilarity"] = "cody-autocomplete-new-jaccard-similarity"; FeatureFlag2["CodyAutocompleteUserLatency"] = "cody-autocomplete-user-latency"; FeatureFlag2["CodyAutocompleteDynamicMultilineCompletions"] = "cody-autocomplete-dynamic-multiline-completions"; + FeatureFlag2["CodyAutocompleteEagerCancellation"] = "cody-autocomplete-eager-cancellation"; FeatureFlag2["CodyAutocompleteHotStreak"] = "cody-autocomplete-hot-streak"; FeatureFlag2["CodyAutocompleteFastPath"] = "cody-autocomplete-fast-path"; FeatureFlag2["CodyAutocompleteSingleMultilineRequest"] = "cody-autocomplete-single-multiline-request"; @@ -29031,6 +28877,7 @@ var init_FeatureFlagProvider = __esm({ FeatureFlag2["UseSscForCodySubscription"] = "use-ssc-for-cody-subscription"; FeatureFlag2["CodyProTrialEnded"] = "cody-pro-trial-ended"; FeatureFlag2["CodyChatMockTest"] = "cody-chat-mock-test"; + FeatureFlag2["CodyCommandHints"] = "cody-command-hints"; return FeatureFlag2; })(FeatureFlag || {}); ONE_HOUR = 60 * 60 * 1e3; @@ -29049,31 +28896,38 @@ var init_FeatureFlagProvider = __esm({ } return this.featureFlags[endpoint]?.[flagName]; } + getExposedExperiments(endpoint = this.apiClient.endpoint) { + return this.featureFlags[endpoint] || {}; + } async evaluateFeatureFlag(flagName) { - const endpoint = this.apiClient.endpoint; - if (process.env.BENCHMARK_DISABLE_FEATURE_FLAGS) { - return false; - } - const cachedValue = this.getFromCache(flagName, endpoint); - if (cachedValue !== void 0) { - return cachedValue; - } - const value = await this.apiClient.evaluateFeatureFlag(flagName); - if (!this.featureFlags[endpoint]) { - this.featureFlags[endpoint] = {}; - } - this.featureFlags[endpoint][flagName] = value === null || isError2(value) ? false : value; - return this.featureFlags[endpoint][flagName]; + return wrapInActiveSpan(`FeatureFlagProvider.evaluateFeatureFlag.${flagName}`, async () => { + const endpoint = this.apiClient.endpoint; + if (process.env.BENCHMARK_DISABLE_FEATURE_FLAGS) { + return false; + } + const cachedValue = this.getFromCache(flagName, endpoint); + if (cachedValue !== void 0) { + return cachedValue; + } + const value = await this.apiClient.evaluateFeatureFlag(flagName); + if (!this.featureFlags[endpoint]) { + this.featureFlags[endpoint] = {}; + } + this.featureFlags[endpoint][flagName] = value === null || isError2(value) ? false : value; + return this.featureFlags[endpoint][flagName]; + }); } async syncAuthStatus() { this.featureFlags = {}; await this.refreshFeatureFlags(); } async refreshFeatureFlags() { - const endpoint = this.apiClient.endpoint; - const data = await this.apiClient.getEvaluatedFeatureFlags(); - this.featureFlags[endpoint] = isError2(data) ? {} : data; - this.lastUpdated = Date.now(); + return wrapInActiveSpan("FeatureFlagProvider.refreshFeatureFlags", async () => { + const endpoint = this.apiClient.endpoint; + const data = await this.apiClient.getEvaluatedFeatureFlags(); + this.featureFlags[endpoint] = isError2(data) ? {} : data; + this.lastUpdated = Date.now(); + }); } }; featureFlagProvider = new FeatureFlagProvider(graphqlClient); @@ -29104,7 +28958,7 @@ var init_guardrails = __esm({ "../lib/shared/src/guardrails/index.ts"() { "use strict"; init_common(); - init_utils(); + init_utils2(); } }); @@ -29113,7 +28967,7 @@ var SourcegraphGuardrailsClient; var init_client2 = __esm({ "../lib/shared/src/guardrails/client.ts"() { "use strict"; - init_utils(); + init_utils2(); init_client(); SourcegraphGuardrailsClient = class { constructor(client) { @@ -42921,7 +42775,7 @@ var init_errors = __esm({ "../lib/shared/src/sourcegraph-api/errors.ts"() { "use strict"; import_date_fns = __toESM(require_date_fns()); - init_utils(); + init_utils2(); RateLimitError = class _RateLimitError extends Error { constructor(feature, message, upgradeIsAvailable, limit, retryAfter) { super(message); @@ -43069,7 +42923,7 @@ var init_ollama_client = __esm({ init_common(); init_errors(); init_client(); - init_utils(); + init_utils2(); RESPONSE_SEPARATOR = /\r?\n/; } }); @@ -43244,7 +43098,7 @@ var init_GraphQLTelemetryExporter = __esm({ "../lib/shared/src/sourcegraph-api/telemetry/GraphQLTelemetryExporter.ts"() { "use strict"; init_logger(); - init_utils(); + init_utils2(); GraphQLTelemetryExporter = class { constructor(client, anonymousUserID, legacyBackcompatLogEventMode2) { this.client = client; @@ -53818,7 +53672,7 @@ var init_MockServerTelemetryExporter = __esm({ "../lib/shared/src/sourcegraph-api/telemetry/MockServerTelemetryExporter.ts"() { "use strict"; init_logger(); - init_utils(); + init_utils2(); MOCK_URL = "http://localhost:49300"; ENDPOINT = "/.api/mockEventRecording"; MockServerTelemetryExporter = class { @@ -53933,7 +53787,7 @@ var init_EventLogger = __esm({ "use strict"; init_logger(); init_graphql(); - init_utils(); + init_utils2(); EventLogger = class { constructor(serverEndpoint, extensionDetails, config) { this.serverEndpoint = serverEndpoint; @@ -54052,14 +53906,12 @@ var init_EventLogger = __esm({ var init_src = __esm({ "../lib/shared/src/index.ts"() { "use strict"; - init_chat_models(); + init_models(); init_bot_response_multiplexer(); init_chat(); init_context_filter(); init_ignore_helper(); init_preamble(); - init_transcript(); - init_interaction(); init_messages(); init_typewriter(); init_viewHelpers(); @@ -54091,7 +53943,7 @@ var init_src = __esm({ init_TelemetryRecorderProvider(); init_EventLogger(); init_tracing(); - init_utils(); + init_utils2(); } }); @@ -54177,8 +54029,8 @@ var init_uri2 = __esm({ static parse(value, strict) { return new _Uri(import_vscode_uri4.URI.parse(value, strict)); } - static file(path19) { - return new _Uri(import_vscode_uri4.URI.file(path19)); + static file(path20) { + return new _Uri(import_vscode_uri4.URI.file(path20)); } static joinPath(base, ...pathSegments) { return new _Uri(import_vscode_uri4.Utils.joinPath(base.uri ?? new _Uri(base), ...pathSegments)); @@ -54237,8 +54089,128 @@ var init_uri2 = __esm({ } }); +// ../vscode/src/testutils/AgentWorkspaceEdit.ts +var AgentWorkspaceEdit; +var init_AgentWorkspaceEdit = __esm({ + "../vscode/src/testutils/AgentWorkspaceEdit.ts"() { + "use strict"; + AgentWorkspaceEdit = class { + edits = []; + get operations() { + return Array.from(this.edits.values()); + } + get size() { + return this.edits.length; + } + has(uri) { + const uriString = uri.toString(); + for (const operation of this.edits.values()) { + switch (operation.type) { + case "create-file": + case "delete-file": + case "edit-file": + if (operation.uri === uriString) { + return true; + } + break; + case "rename-file": + if (operation.oldUri === uriString) { + return true; + } + } + } + return false; + } + createFile(uri, options2, metadata2) { + if (options2?.contents && !(options2.contents instanceof Uint8Array)) { + throw new Error( + `options.contents must be a Uint8Array. Unsupported argument ${options2.contents}` + ); + } + this.edits.push({ + type: "create-file", + uri: uri.toString(), + options: { + overwrite: options2?.overwrite, + ignoreIfExists: options2?.ignoreIfExists + }, + textContents: options2?.contents instanceof Uint8Array ? options2?.contents?.toString() : "", + metadata: metadata2 + }); + } + deleteFile(uri, options2, metadata2) { + this.edits.push({ + type: "delete-file", + uri: uri.toString(), + options: options2, + metadata: metadata2 + }); + } + renameFile(oldUri, newUri, options2, metadata2) { + this.edits.push({ + type: "rename-file", + oldUri: oldUri.toString(), + newUri: newUri.toString(), + options: options2, + metadata: metadata2 + }); + } + replace(uri, range, newText, metadata2) { + this.editOperation(uri).edits.push({ + type: "replace", + range, + value: newText, + metadata: metadata2 + }); + } + insert(uri, position, content, metadata2) { + this.editOperation(uri).edits.push({ + type: "insert", + position, + value: content, + metadata: metadata2 + }); + } + delete(uri, range, metadata2) { + this.editOperation(uri).edits.push({ + type: "delete", + range, + metadata: metadata2 + }); + } + editOperation(uri) { + const uriString = uri.toString(); + for (const operation of this.edits.values()) { + if (operation.type === "edit-file" && operation.uri === uriString) { + return operation; + } + } + const result = { + type: "edit-file", + uri: uri.toString(), + edits: [] + }; + this.edits.push(result); + return result; + } + // ================== + // Unimplemented APIs + // ================== + entries() { + throw new Error("Method not implemented."); + } + set(uri, edits) { + throw new Error("Method not implemented."); + } + get(uri) { + throw new Error("Method not implemented."); + } + }; + } +}); + // ../vscode/src/testutils/mocks.ts -var import_promises, InlineCompletionTriggerKind, CodeLens, ThemeColor, ThemeIcon, MarkdownString, CodeAction, CodeActionKind, QuickInputButtons, TreeItem, RelativePattern, Position, Location, Range, Selection, FoldingRange, InlineCompletionItem, WorkspaceEdit, CancellationToken, CancellationTokenSource, workspaceFs, ProgressLocation, MockFeatureFlagProvider, emptyMockFeatureFlagProvider; +var import_promises, InlineCompletionTriggerKind, CodeLens, ThemeColor, ThemeIcon, MarkdownString, CodeAction, CodeActionKind, QuickInputButtons, TreeItem, RelativePattern, Position, Location, Range, Selection, FoldingRange, InlineCompletionItem, CancellationToken, CancellationTokenSource, workspaceFs, ProgressLocation, MockFeatureFlagProvider, emptyMockFeatureFlagProvider; var init_mocks = __esm({ "../vscode/src/testutils/mocks.ts"() { "use strict"; @@ -54246,8 +54218,10 @@ var init_mocks = __esm({ init_src(); init_AgentEventEmitter(); init_uri2(); + init_AgentWorkspaceEdit(); init_uri2(); init_AgentEventEmitter(); + init_AgentWorkspaceEdit(); init_Disposable(); InlineCompletionTriggerKind = /* @__PURE__ */ ((InlineCompletionTriggerKind2) => { InlineCompletionTriggerKind2[InlineCompletionTriggerKind2["Invoke"] = 0] = "Invoke"; @@ -54332,9 +54306,10 @@ var init_mocks = __esm({ RelativePattern = class { constructor(_base, pattern) { this.pattern = pattern; + this.baseUri = typeof _base === "string" ? Uri.file(_base) : "uri" in _base ? Uri.from(_base.uri) : Uri.from(_base); this.base = _base.toString(); } - baseUri = Uri.parse("file:///foobar"); + baseUri; base; }; Position = class _Position { @@ -54479,14 +54454,6 @@ var init_mocks = __esm({ this.range = range; } }; - WorkspaceEdit = class { - delete(uri, range) { - return range; - } - insert(uri, position, content) { - return content; - } - }; CancellationToken = class { isCancellationRequested = false; emitter = new AgentEventEmitter(); @@ -54532,8 +54499,12 @@ var init_mocks = __esm({ await import_promises.default.mkdir(uri.fsPath, { recursive: true }); }, readFile: async (uri) => { - const content = await import_promises.default.readFile(uri.fsPath); - return new Uint8Array(content.buffer); + try { + const content = await import_promises.default.readFile(uri.fsPath); + return new Uint8Array(content.buffer); + } catch (error) { + throw new Error(`no such file: ${uri}`, { cause: error }); + } }, writeFile: async (uri, content) => { await import_promises.default.writeFile(uri.fsPath, content); @@ -54642,7 +54613,7 @@ var init_AgentTabGroups = __esm({ var version, package_default; var init_package = __esm({ "../vscode/package.json"() { - version = "1.2.2"; + version = "1.4.3"; package_default = { name: "cody-ai", private: true, @@ -54906,6 +54877,12 @@ var init_package = __esm({ group: "Cody", icon: "$(feedback)" }, + { + command: "cody.command.explain-output", + title: "Ask Cody to Explain", + category: "Cody Command", + icon: "$(cody-logo)" + }, { command: "cody.command.edit-code", category: "Cody Command", @@ -55154,6 +55131,11 @@ var init_package = __esm({ mac: "alt+c", when: "cody.activated" }, + { + command: "cody.menu.custom-commands", + key: "shift+alt+c", + when: "cody.activated" + }, { command: "-github.copilot.generate", key: "ctrl+enter" @@ -55346,6 +55328,13 @@ var init_package = __esm({ when: "view == cody.chat.tree.view && cody.activated && cody.hasChatHistory && viewItem == cody.chats", group: "inline@2" } + ], + "terminal/context": [ + { + command: "cody.command.explain-output", + group: "0_cody", + when: "cody.activated" + } ] }, configuration: { @@ -55453,8 +55442,8 @@ var init_package = __esm({ order: 12, title: "Cody Command Hints", type: "boolean", - markdownDescription: "Enable hints for Edit and Chat shortcuts, displayed alongside editor selections.", - default: false + markdownDescription: 'Enable hints for Edit and Chat shortcuts ("Opt+K to Edit, Opt+L to Chat"), displayed alongside editor selections.', + default: true }, "cody.experimental.simpleChatContext": { order: 99, @@ -55480,6 +55469,12 @@ var init_package = __esm({ markdownDescription: "Enable OpenTelemetry tracing", default: false }, + "cody.experimental.commitMessage": { + order: 99, + type: "boolean", + default: true, + markdownDescription: "Enable Cody to appear in the Source Control input field, to generate a relevant commit message from your changes." + }, "cody.debug.enable": { order: 99, type: "boolean", @@ -55509,7 +55504,7 @@ var init_package = __esm({ "cody.autocomplete.advanced.provider": { type: "string", default: null, - enum: [null, "anthropic", "fireworks", "unstable-openai", "unstable-ollama"], + enum: [null, "anthropic", "fireworks", "unstable-openai", "experimental-ollama"], markdownDescription: "The provider used for code autocomplete. Most providers other than `anthropic` require the `cody.autocomplete.advanced.serverEndpoint` and `cody.autocomplete.advanced.accessToken` settings to also be set. Check the Cody output channel for error messages if autocomplete is not working as expected." }, "cody.autocomplete.advanced.serverEndpoint": { @@ -55546,6 +55541,11 @@ var init_package = __esm({ default: false, markdownDescription: "Format completions on accept using [the default document formatter](https://code.visualstudio.com/docs/editor/codebasics#_formatting)." }, + "cody.autocomplete.disableInsideComments": { + type: "boolean", + default: false, + markdownDescription: "Prevent autocomplete requests while inside code comments." + }, "cody.experimental.foldingRanges": { type: "string", enum: ["lsp", "indentation-based"], @@ -55646,6 +55646,20 @@ var init_package = __esm({ fontCharacter: "\\0043" } }, + "openai-logo": { + description: "OpenAI logo", + default: { + fontPath: "resources/cody-icons.woff", + fontCharacter: "\\0044" + } + }, + "mistral-logo": { + description: "Mistral logo", + default: { + fontPath: "resources/cody-icons.woff", + fontCharacter: "\\0045" + } + }, "new-comment-icon": { description: "Cody logo heavy", default: { @@ -55687,6 +55701,7 @@ var init_package = __esm({ "lru-cache": "^10.0.0", mkdirp: "^3.0.1", "os-browserify": "^0.3.0", + "parse-diff": "^0.11.1", "socks-proxy-agent": "^8.0.1", unzipper: "^0.10.14", uuid: "^9.0.0", @@ -57456,7 +57471,9 @@ function matchesGlobPatterns(includeGlobs, excludeGlobs, value) { if (!matchingIncludePattern) { return false; } - const matchingExcludePatttern = excludeGlobs.find((excludePattern) => minimatch(value, excludePattern)); + const matchingExcludePatttern = excludeGlobs.find( + (excludePattern) => minimatch(value, excludePattern, { dot: true }) + ); return !matchingExcludePatttern; } var init_matchesGlobPatterns = __esm({ @@ -57528,11 +57545,13 @@ function isAuthenticationChange(newConfig) { function setWorkspaceDocuments(newWorkspaceDocuments) { workspaceDocuments = newWorkspaceDocuments; if (newWorkspaceDocuments.workspaceRootUri) { - workspaceFolders.push({ - name: "Workspace Root", - uri: newWorkspaceDocuments.workspaceRootUri, - index: 0 - }); + if (!workspaceFolders.map((wf) => wf.uri.toString()).includes(newWorkspaceDocuments.workspaceRootUri.toString())) { + workspaceFolders.push({ + name: "Workspace Root", + uri: newWorkspaceDocuments.workspaceRootUri, + index: 0 + }); + } } } function setAgent(newAgent) { @@ -57698,6 +57717,7 @@ var init_vscode_shim = __esm({ init_AgentWorkspaceConfiguration(); init_matchesGlobPatterns(); init_AgentQuickPick(); + init_languages(); init_AgentEventEmitter(); init_mocks(); isTesting = process.env.CODY_SHIM_TESTING === "true"; @@ -57740,9 +57760,14 @@ var init_vscode_shim = __esm({ onWillRenameFiles: emptyEvent(), onWillSaveNotebookDocument: emptyEvent(), onWillSaveTextDocument: emptyEvent(), - applyEdit: () => Promise.resolve(false), - // TODO: this API is used by Cody - isTrusted: false, + applyEdit: (edit2, metadata2) => { + if (agent) { + return agent.applyWorkspaceEdit(edit2, metadata2); + } + logError("vscode.workspace.applyEdit", "agent is undefined"); + return Promise.resolve(false); + }, + isTrusted: true, name: void 0, notebookDocuments: [], openNotebookDocument: () => { @@ -57756,8 +57781,26 @@ var init_vscode_shim = __esm({ workspaceFile: void 0, registerTaskProvider: () => emptyDisposable, async findFiles(include, exclude, maxResults, token) { - if (typeof include !== "string") { - throw new TypeError("workspaces.findFiles: include must be a string"); + let searchFolders; + let searchPattern; + if (typeof include === "string") { + searchFolders = workspaceFolders; + searchPattern = include; + } else { + const matchingWorkspaceFolder = workspaceFolders.find( + (wf) => wf.uri.toString() === include.baseUri.toString() + ); + if (!matchingWorkspaceFolder) { + throw new TypeError( + `workspaces.findFiles: RelativePattern must use a known WorkspaceFolder + Got: ${include.baseUri} + Known: +${workspaceFolders.map((wf) => ` - ${wf.uri.toString()} +`).join()}` + ); + } + searchFolders = [matchingWorkspaceFolder]; + searchPattern = include.pattern; } if (exclude !== void 0 && typeof exclude !== "string") { throw new TypeError("workspaces.findFiles: exclude must be a string"); @@ -57772,10 +57815,13 @@ var init_vscode_shim = __esm({ const uri = Uri.file(import_path5.default.join(dir.fsPath, name)); const relativePath = import_path5.default.relative(workspaceRoot.fsPath, uri.fsPath); if (fileType.valueOf() === 2 /* Directory */.valueOf()) { + if (!matchesGlobPatterns([], exclude ? [exclude] : [], relativePath)) { + continue; + } await loop(workspaceRoot, uri); } else if (fileType.valueOf() === 1 /* File */.valueOf()) { if (!matchesGlobPatterns( - include ? [include] : [], + searchPattern ? [searchPattern] : [], exclude ? [exclude] : [], relativePath )) { @@ -57789,7 +57835,7 @@ var init_vscode_shim = __esm({ } }; await Promise.all( - workspaceFolders.map(async (folder) => { + searchFolders.map(async (folder) => { try { const stat7 = await workspaceFs.stat(folder.uri); if (stat7.type.valueOf() === 2 /* Directory */.valueOf()) { @@ -57805,9 +57851,9 @@ var init_vscode_shim = __esm({ ); return result; }, - openTextDocument: (uriOrString) => { + openTextDocument: async (uriOrString) => { if (!workspaceDocuments) { - return Promise.reject(new Error("workspaceDocuments is uninitialized")); + throw new Error("workspaceDocuments is uninitialized"); } if (typeof uriOrString === "string") { return workspaceDocuments.openTextDocument(Uri.file(uriOrString)); @@ -57815,6 +57861,36 @@ var init_vscode_shim = __esm({ if (uriOrString instanceof Uri) { return workspaceDocuments.openTextDocument(uriOrString); } + if (typeof uriOrString === "object" && (uriOrString?.language || uriOrString?.content) && agent) { + const language = uriOrString?.language ?? ""; + const content = uriOrString?.content ?? ""; + const extension = extensionForLanguage(language) ?? language; + const untitledUri = Uri.from({ scheme: "untitled", path: `${v4_default()}.${extension}` }); + if (clientInfo?.capabilities?.untitledDocuments !== "enabled") { + const errorMessage = 'Client does not support untitled documents. To fix this problem, set `untitledDocuments: "enabled"` in client capabilities'; + logError("vscode.workspace.openTextDocument", "unsupported operation", errorMessage); + throw new Error(errorMessage); + } + const result = await agent.request("textDocument/openUntitledDocument", { + uri: untitledUri.toString(), + content, + language + }); + if (!result) { + throw new Error( + `client returned false from textDocument/openUntitledDocument: ${JSON.stringify( + uriOrString + )}` + ); + } + const document2 = await workspaceDocuments.openTextDocument(untitledUri); + if (document2.getText() !== content) { + throw new Error( + "untitled document has mismatched content. " + JSON.stringify({ expected: content, obtained: document2.getText() }, null, 2) + ); + } + return document2; + } return Promise.reject( new Error(`workspace.openTextDocument:unsupported argument ${JSON.stringify(uriOrString)}`) ); @@ -58001,7 +58077,28 @@ var init_vscode_shim = __esm({ createOutputChannel: (name) => outputChannel(name), createTextEditorDecorationType: () => ({ key: "foo", dispose: () => { } }), - showTextDocument: () => { + showTextDocument: async (params, options2) => { + if (agent) { + if (clientInfo?.capabilities?.showDocument !== "enabled") { + throw new Error( + 'vscode.window.showTextDocument: not supported by client. To fix this problem, enable `showDocument: "enabled"` in client capabilities' + ); + } + const uri = params instanceof Uri ? params.toString() : params?.uri?.toString?.(); + if (uri === void 0) { + throw new TypeError( + `vscode.window.showTextDocument: unable to infer URI from argument ${params}` + ); + } + const result = await agent.request("textDocument/show", { uri }); + if (!result) { + throw new Error(`showTextDocument: client returned false when trying to show URI ${uri}`); + } + if (!workspaceDocuments) { + throw new Error("workspaceDocuments is undefined"); + } + return workspaceDocuments.newTextEditorFromStringUri(uri); + } console.log(new Error().stack); throw new Error("Not implemented: vscode.window.showTextDocument"); }, @@ -58200,6 +58297,12 @@ var init_vscode_shim = __esm({ latestCompletionProvider = provider; resolveFirstCompletionProvider(provider); return emptyDisposable; + }, + getDiagnostics: (resource) => { + if (resource) { + return []; + } + return [[resource, []]]; } }; languages = _languages; @@ -58633,9 +58736,6 @@ function messageToInteractionMessage(message) { displayText: getDisplayText(message) }; } -function contextItemId(contextItem) { - return contextItem.range ? `${contextItem.uri.toString()}#${contextItem.range.start.line}:${contextItem.range.end.line}` : contextItem.uri.toString(); -} function toViewMessage(mwc) { const displayText = getDisplayText(mwc); return { @@ -58836,7 +58936,7 @@ function toPartialUtf8String(buf) { buf: Buffer.from(buf.slice(lastValidByteOffsetExclusive)) }; } -var init_utils2 = __esm({ +var init_utils3 = __esm({ "../lib/shared/src/sourcegraph-api/utils.ts"() { "use strict"; } @@ -58921,7 +59021,7 @@ var EVENT_LINE_PREFIX, DATA_LINE_PREFIX, EVENTS_SEPARATOR; var init_parse = __esm({ "../lib/shared/src/sourcegraph-api/completions/parse.ts"() { "use strict"; - init_utils(); + init_utils2(); EVENT_LINE_PREFIX = "event: "; DATA_LINE_PREFIX = "data: "; EVENTS_SEPARATOR = "\n\n"; @@ -58943,10 +59043,10 @@ var init_nodeClient = __esm({ import_https = __toESM(require("https")); init_abortController(); init_logger(); - init_utils(); + init_utils2(); init_errors(); init_client(); - init_utils2(); + init_utils3(); init_client4(); init_parse(); isTemperatureZero = process.env.CODY_TEMPERATURE_ZERO === "true"; @@ -59346,7 +59446,7 @@ ${stack}`, logError( "JSON-RPC", `Uncaught error in notification handler for method '${msg.method}'`, - error + error + (error instanceof Error ? "\n\n" + error.stack : "") ); } } else { @@ -59586,7 +59686,7 @@ var init_SecretStorageProvider = __esm({ // ../vscode/src/configuration.ts function getConfiguration(config = workspace.getConfiguration()) { - const isTesting2 = process.env.CODY_TESTING === "true"; + const isTesting3 = process.env.CODY_TESTING === "true"; function getHiddenSetting(configKey, defaultValue) { return config.get(`cody.${configKey}`, defaultValue); } @@ -59607,12 +59707,14 @@ function getConfiguration(config = workspace.getConfiguration()) { ); debugRegex = /.*/; } - let autocompleteAdvancedProvider = config.get( - CONFIG_KEY.autocompleteAdvancedProvider, - null - ); - if (autocompleteAdvancedProvider === "unstable-fireworks") { - autocompleteAdvancedProvider = "fireworks"; + let autocompleteAdvancedProvider = config.get(CONFIG_KEY.autocompleteAdvancedProvider, null); + switch (autocompleteAdvancedProvider) { + case "unstable-fireworks": + autocompleteAdvancedProvider = "fireworks"; + break; + case "unstable-ollama": + autocompleteAdvancedProvider = "experimental-ollama"; + break; } const configKeys = [ "autocompleteAdvancedProvider", @@ -59650,16 +59752,21 @@ function getConfiguration(config = workspace.getConfiguration()) { true ), autocompleteFormatOnAccept: config.get(CONFIG_KEY.autocompleteFormatOnAccept, true), + autocompleteDisableInsideComments: config.get( + CONFIG_KEY.autocompleteDisableInsideComments, + false + ), codeActions: config.get(CONFIG_KEY.codeActionsEnabled, true), commandHints: config.get(CONFIG_KEY.commandHintsEnabled, false), /** * Hidden settings for internal use only. */ - internalUnstable: getHiddenSetting("internal.unstable", isTesting2), + internalUnstable: getHiddenSetting("internal.unstable", isTesting3), autocompleteExperimentalGraphContext, + experimentalCommitMessage: getHiddenSetting("experimental.commitMessage", true), experimentalSimpleChatContext: getHiddenSetting("experimental.simpleChatContext", true), experimentalSymfContext: getHiddenSetting("experimental.symfContext", true), - experimentalGuardrails: getHiddenSetting("experimental.guardrails", isTesting2), + experimentalGuardrails: getHiddenSetting("experimental.guardrails", isTesting3), experimentalTracing: getHiddenSetting("experimental.tracing", false), autocompleteExperimentalDynamicMultilineCompletions: getHiddenSetting( "autocomplete.experimental.dynamicMultilineCompletions", @@ -59693,9 +59800,9 @@ function getConfiguration(config = workspace.getConfiguration()) { void 0 ) }, - testingLocalEmbeddingsModel: isTesting2 ? getHiddenSetting("testing.localEmbeddings.model", void 0) : void 0, - testingLocalEmbeddingsEndpoint: isTesting2 ? getHiddenSetting("testing.localEmbeddings.endpoint", void 0) : void 0, - testingLocalEmbeddingsIndexLibraryPath: isTesting2 ? getHiddenSetting("testing.localEmbeddings.indexLibraryPath", void 0) : void 0 + testingLocalEmbeddingsModel: isTesting3 ? getHiddenSetting("testing.localEmbeddings.model", void 0) : void 0, + testingLocalEmbeddingsEndpoint: isTesting3 ? getHiddenSetting("testing.localEmbeddings.endpoint", void 0) : void 0, + testingLocalEmbeddingsIndexLibraryPath: isTesting3 ? getHiddenSetting("testing.localEmbeddings.indexLibraryPath", void 0) : void 0 }; } function sanitizeCodebase(codebase) { @@ -59729,8 +59836,8 @@ var init_configuration2 = __esm({ init_SecretStorageProvider(); getFullConfig = async () => { const config = getConfiguration(); - const isTesting2 = process.env.CODY_TESTING === "true"; - const serverEndpoint = localStorage2?.getEndpoint() || (isTesting2 ? "http://localhost:49300/" : DOTCOM_URL.href); + const isTesting3 = process.env.CODY_TESTING === "true"; + const serverEndpoint = localStorage2?.getEndpoint() || (isTesting3 ? "http://localhost:49300/" : DOTCOM_URL.href); const accessToken = await getAccessToken() || null; return { ...config, accessToken, serverEndpoint }; }; @@ -59943,7 +60050,7 @@ function isSpecCompliantForm(thing) { return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === "FormData" && thing[Symbol.iterator]); } var toString, getPrototypeOf, kindOf, kindOfTest, typeOfTest, isArray, isUndefined, isArrayBuffer, isString, isFunction, isNumber, isObject2, isBoolean, isPlainObject, isDate, isFile, isBlob, isFileList, isStream, isFormData, isURLSearchParams, trim, _global, isContextDefined, extend, stripBOM, inherits2, toFlatObject, endsWith, toArray, isTypedArray, forEachEntry, matchAll, isHTMLForm, toCamelCase, hasOwnProperty, isRegExp, reduceDescriptors, freezeMethods, toObjectSet, noop, toFiniteNumber, ALPHA, DIGIT, ALPHABET, generateString, toJSONObject, utils_default; -var init_utils3 = __esm({ +var init_utils4 = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/utils.js"() { "use strict"; init_bind(); @@ -60250,7 +60357,7 @@ var prototype, descriptors, AxiosError_default; var init_AxiosError = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/core/AxiosError.js"() { "use strict"; - init_utils3(); + init_utils4(); utils_default.inherits(AxiosError, Error, { toJSON: function toJSON() { return { @@ -69160,11 +69267,11 @@ var require_mime_types = __commonJS({ } return exts[0]; } - function lookup(path19) { - if (!path19 || typeof path19 !== "string") { + function lookup(path20) { + if (!path20 || typeof path20 !== "string") { return false; } - var extension2 = extname("x." + path19).toLowerCase().substr(1); + var extension2 = extname("x." + path20).toLowerCase().substr(1); if (!extension2) { return false; } @@ -69421,7 +69528,7 @@ var require_form_data = __commonJS({ "../node_modules/.pnpm/form-data@4.0.0/node_modules/form-data/lib/form_data.js"(exports2, module2) { var CombinedStream = require_combined_stream(); var util2 = require("util"); - var path19 = require("path"); + var path20 = require("path"); var http5 = require("http"); var https4 = require("https"); var parseUrl = require("url").parse; @@ -69548,11 +69655,11 @@ var require_form_data = __commonJS({ FormData3.prototype._getContentDisposition = function(value, options2) { var filename, contentDisposition; if (typeof options2.filepath === "string") { - filename = path19.normalize(options2.filepath).replace(/\\/g, "/"); + filename = path20.normalize(options2.filepath).replace(/\\/g, "/"); } else if (options2.filename || value.name || value.path) { - filename = path19.basename(options2.filename || value.name || value.path); + filename = path20.basename(options2.filename || value.name || value.path); } else if (value.readable && value.hasOwnProperty("httpVersion")) { - filename = path19.basename(value.client._httpMessage.path || ""); + filename = path20.basename(value.client._httpMessage.path || ""); } if (filename) { contentDisposition = 'filename="' + filename + '"'; @@ -69747,10 +69854,10 @@ function isVisitable(thing) { function removeBrackets(key) { return utils_default.endsWith(key, "[]") ? key.slice(0, -2) : key; } -function renderKey(path19, key, dots) { - if (!path19) +function renderKey(path20, key, dots) { + if (!path20) return key; - return path19.concat(key).map(function each(token, i) { + return path20.concat(key).map(function each(token, i) { token = removeBrackets(token); return !dots && i ? "[" + token + "]" : token; }).join(dots ? "." : ""); @@ -69793,9 +69900,9 @@ function toFormData(obj2, formData, options2) { } return value; } - function defaultVisitor(value, key, path19) { + function defaultVisitor(value, key, path20) { let arr = value; - if (value && !path19 && typeof value === "object") { + if (value && !path20 && typeof value === "object") { if (utils_default.endsWith(key, "{}")) { key = metaTokens ? key : key.slice(0, -2); value = JSON.stringify(value); @@ -69814,7 +69921,7 @@ function toFormData(obj2, formData, options2) { if (isVisitable(value)) { return true; } - formData.append(renderKey(path19, key, dots), convertValue(value)); + formData.append(renderKey(path20, key, dots), convertValue(value)); return false; } const stack = []; @@ -69823,11 +69930,11 @@ function toFormData(obj2, formData, options2) { convertValue, isVisitable }); - function build(value, path19) { + function build(value, path20) { if (utils_default.isUndefined(value)) return; if (stack.indexOf(value) !== -1) { - throw Error("Circular reference detected in " + path19.join(".")); + throw Error("Circular reference detected in " + path20.join(".")); } stack.push(value); utils_default.forEach(value, function each(el, key) { @@ -69835,11 +69942,11 @@ function toFormData(obj2, formData, options2) { formData, el, utils_default.isString(key) ? key.trim() : key, - path19, + path20, exposedHelpers ); if (result === true) { - build(el, path19 ? path19.concat(key) : [key]); + build(el, path20 ? path20.concat(key) : [key]); } }); stack.pop(); @@ -69854,7 +69961,7 @@ var predicates, toFormData_default; var init_toFormData = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/helpers/toFormData.js"() { "use strict"; - init_utils3(); + init_utils4(); init_AxiosError(); init_FormData(); predicates = utils_default.toFlatObject(utils_default, {}, null, function filter2(prop) { @@ -69932,7 +70039,7 @@ function buildURL(url2, params, options2) { var init_buildURL = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/helpers/buildURL.js"() { "use strict"; - init_utils3(); + init_utils4(); init_AxiosURLSearchParams(); } }); @@ -69942,7 +70049,7 @@ var InterceptorManager, InterceptorManager_default; var init_InterceptorManager = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/core/InterceptorManager.js"() { "use strict"; - init_utils3(); + init_utils4(); InterceptorManager = class { constructor() { this.handlers = []; @@ -70059,7 +70166,7 @@ var init_platform2 = __esm({ // ../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/helpers/toURLEncodedForm.js function toURLEncodedForm(data, options2) { return toFormData_default(data, new node_default.classes.URLSearchParams(), Object.assign({ - visitor: function(value, key, path19, helpers) { + visitor: function(value, key, path20, helpers) { if (node_default.isNode && utils_default.isBuffer(value)) { this.append(key, value.toString("base64")); return false; @@ -70071,7 +70178,7 @@ function toURLEncodedForm(data, options2) { var init_toURLEncodedForm = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/helpers/toURLEncodedForm.js"() { "use strict"; - init_utils3(); + init_utils4(); init_toFormData(); init_platform2(); } @@ -70096,10 +70203,10 @@ function arrayToObject(arr) { return obj2; } function formDataToJSON(formData) { - function buildPath(path19, value, target, index) { - let name = path19[index++]; + function buildPath(path20, value, target, index) { + let name = path20[index++]; const isNumericKey = Number.isFinite(+name); - const isLast = index >= path19.length; + const isLast = index >= path20.length; name = !name && utils_default.isArray(target) ? target.length : name; if (isLast) { if (utils_default.hasOwnProp(target, name)) { @@ -70112,7 +70219,7 @@ function formDataToJSON(formData) { if (!target[name] || !utils_default.isObject(target[name])) { target[name] = []; } - const result = buildPath(path19, value, target[name], index); + const result = buildPath(path20, value, target[name], index); if (result && utils_default.isArray(target[name])) { target[name] = arrayToObject(target[name]); } @@ -70131,7 +70238,7 @@ var formDataToJSON_default; var init_formDataToJSON = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/helpers/formDataToJSON.js"() { "use strict"; - init_utils3(); + init_utils4(); formDataToJSON_default = formDataToJSON; } }); @@ -70154,7 +70261,7 @@ var DEFAULT_CONTENT_TYPE, defaults3, defaults_default; var init_defaults = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/defaults/index.js"() { "use strict"; - init_utils3(); + init_utils4(); init_AxiosError(); init_transitional(); init_toFormData(); @@ -70268,7 +70375,7 @@ var ignoreDuplicateOf, parseHeaders_default; var init_parseHeaders = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/helpers/parseHeaders.js"() { "use strict"; - init_utils3(); + init_utils4(); ignoreDuplicateOf = utils_default.toObjectSet([ "age", "authorization", @@ -70370,7 +70477,7 @@ var $internals, isValidHeaderName, AxiosHeaders, AxiosHeaders_default; var init_AxiosHeaders = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/core/AxiosHeaders.js"() { "use strict"; - init_utils3(); + init_utils4(); init_parseHeaders(); $internals = Symbol("internals"); isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()); @@ -70548,7 +70655,7 @@ function transformData(fns, response) { var init_transformData = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/core/transformData.js"() { "use strict"; - init_utils3(); + init_utils4(); init_defaults(); init_AxiosHeaders(); } @@ -70574,7 +70681,7 @@ var init_CanceledError = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/cancel/CanceledError.js"() { "use strict"; init_AxiosError(); - init_utils3(); + init_utils4(); utils_default.inherits(CanceledError, AxiosError_default, { __CANCEL__: true }); @@ -71297,7 +71404,7 @@ var init_AxiosTransformStream = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/helpers/AxiosTransformStream.js"() { "use strict"; import_stream = __toESM(require("stream"), 1); - init_utils3(); + init_utils4(); init_throttle(); init_speedometer(); kInternals = Symbol("internals"); @@ -71477,7 +71584,7 @@ var init_formDataToStream = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/helpers/formDataToStream.js"() { import_util = require("util"); import_stream2 = require("stream"); - init_utils3(); + init_utils4(); init_readBlob(); BOUNDARY_ALPHABET = utils_default.ALPHABET.ALPHA_DIGIT + "-_"; textEncoder = new import_util.TextEncoder(); @@ -71633,7 +71740,7 @@ var import_proxy_from_env, import_http3, import_https2, import_util2, import_fol var init_http = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/adapters/http.js"() { "use strict"; - init_utils3(); + init_utils4(); init_settle(); init_buildFullPath(); init_buildURL(); @@ -71853,9 +71960,9 @@ var init_http = __esm({ auth = urlUsername + ":" + urlPassword; } auth && headers.delete("authorization"); - let path19; + let path20; try { - path19 = buildURL( + path20 = buildURL( parsed.pathname + parsed.search, config.params, config.paramsSerializer @@ -71873,7 +71980,7 @@ var init_http = __esm({ false ); const options2 = { - path: path19, + path: path20, method, headers: headers.toJSON(), agents: { http: config.httpAgent, https: config.httpsAgent }, @@ -72096,20 +72203,20 @@ var cookies_default; var init_cookies = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/helpers/cookies.js"() { "use strict"; - init_utils3(); + init_utils4(); init_platform2(); cookies_default = node_default.isStandardBrowserEnv ? ( // Standard browser envs support document.cookie function standardBrowserEnv() { return { - write: function write(name, value, expires, path19, domain2, secure) { + write: function write(name, value, expires, path20, domain2, secure) { const cookie = []; cookie.push(name + "=" + encodeURIComponent(value)); if (utils_default.isNumber(expires)) { cookie.push("expires=" + new Date(expires).toGMTString()); } - if (utils_default.isString(path19)) { - cookie.push("path=" + path19); + if (utils_default.isString(path20)) { + cookie.push("path=" + path20); } if (utils_default.isString(domain2)) { cookie.push("domain=" + domain2); @@ -72150,7 +72257,7 @@ var isURLSameOrigin_default; var init_isURLSameOrigin = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/helpers/isURLSameOrigin.js"() { "use strict"; - init_utils3(); + init_utils4(); init_platform2(); isURLSameOrigin_default = node_default.isStandardBrowserEnv ? ( // Standard browser envs have full support of the APIs needed to test @@ -72222,7 +72329,7 @@ var isXHRAdapterSupported, xhr_default; var init_xhr = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/adapters/xhr.js"() { "use strict"; - init_utils3(); + init_utils4(); init_settle(); init_cookies(); init_buildURL(); @@ -72378,7 +72485,7 @@ var init_xhr = __esm({ var knownAdapters, adapters_default; var init_adapters = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/adapters/adapters.js"() { - init_utils3(); + init_utils4(); init_http(); init_xhr(); init_AxiosError(); @@ -72565,7 +72672,7 @@ var headersToObject; var init_mergeConfig = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/core/mergeConfig.js"() { "use strict"; - init_utils3(); + init_utils4(); init_AxiosHeaders(); headersToObject = (thing) => thing instanceof AxiosHeaders_default ? thing.toJSON() : thing; } @@ -72642,7 +72749,7 @@ var validators2, Axios, Axios_default; var init_Axios = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/core/Axios.js"() { "use strict"; - init_utils3(); + init_utils4(); init_buildURL(); init_InterceptorManager(); init_dispatchRequest(); @@ -72911,7 +73018,7 @@ function isAxiosError(payload) { var init_isAxiosError = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/helpers/isAxiosError.js"() { "use strict"; - init_utils3(); + init_utils4(); } }); @@ -73006,7 +73113,7 @@ var axios, axios_default; var init_axios = __esm({ "../node_modules/.pnpm/axios@1.3.6/node_modules/axios/lib/axios.js"() { "use strict"; - init_utils3(); + init_utils4(); init_bind(); init_Axios(); init_mergeConfig(); @@ -73462,7 +73569,7 @@ var require_traverse = __commonJS({ }(this.value); }; function walk(root, cb, immutable) { - var path19 = []; + var path20 = []; var parents = []; var alive = true; return function walker(node_) { @@ -73471,11 +73578,11 @@ var require_traverse = __commonJS({ var state = { node, node_, - path: [].concat(path19), + path: [].concat(path20), parent: parents.slice(-1)[0], - key: path19.slice(-1)[0], - isRoot: path19.length === 0, - level: path19.length, + key: path20.slice(-1)[0], + isRoot: path20.length === 0, + level: path20.length, circular: null, update: function(x) { if (!state.isRoot) { @@ -73533,7 +73640,7 @@ var require_traverse = __commonJS({ parents.push(state); var keys = Object.keys(state.node); keys.forEach(function(key, i2) { - path19.push(key); + path20.push(key); if (modifiers.pre) modifiers.pre.call(state, state.node[key], key); var child = walker(state.node[key]); @@ -73544,7 +73651,7 @@ var require_traverse = __commonJS({ child.isFirst = i2 == 0; if (modifiers.post) modifiers.post.call(state, child); - path19.pop(); + path20.pop(); }); parents.pop(); } @@ -78136,7 +78243,7 @@ var require_promisify = __commonJS({ util2.toFastProperties(obj2); return obj2; } - function promisify5(callback, receiver, multiArgs) { + function promisify6(callback, receiver, multiArgs) { return makeNodePromisified( callback, receiver, @@ -78156,7 +78263,7 @@ var require_promisify = __commonJS({ options2 = Object(options2); var receiver = options2.context === void 0 ? THIS : options2.context; var multiArgs = !!options2.multiArgs; - var ret2 = promisify5(fn, receiver, multiArgs); + var ret2 = promisify6(fn, receiver, multiArgs); util2.copyDescriptors(fn, ret2, propsFilter); return ret2; }; @@ -82261,7 +82368,7 @@ var require_polyfills = __commonJS({ fs7.fstatSync = statFixSync(fs7.fstatSync); fs7.lstatSync = statFixSync(fs7.lstatSync); if (fs7.chmod && !fs7.lchmod) { - fs7.lchmod = function(path19, mode, cb) { + fs7.lchmod = function(path20, mode, cb) { if (cb) process.nextTick(cb); }; @@ -82269,7 +82376,7 @@ var require_polyfills = __commonJS({ }; } if (fs7.chown && !fs7.lchown) { - fs7.lchown = function(path19, uid, gid, cb) { + fs7.lchown = function(path20, uid, gid, cb) { if (cb) process.nextTick(cb); }; @@ -82340,9 +82447,9 @@ var require_polyfills = __commonJS({ }; }(fs7.readSync); function patchLchmod(fs8) { - fs8.lchmod = function(path19, mode, callback) { + fs8.lchmod = function(path20, mode, callback) { fs8.open( - path19, + path20, constants2.O_WRONLY | constants2.O_SYMLINK, mode, function(err3, fd) { @@ -82360,8 +82467,8 @@ var require_polyfills = __commonJS({ } ); }; - fs8.lchmodSync = function(path19, mode) { - var fd = fs8.openSync(path19, constants2.O_WRONLY | constants2.O_SYMLINK, mode); + fs8.lchmodSync = function(path20, mode) { + var fd = fs8.openSync(path20, constants2.O_WRONLY | constants2.O_SYMLINK, mode); var threw = true; var ret2; try { @@ -82382,8 +82489,8 @@ var require_polyfills = __commonJS({ } function patchLutimes(fs8) { if (constants2.hasOwnProperty("O_SYMLINK") && fs8.futimes) { - fs8.lutimes = function(path19, at, mt, cb) { - fs8.open(path19, constants2.O_SYMLINK, function(er, fd) { + fs8.lutimes = function(path20, at, mt, cb) { + fs8.open(path20, constants2.O_SYMLINK, function(er, fd) { if (er) { if (cb) cb(er); @@ -82397,8 +82504,8 @@ var require_polyfills = __commonJS({ }); }); }; - fs8.lutimesSync = function(path19, at, mt) { - var fd = fs8.openSync(path19, constants2.O_SYMLINK); + fs8.lutimesSync = function(path20, at, mt) { + var fd = fs8.openSync(path20, constants2.O_SYMLINK); var ret2; var threw = true; try { @@ -82534,12 +82641,12 @@ var require_legacy_streams = __commonJS({ ReadStream, WriteStream }; - function ReadStream(path19, options2) { + function ReadStream(path20, options2) { if (!(this instanceof ReadStream)) - return new ReadStream(path19, options2); + return new ReadStream(path20, options2); Stream2.call(this); var self2 = this; - this.path = path19; + this.path = path20; this.fd = null; this.readable = true; this.paused = false; @@ -82585,11 +82692,11 @@ var require_legacy_streams = __commonJS({ self2._read(); }); } - function WriteStream(path19, options2) { + function WriteStream(path20, options2) { if (!(this instanceof WriteStream)) - return new WriteStream(path19, options2); + return new WriteStream(path20, options2); Stream2.call(this); - this.path = path19; + this.path = path20; this.fd = null; this.writable = true; this.flags = "w"; @@ -82731,15 +82838,15 @@ var require_graceful_fs = __commonJS({ fs8.createReadStream = createReadStream3; fs8.createWriteStream = createWriteStream3; var fs$readFile = fs8.readFile; - fs8.readFile = readFile5; - function readFile5(path19, options2, cb) { + fs8.readFile = readFile6; + function readFile6(path20, options2, cb) { if (typeof options2 === "function") cb = options2, options2 = null; - return go$readFile(path19, options2, cb); - function go$readFile(path20, options3, cb2, startTime) { - return fs$readFile(path20, options3, function(err3) { + return go$readFile(path20, options2, cb); + function go$readFile(path21, options3, cb2, startTime) { + return fs$readFile(path21, options3, function(err3) { if (err3 && (err3.code === "EMFILE" || err3.code === "ENFILE")) - enqueue([go$readFile, [path20, options3, cb2], err3, startTime || Date.now(), Date.now()]); + enqueue([go$readFile, [path21, options3, cb2], err3, startTime || Date.now(), Date.now()]); else { if (typeof cb2 === "function") cb2.apply(this, arguments); @@ -82749,14 +82856,14 @@ var require_graceful_fs = __commonJS({ } var fs$writeFile = fs8.writeFile; fs8.writeFile = writeFile4; - function writeFile4(path19, data, options2, cb) { + function writeFile4(path20, data, options2, cb) { if (typeof options2 === "function") cb = options2, options2 = null; - return go$writeFile(path19, data, options2, cb); - function go$writeFile(path20, data2, options3, cb2, startTime) { - return fs$writeFile(path20, data2, options3, function(err3) { + return go$writeFile(path20, data, options2, cb); + function go$writeFile(path21, data2, options3, cb2, startTime) { + return fs$writeFile(path21, data2, options3, function(err3) { if (err3 && (err3.code === "EMFILE" || err3.code === "ENFILE")) - enqueue([go$writeFile, [path20, data2, options3, cb2], err3, startTime || Date.now(), Date.now()]); + enqueue([go$writeFile, [path21, data2, options3, cb2], err3, startTime || Date.now(), Date.now()]); else { if (typeof cb2 === "function") cb2.apply(this, arguments); @@ -82767,14 +82874,14 @@ var require_graceful_fs = __commonJS({ var fs$appendFile = fs8.appendFile; if (fs$appendFile) fs8.appendFile = appendFile; - function appendFile(path19, data, options2, cb) { + function appendFile(path20, data, options2, cb) { if (typeof options2 === "function") cb = options2, options2 = null; - return go$appendFile(path19, data, options2, cb); - function go$appendFile(path20, data2, options3, cb2, startTime) { - return fs$appendFile(path20, data2, options3, function(err3) { + return go$appendFile(path20, data, options2, cb); + function go$appendFile(path21, data2, options3, cb2, startTime) { + return fs$appendFile(path21, data2, options3, function(err3) { if (err3 && (err3.code === "EMFILE" || err3.code === "ENFILE")) - enqueue([go$appendFile, [path20, data2, options3, cb2], err3, startTime || Date.now(), Date.now()]); + enqueue([go$appendFile, [path21, data2, options3, cb2], err3, startTime || Date.now(), Date.now()]); else { if (typeof cb2 === "function") cb2.apply(this, arguments); @@ -82805,31 +82912,31 @@ var require_graceful_fs = __commonJS({ var fs$readdir = fs8.readdir; fs8.readdir = readdir4; var noReaddirOptionVersions = /^v[0-5]\./; - function readdir4(path19, options2, cb) { + function readdir4(path20, options2, cb) { if (typeof options2 === "function") cb = options2, options2 = null; - var go$readdir = noReaddirOptionVersions.test(process.version) ? function go$readdir2(path20, options3, cb2, startTime) { - return fs$readdir(path20, fs$readdirCallback( - path20, + var go$readdir = noReaddirOptionVersions.test(process.version) ? function go$readdir2(path21, options3, cb2, startTime) { + return fs$readdir(path21, fs$readdirCallback( + path21, options3, cb2, startTime )); - } : function go$readdir2(path20, options3, cb2, startTime) { - return fs$readdir(path20, options3, fs$readdirCallback( - path20, + } : function go$readdir2(path21, options3, cb2, startTime) { + return fs$readdir(path21, options3, fs$readdirCallback( + path21, options3, cb2, startTime )); }; - return go$readdir(path19, options2, cb); - function fs$readdirCallback(path20, options3, cb2, startTime) { + return go$readdir(path20, options2, cb); + function fs$readdirCallback(path21, options3, cb2, startTime) { return function(err3, files) { if (err3 && (err3.code === "EMFILE" || err3.code === "ENFILE")) enqueue([ go$readdir, - [path20, options3, cb2], + [path21, options3, cb2], err3, startTime || Date.now(), Date.now() @@ -82900,7 +83007,7 @@ var require_graceful_fs = __commonJS({ enumerable: true, configurable: true }); - function ReadStream(path19, options2) { + function ReadStream(path20, options2) { if (this instanceof ReadStream) return fs$ReadStream.apply(this, arguments), this; else @@ -82920,7 +83027,7 @@ var require_graceful_fs = __commonJS({ } }); } - function WriteStream(path19, options2) { + function WriteStream(path20, options2) { if (this instanceof WriteStream) return fs$WriteStream.apply(this, arguments), this; else @@ -82938,22 +83045,22 @@ var require_graceful_fs = __commonJS({ } }); } - function createReadStream3(path19, options2) { - return new fs8.ReadStream(path19, options2); + function createReadStream3(path20, options2) { + return new fs8.ReadStream(path20, options2); } - function createWriteStream3(path19, options2) { - return new fs8.WriteStream(path19, options2); + function createWriteStream3(path20, options2) { + return new fs8.WriteStream(path20, options2); } var fs$open = fs8.open; fs8.open = open; - function open(path19, flags2, mode, cb) { + function open(path20, flags2, mode, cb) { if (typeof mode === "function") cb = mode, mode = null; - return go$open(path19, flags2, mode, cb); - function go$open(path20, flags3, mode2, cb2, startTime) { - return fs$open(path20, flags3, mode2, function(err3, fd) { + return go$open(path20, flags2, mode, cb); + function go$open(path21, flags3, mode2, cb2, startTime) { + return fs$open(path21, flags3, mode2, function(err3, fd) { if (err3 && (err3.code === "EMFILE" || err3.code === "ENFILE")) - enqueue([go$open, [path20, flags3, mode2, cb2], err3, startTime || Date.now(), Date.now()]); + enqueue([go$open, [path21, flags3, mode2, cb2], err3, startTime || Date.now(), Date.now()]); else { if (typeof cb2 === "function") cb2.apply(this, arguments); @@ -83100,7 +83207,7 @@ var require_dir_reader = __commonJS({ module2.exports = DirReader; var fs7 = require_graceful_fs(); var inherits3 = require_inherits2(); - var path19 = require("path"); + var path20 = require("path"); var Reader = require_reader(); var assert2 = require("assert").ok; inherits3(DirReader, Reader); @@ -83160,7 +83267,7 @@ var require_dir_reader = __commonJS({ } return; } - var p = path19.resolve(self2._path, self2.entries[self2._index]); + var p = path20.resolve(self2._path, self2.entries[self2._index]); assert2(p !== self2._path); assert2(self2.entries[self2._index]); self2._currentEntry = p; @@ -83169,12 +83276,12 @@ var require_dir_reader = __commonJS({ return self2.error(er); var who = self2._proxy || self2; stat7.path = p; - stat7.basename = path19.basename(p); - stat7.dirname = path19.dirname(p); + stat7.basename = path20.basename(p); + stat7.dirname = path20.dirname(p); var childProps = self2.getChildProps.call(who, stat7); childProps.path = p; - childProps.basename = path19.basename(p); - childProps.dirname = path19.dirname(p); + childProps.basename = path20.basename(p); + childProps.dirname = path20.dirname(p); var entry = Reader(childProps, stat7); self2._currentEntry = entry; entry.on("pause", function(who2) { @@ -83524,7 +83631,7 @@ var require_reader = __commonJS({ var fs7 = require_graceful_fs(); var Stream2 = require("stream").Stream; var inherits3 = require_inherits2(); - var path19 = require("path"); + var path20 = require("path"); var getType = require_get_type(); var hardLinks = Reader.hardLinks = {}; var Abstract = require_abstract(); @@ -83583,7 +83690,7 @@ var require_reader = __commonJS({ self2.depth = props.depth = props.depth || 0; self2.parent = props.parent || null; self2.root = props.root || props.parent && props.parent.root || self2; - self2._path = self2.path = path19.resolve(props.path); + self2._path = self2.path = path20.resolve(props.path); if (process.platform === "win32") { self2.path = self2._path = self2.path.replace(/\?/g, "_"); if (self2._path.length >= 260) { @@ -83591,8 +83698,8 @@ var require_reader = __commonJS({ self2._path = "\\\\?\\" + self2.path.replace(/\//g, "\\"); } } - self2.basename = props.basename = path19.basename(self2.path); - self2.dirname = props.dirname = path19.dirname(self2.path); + self2.basename = props.basename = path20.basename(self2.path); + self2.dirname = props.dirname = path20.dirname(self2.path); props.parent = props.root = null; self2.size = props.size; self2.filter = typeof props.filter === "function" ? props.filter : null; @@ -84143,7 +84250,7 @@ var require_minimatch = __commonJS({ "../node_modules/.pnpm/minimatch@3.1.2/node_modules/minimatch/minimatch.js"(exports2, module2) { module2.exports = minimatch2; minimatch2.Minimatch = Minimatch2; - var path19 = function() { + var path20 = function() { try { return require("path"); } catch (e) { @@ -84151,7 +84258,7 @@ var require_minimatch = __commonJS({ }() || { sep: "/" }; - minimatch2.sep = path19.sep; + minimatch2.sep = path20.sep; var GLOBSTAR2 = minimatch2.GLOBSTAR = Minimatch2.GLOBSTAR = {}; var expand2 = require_brace_expansion2(); var plTypes = { @@ -84242,8 +84349,8 @@ var require_minimatch = __commonJS({ if (!options2) options2 = {}; pattern = pattern.trim(); - if (!options2.allowWindowsEscape && path19.sep !== "/") { - pattern = pattern.split(path19.sep).join("/"); + if (!options2.allowWindowsEscape && path20.sep !== "/") { + pattern = pattern.split(path20.sep).join("/"); } this.options = options2; this.set = []; @@ -84620,8 +84727,8 @@ var require_minimatch = __commonJS({ if (f === "/" && partial) return true; var options2 = this.options; - if (path19.sep !== "/") { - f = f.split(path19.sep).join("/"); + if (path20.sep !== "/") { + f = f.split(path20.sep).join("/"); } f = f.split(slashSplit); this.debug(this.pattern, "split", f); @@ -84732,12 +84839,12 @@ var require_minimatch = __commonJS({ var require_path_is_absolute = __commonJS({ "../node_modules/.pnpm/path-is-absolute@1.0.1/node_modules/path-is-absolute/index.js"(exports2, module2) { "use strict"; - function posix4(path19) { - return path19.charAt(0) === "/"; + function posix4(path20) { + return path20.charAt(0) === "/"; } - function win322(path19) { + function win322(path20) { var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; - var result = splitDeviceRe.exec(path19); + var result = splitDeviceRe.exec(path20); var device = result[1] || ""; var isUnc = Boolean(device && device.charAt(1) !== ":"); return Boolean(result[2] || isUnc); @@ -84762,7 +84869,7 @@ var require_common = __commonJS({ return Object.prototype.hasOwnProperty.call(obj2, field); } var fs7 = require("fs"); - var path19 = require("path"); + var path20 = require("path"); var minimatch2 = require_minimatch(); var isAbsolute = require_path_is_absolute(); var Minimatch2 = minimatch2.Minimatch; @@ -84827,11 +84934,11 @@ var require_common = __commonJS({ if (!ownProp(options2, "cwd")) self2.cwd = cwd; else { - self2.cwd = path19.resolve(options2.cwd); + self2.cwd = path20.resolve(options2.cwd); self2.changedCwd = self2.cwd !== cwd; } - self2.root = options2.root || path19.resolve(self2.cwd, "/"); - self2.root = path19.resolve(self2.root); + self2.root = options2.root || path20.resolve(self2.cwd, "/"); + self2.root = path20.resolve(self2.root); if (process.platform === "win32") self2.root = self2.root.replace(/\\/g, "/"); self2.cwdAbs = isAbsolute(self2.cwd) ? self2.cwd : makeAbs(self2, self2.cwd); @@ -84913,30 +85020,30 @@ var require_common = __commonJS({ function makeAbs(self2, f) { var abs = f; if (f.charAt(0) === "/") { - abs = path19.join(self2.root, f); + abs = path20.join(self2.root, f); } else if (isAbsolute(f) || f === "") { abs = f; } else if (self2.changedCwd) { - abs = path19.resolve(self2.cwd, f); + abs = path20.resolve(self2.cwd, f); } else { - abs = path19.resolve(f); + abs = path20.resolve(f); } if (process.platform === "win32") abs = abs.replace(/\\/g, "/"); return abs; } - function isIgnored(self2, path20) { + function isIgnored(self2, path21) { if (!self2.ignore.length) return false; return self2.ignore.some(function(item) { - return item.matcher.match(path20) || !!(item.gmatcher && item.gmatcher.match(path20)); + return item.matcher.match(path21) || !!(item.gmatcher && item.gmatcher.match(path21)); }); } - function childrenIgnored(self2, path20) { + function childrenIgnored(self2, path21) { if (!self2.ignore.length) return false; return self2.ignore.some(function(item) { - return !!(item.gmatcher && item.gmatcher.match(path20)); + return !!(item.gmatcher && item.gmatcher.match(path21)); }); } } @@ -84952,7 +85059,7 @@ var require_sync = __commonJS({ var Minimatch2 = minimatch2.Minimatch; var Glob2 = require_glob().Glob; var util2 = require("util"); - var path19 = require("path"); + var path20 = require("path"); var assert2 = require("assert"); var isAbsolute = require_path_is_absolute(); var common2 = require_common(); @@ -85080,7 +85187,7 @@ var require_sync = __commonJS({ e = prefix + e; } if (e.charAt(0) === "/" && !this.nomount) { - e = path19.join(this.root, e); + e = path20.join(this.root, e); } this._emitMatch(index, e); } @@ -85229,9 +85336,9 @@ var require_sync = __commonJS({ if (prefix && isAbsolute(prefix) && !this.nomount) { var trail = /[\/\\]$/.test(prefix); if (prefix.charAt(0) === "/") { - prefix = path19.join(this.root, prefix); + prefix = path20.join(this.root, prefix); } else { - prefix = path19.resolve(this.root, prefix); + prefix = path20.resolve(this.root, prefix); if (trail) prefix += "/"; } @@ -85426,7 +85533,7 @@ var require_glob = __commonJS({ var Minimatch2 = minimatch2.Minimatch; var inherits3 = require_inherits2(); var EE = require("events").EventEmitter; - var path19 = require("path"); + var path20 = require("path"); var assert2 = require("assert"); var isAbsolute = require_path_is_absolute(); var globSync2 = require_sync(); @@ -85709,7 +85816,7 @@ var require_glob = __commonJS({ e = prefix + e; } if (e.charAt(0) === "/" && !this.nomount) { - e = path19.join(this.root, e); + e = path20.join(this.root, e); } this._emitMatch(index, e); } @@ -85896,9 +86003,9 @@ var require_glob = __commonJS({ if (prefix && isAbsolute(prefix) && !this.nomount) { var trail = /[\/\\]$/.test(prefix); if (prefix.charAt(0) === "/") { - prefix = path19.join(this.root, prefix); + prefix = path20.join(this.root, prefix); } else { - prefix = path19.resolve(this.root, prefix); + prefix = path20.resolve(this.root, prefix); if (trail) prefix += "/"; } @@ -85978,7 +86085,7 @@ var require_rimraf = __commonJS({ module2.exports = rimraf2; rimraf2.sync = rimrafSync2; var assert2 = require("assert"); - var path19 = require("path"); + var path20 = require("path"); var fs7 = require("fs"); var glob2 = void 0; try { @@ -86170,7 +86277,7 @@ var require_rimraf = __commonJS({ return options2.rmdir(p, cb); var errState; files.forEach(function(f) { - rimraf2(path19.join(p, f), options2, function(er2) { + rimraf2(path20.join(p, f), options2, function(er2) { if (errState) return; if (er2) @@ -86247,7 +86354,7 @@ var require_rimraf = __commonJS({ assert2(p); assert2(options2); options2.readdirSync(p).forEach(function(f) { - rimrafSync2(path19.join(p, f), options2); + rimrafSync2(path20.join(p, f), options2); }); var retries = isWindows2 ? 100 : 1; var i = 0; @@ -86269,7 +86376,7 @@ var require_rimraf = __commonJS({ // ../node_modules/.pnpm/mkdirp@0.5.6/node_modules/mkdirp/index.js var require_mkdirp = __commonJS({ "../node_modules/.pnpm/mkdirp@0.5.6/node_modules/mkdirp/index.js"(exports2, module2) { - var path19 = require("path"); + var path20 = require("path"); var fs7 = require("fs"); var _0777 = parseInt("0777", 8); module2.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; @@ -86290,7 +86397,7 @@ var require_mkdirp = __commonJS({ var cb = f || /* istanbul ignore next */ function() { }; - p = path19.resolve(p); + p = path20.resolve(p); xfs.mkdir(p, mode, function(er) { if (!er) { made = made || p; @@ -86298,9 +86405,9 @@ var require_mkdirp = __commonJS({ } switch (er.code) { case "ENOENT": - if (path19.dirname(p) === p) + if (path20.dirname(p) === p) return cb(er); - mkdirP(path19.dirname(p), opts, function(er2, made2) { + mkdirP(path20.dirname(p), opts, function(er2, made2) { if (er2) cb(er2, made2); else @@ -86329,14 +86436,14 @@ var require_mkdirp = __commonJS({ } if (!made) made = null; - p = path19.resolve(p); + p = path20.resolve(p); try { xfs.mkdirSync(p, mode); made = made || p; } catch (err0) { switch (err0.code) { case "ENOENT": - made = sync2(path19.dirname(p), opts, made); + made = sync2(path20.dirname(p), opts, made); sync2(p, opts, made); break; default: @@ -86429,7 +86536,7 @@ var require_dir_writer = __commonJS({ var Writer = require_writer(); var inherits3 = require_inherits2(); var mkdir6 = require_mkdirp(); - var path19 = require("path"); + var path20 = require("path"); var collect = require_collect(); inherits3(DirWriter, Writer); function DirWriter(props) { @@ -86508,7 +86615,7 @@ var require_dir_writer = __commonJS({ if (entry.parent) { pp = pp.substr(entry.parent._path.length + 1); } - props.path = path19.join(self2.path, path19.join("/", pp)); + props.path = path20.join(self2.path, path20.join("/", pp)); props.filter = self2.filter; Object.keys(entry.props).forEach(function(k) { if (!props.hasOwnProperty(k)) { @@ -86550,7 +86657,7 @@ var require_link_writer = __commonJS({ var fs7 = require_graceful_fs(); var Writer = require_writer(); var inherits3 = require_inherits2(); - var path19 = require("path"); + var path20 = require("path"); var rimraf2 = require_rimraf(); inherits3(LinkWriter, Writer); function LinkWriter(props) { @@ -86572,7 +86679,7 @@ var require_link_writer = __commonJS({ var self2 = this; var hard = self2.type === "Link" || process.platform === "win32"; var link = hard ? "link" : "symlink"; - var lp = hard ? path19.resolve(self2.dirname, self2.linkpath) : self2.linkpath; + var lp = hard ? path20.resolve(self2.dirname, self2.linkpath) : self2.linkpath; if (hard) return clobber(self2, lp, link); fs7.readlink(self2._path, function(er, p) { @@ -86808,7 +86915,7 @@ var require_writer = __commonJS({ var inherits3 = require_inherits2(); var rimraf2 = require_rimraf(); var mkdir6 = require_mkdirp(); - var path19 = require("path"); + var path20 = require("path"); var umask = process.platform === "win32" ? 0 : process.umask(); var getType = require_get_type(); var Abstract = require_abstract(); @@ -86853,7 +86960,7 @@ var require_writer = __commonJS({ self2.clobber = props.clobber === false ? props.clobber : true; self2.parent = props.parent || null; self2.root = props.root || props.parent && props.parent.root || self2; - self2._path = self2.path = path19.resolve(props.path); + self2._path = self2.path = path20.resolve(props.path); if (process.platform === "win32") { self2.path = self2._path = self2.path.replace(/\?/g, "_"); if (self2._path.length >= 260) { @@ -86861,8 +86968,8 @@ var require_writer = __commonJS({ self2._path = "\\\\?\\" + self2.path.replace(/\//g, "\\"); } } - self2.basename = path19.basename(props.path); - self2.dirname = path19.dirname(props.path); + self2.basename = path20.basename(props.path); + self2.dirname = path20.dirname(props.path); self2.linkpath = props.linkpath || null; props.parent = props.root = null; self2.size = props.size; @@ -86918,14 +87025,14 @@ var require_writer = __commonJS({ } }; function create2(self2) { - mkdir6(path19.dirname(self2._path), Writer.dirmode, function(er, made) { + mkdir6(path20.dirname(self2._path), Writer.dirmode, function(er, made) { if (er) return self2.error(er); self2._madeDir = made; return self2._create(); }); } - function endChmod(self2, want, current, path20, cb) { + function endChmod(self2, want, current, path21, cb) { var wantMode = want.mode; var chmod4 = want.follow || self2.type !== "SymbolicLink" ? "chmod" : "lchmod"; if (!fs7[chmod4]) @@ -86936,9 +87043,9 @@ var require_writer = __commonJS({ wantMode = wantMode & parseInt("0777", 8); if (wantMode === curMode) return cb(); - fs7[chmod4](path20, wantMode, cb); + fs7[chmod4](path21, wantMode, cb); } - function endChown(self2, want, current, path20, cb) { + function endChown(self2, want, current, path21, cb) { if (process.platform === "win32") return cb(); if (!process.getuid || process.getuid() !== 0) @@ -86954,9 +87061,9 @@ var require_writer = __commonJS({ want.uid = current.uid; if (typeof want.gid !== "number") want.gid = current.gid; - fs7[chown](path20, want.uid, want.gid, cb); + fs7[chown](path21, want.uid, want.gid, cb); } - function endUtimes(self2, want, current, path20, cb) { + function endUtimes(self2, want, current, path21, cb) { if (!fs7.utimes || process.platform === "win32") return cb(); var utimes = want.follow || self2.type !== "SymbolicLink" ? "utimes" : "lutimes"; @@ -86979,7 +87086,7 @@ var require_writer = __commonJS({ meA = new Date(meM); if (meA.getTime() === curA.getTime() && meM.getTime() === curM.getTime()) return cb(); - fs7[utimes](path20, meA, meM, cb); + fs7[utimes](path21, meA, meM, cb); } Writer.prototype._finish = function() { var self2 = this; @@ -87048,7 +87155,7 @@ var require_writer = __commonJS({ }; function endMadeDir(self2, p, cb) { var made = self2._madeDir; - var d = path19.dirname(p); + var d = path20.dirname(p); endMadeDir_(self2, d, function(er) { if (er) return cb(er); @@ -87142,18 +87249,18 @@ var require_extract = __commonJS({ module2.exports = Extract; var Parse3 = require_parse2(); var Writer = require_fstream().Writer; - var path19 = require("path"); + var path20 = require("path"); var stream5 = require("stream"); var duplexer2 = require_duplexer2(); var Promise2 = require_bluebird(); function Extract(opts) { - opts.path = path19.resolve(path19.normalize(opts.path)); + opts.path = path20.resolve(path20.normalize(opts.path)); var parser2 = new Parse3(opts); var outStream = new stream5.Writable({ objectMode: true }); outStream._write = function(entry, encoding, cb) { if (entry.type == "Directory") return cb(); - var extractPath = path19.join(opts.path, entry.path); + var extractPath = path20.join(opts.path, entry.path); if (extractPath.indexOf(opts.path) != 0) { return cb(); } @@ -88691,7 +88798,7 @@ var require_directory = __commonJS({ var BufferStream = require_BufferStream(); var parseExtraField = require_parseExtraField(); var Buffer2 = require_Buffer(); - var path19 = require("path"); + var path20 = require("path"); var Writer = require_fstream().Writer; var parseDateTime = require_parseDateTime(); var signature = Buffer2.alloc(4); @@ -88770,12 +88877,12 @@ var require_directory = __commonJS({ vars.extract = function(opts) { if (!opts || !opts.path) throw new Error("PATH_MISSING"); - opts.path = path19.resolve(path19.normalize(opts.path)); + opts.path = path20.resolve(path20.normalize(opts.path)); return vars.files.then(function(files) { return Promise2.map(files, function(entry) { if (entry.type == "Directory") return; - var extractPath = path19.join(opts.path, entry.path); + var extractPath = path20.join(opts.path, entry.path); if (extractPath.indexOf(opts.path) != 0) { return; } @@ -89429,8 +89536,8 @@ var require_dsn = __commonJS({ return protocol2 === "http" || protocol2 === "https"; } function dsnToString(dsn, withPassword = false) { - const { host, path: path19, pass, port, projectId, protocol: protocol2, publicKey } = dsn; - return `${protocol2}://${publicKey}${withPassword && pass ? `:${pass}` : ""}@${host}${port ? `:${port}` : ""}/${path19 ? `${path19}/` : path19}${projectId}`; + const { host, path: path20, pass, port, projectId, protocol: protocol2, publicKey } = dsn; + return `${protocol2}://${publicKey}${withPassword && pass ? `:${pass}` : ""}@${host}${port ? `:${port}` : ""}/${path20 ? `${path20}/` : path20}${projectId}`; } function dsnFromString(str) { const match2 = DSN_REGEX.exec(str); @@ -89439,11 +89546,11 @@ var require_dsn = __commonJS({ return void 0; } const [protocol2, publicKey, pass = "", host, port = "", lastPath] = match2.slice(1); - let path19 = ""; + let path20 = ""; let projectId = lastPath; const split = projectId.split("/"); if (split.length > 1) { - path19 = split.slice(0, -1).join("/"); + path20 = split.slice(0, -1).join("/"); projectId = split.pop(); } if (projectId) { @@ -89452,7 +89559,7 @@ var require_dsn = __commonJS({ projectId = projectMatch[0]; } } - return dsnFromComponents({ host, pass, path: path19, projectId, port, protocol: protocol2, publicKey }); + return dsnFromComponents({ host, pass, path: path20, projectId, port, protocol: protocol2, publicKey }); } function dsnFromComponents(components) { return { @@ -90764,12 +90871,12 @@ var require_path = __commonJS({ let resolvedPath = ""; let resolvedAbsolute = false; for (let i = args3.length - 1; i >= -1 && !resolvedAbsolute; i--) { - const path19 = i >= 0 ? args3[i] : "/"; - if (!path19) { + const path20 = i >= 0 ? args3[i] : "/"; + if (!path20) { continue; } - resolvedPath = `${path19}/${resolvedPath}`; - resolvedAbsolute = path19.charAt(0) === "/"; + resolvedPath = `${path20}/${resolvedPath}`; + resolvedAbsolute = path20.charAt(0) === "/"; } resolvedPath = normalizeArray( resolvedPath.split("/").filter((p) => !!p), @@ -90815,11 +90922,11 @@ var require_path = __commonJS({ outputParts = outputParts.concat(toParts.slice(samePartsLength)); return outputParts.join("/"); } - function normalizePath(path19) { - const isPathAbsolute = isAbsolute(path19); - const trailingSlash = path19.slice(-1) === "/"; + function normalizePath(path20) { + const isPathAbsolute = isAbsolute(path20); + const trailingSlash = path20.slice(-1) === "/"; let normalizedPath = normalizeArray( - path19.split("/").filter((p) => !!p), + path20.split("/").filter((p) => !!p), !isPathAbsolute ).join("/"); if (!normalizedPath && !isPathAbsolute) { @@ -90830,14 +90937,14 @@ var require_path = __commonJS({ } return (isPathAbsolute ? "/" : "") + normalizedPath; } - function isAbsolute(path19) { - return path19.charAt(0) === "/"; + function isAbsolute(path20) { + return path20.charAt(0) === "/"; } function join6(...args3) { return normalizePath(args3.join("/")); } - function dirname6(path19) { - const result = splitPath(path19); + function dirname6(path20) { + const result = splitPath(path20); const root = result[0]; let dir = result[1]; if (!root && !dir) { @@ -90848,8 +90955,8 @@ var require_path = __commonJS({ } return root + dir; } - function basename4(path19, ext2) { - let f = splitPath(path19)[2]; + function basename4(path20, ext2) { + let f = splitPath(path20)[2]; if (ext2 && f.slice(ext2.length * -1) === ext2) { f = f.slice(0, f.length - ext2.length); } @@ -91114,9 +91221,9 @@ var require_url = __commonJS({ return url2.split(/\\?\//).filter((s) => s.length > 0 && s !== ",").length; } function getSanitizedUrlString(url2) { - const { protocol: protocol2, host, path: path19 } = url2; + const { protocol: protocol2, host, path: path20 } = url2; const filteredHost = host && host.replace(/^.*@/, "[filtered]:[filtered]@").replace(":80", "").replace(":443", "") || ""; - return `${protocol2 ? `${protocol2}://` : ""}${filteredHost}${path19}`; + return `${protocol2 ? `${protocol2}://` : ""}${filteredHost}${path20}`; } exports2.getNumberOfUrlSegments = getNumberOfUrlSegments; exports2.getSanitizedUrlString = getSanitizedUrlString; @@ -91154,13 +91261,13 @@ var require_requestdata = __commonJS({ } function extractPathForTransaction(req, options2 = {}) { const method = req.method && req.method.toUpperCase(); - let path19 = ""; + let path20 = ""; let source = "url"; if (options2.customRoute || req.route) { - path19 = options2.customRoute || `${req.baseUrl || ""}${req.route && req.route.path}`; + path20 = options2.customRoute || `${req.baseUrl || ""}${req.route && req.route.path}`; source = "route"; } else if (req.originalUrl || req.url) { - path19 = url2.stripUrlQueryAndFragment(req.originalUrl || req.url || ""); + path20 = url2.stripUrlQueryAndFragment(req.originalUrl || req.url || ""); } let name = ""; if (options2.method && method) { @@ -91169,8 +91276,8 @@ var require_requestdata = __commonJS({ if (options2.method && options2.path) { name += " "; } - if (options2.path && path19) { - name += path19; + if (options2.path && path20) { + name += path20; } return [name, source]; } @@ -91906,7 +92013,7 @@ var require_cjs2 = __commonJS({ var node = require_node3(); var normalize5 = require_normalize(); var object = require_object(); - var path19 = require_path(); + var path20 = require_path(); var promisebuffer = require_promisebuffer(); var requestdata = require_requestdata(); var severity = require_severity(); @@ -91985,13 +92092,13 @@ var require_cjs2 = __commonJS({ exports2.markFunctionWrapped = object.markFunctionWrapped; exports2.objectify = object.objectify; exports2.urlEncode = object.urlEncode; - exports2.basename = path19.basename; - exports2.dirname = path19.dirname; - exports2.isAbsolute = path19.isAbsolute; - exports2.join = path19.join; - exports2.normalizePath = path19.normalizePath; - exports2.relative = path19.relative; - exports2.resolve = path19.resolve; + exports2.basename = path20.basename; + exports2.dirname = path20.dirname; + exports2.isAbsolute = path20.isAbsolute; + exports2.join = path20.join; + exports2.normalizePath = path20.normalizePath; + exports2.relative = path20.relative; + exports2.resolve = path20.resolve; exports2.makePromiseBuffer = promisebuffer.makePromiseBuffer; exports2.addRequestDataToEvent = requestdata.addRequestDataToEvent; exports2.addRequestDataToTransaction = requestdata.addRequestDataToTransaction; @@ -96298,9 +96405,9 @@ async function getSymfPath(context3) { } return symfPath; } -async function fileExists(path19) { +async function fileExists(path20) { try { - await import_promises2.default.access(path19); + await import_promises2.default.access(path20); return true; } catch { return false; @@ -96351,7 +96458,7 @@ var init_download_symf = __esm({ init_log(); init_os(); init_sentry(); - symfVersion = "v0.0.5"; + symfVersion = "v0.0.6"; } }); @@ -96477,7 +96584,7 @@ var init_download_bfg = __esm({ init_log(); init_os(); init_sentry(); - defaultBfgVersion = "5.2.12792"; + defaultBfgVersion = "5.2.23617"; serializeBfgDownload = Promise.resolve(null); } }); @@ -96561,7 +96668,7 @@ async function refresh(uri) { if (wf.uri.scheme !== "file") { return; } - const ignoreFilePattern = new RelativePattern(wf.uri, CODY_IGNORE_POSIX_GLOB).pattern; + const ignoreFilePattern = new RelativePattern(wf.uri, CODY_IGNORE_POSIX_GLOB); const ignoreFiles = await workspace.findFiles(ignoreFilePattern); const filesWithContent = await Promise.all( ignoreFiles.map(async (fileUri) => ({ @@ -96605,6 +96712,40 @@ var init_cody_ignore = __esm({ } }); +// ../vscode/src/test-support.ts +var Rendezvous, TestSupport; +var init_test_support = __esm({ + "../vscode/src/test-support.ts"() { + "use strict"; + Rendezvous = class { + resolve; + promise; + constructor() { + this.resolve = () => { + }; + this.promise = new Promise((resolve8) => { + this.resolve = resolve8; + }); + } + set(value) { + this.resolve(value); + this.promise = Promise.resolve(value); + } + get() { + return this.promise; + } + }; + TestSupport = class { + static instance; + chatPanelProvider = new Rendezvous(); + ignoreHelper = new Rendezvous(); + async chatMessages() { + return (await this.chatPanelProvider.get()).getViewTranscript(); + } + }; + } +}); + // ../vscode/src/repository/repositoryHelpers.ts function gitDirectoryUri(uri) { return gitAPI()?.getRepository(uri)?.rootUri; @@ -96626,6 +96767,9 @@ async function gitAPIinit() { function init3() { if (!vscodeGitAPI && extension?.isActive) { setUpCodyIgnore(); + if (TestSupport.instance) { + TestSupport.instance.ignoreHelper.set(ignores); + } vscodeGitAPI = extension.exports?.getAPI(1); } } @@ -96673,12 +96817,14 @@ var init_repositoryHelpers = __esm({ init_src(); init_log(); init_cody_ignore(); + init_test_support(); } }); // ../vscode/src/tree-sitter/language.ts function getLanguageConfig(languageId) { switch (languageId) { + case "astro": case "c": case "cpp": case "csharp": @@ -96688,6 +96834,8 @@ function getLanguageConfig(languageId) { case "javascript": case "javascriptreact": case "php": + case "rust": + case "svelte": case "typescript": case "typescriptreact": case "vue": @@ -96705,6 +96853,14 @@ function getLanguageConfig(languageId) { commentStart: "# " }; } + case "elixir": { + return { + blockStart: "do", + blockElseTest: /^[\t ]*(else|else do)/, + blockEnd: "end", + commentStart: "#" + }; + } default: return null; } @@ -99865,7 +100021,7 @@ var init_parse_tree_cache = __esm({ var require_dedent = __commonJS({ "../node_modules/.pnpm/dedent@0.7.0/node_modules/dedent/dist/dedent.js"(exports2, module2) { "use strict"; - function dedent4(strings2) { + function dedent5(strings2) { var raw = void 0; if (typeof strings2 === "string") { raw = [strings2]; @@ -99901,7 +100057,7 @@ var require_dedent = __commonJS({ return result.replace(/\\n/g, "\n"); } if (typeof module2 !== "undefined") { - module2.exports = dedent4; + module2.exports = dedent5; } } }); @@ -100735,39 +100891,6 @@ var init_displayPathEnvInfo = __esm({ } }); -// ../vscode/src/test-support.ts -var Rendezvous, TestSupport; -var init_test_support = __esm({ - "../vscode/src/test-support.ts"() { - "use strict"; - Rendezvous = class { - resolve; - promise; - constructor() { - this.resolve = () => { - }; - this.promise = new Promise((resolve8) => { - this.resolve = resolve8; - }); - } - set(value) { - this.resolve(value); - this.promise = Promise.resolve(value); - } - get() { - return this.promise; - } - }; - TestSupport = class { - static instance; - chatPanelProvider = new Rendezvous(); - async chatMessages() { - return (await this.chatPanelProvider.get()).getViewTranscript(); - } - }; - } -}); - // ../vscode/src/extension-api.ts var ExtensionApi; var init_extension_api = __esm({ @@ -101218,23 +101341,109 @@ var init_release = __esm({ } }); +// ../vscode/src/commands/index.ts +function getCommandTreeItems() { + return CodyCommandMenuItems.map((item) => { + return { + ...item, + title: item.description, + description: item.keybinding + }; + }); +} +var osIcon, CodyCommandMenuItems; +var init_commands = __esm({ + "../vscode/src/commands/index.ts"() { + "use strict"; + init_platform(); + osIcon = isMac() ? "\u2325" : "Alt+"; + CodyCommandMenuItems = [ + { + key: "ask", + description: "New Chat", + prompt: "Start a new chat", + icon: "comment", + command: { command: "cody.chat.panel.new" }, + keybinding: `${osIcon}L`, + mode: "ask", + type: "default" + }, + { + key: "edit", + description: "Edit Code", + prompt: "Start a code edit", + icon: "wand", + command: { command: "cody.command.edit-code" }, + keybinding: `${osIcon}K`, + mode: "edit", + type: "default" + }, + { + key: "doc", + description: "Document Code", + icon: "book", + command: { command: "cody.command.document-code" }, + keybinding: "", + mode: "edit", + type: "default" + }, + { + key: "explain", + description: "Explain Code", + icon: "file-binary", + command: { command: "cody.command.explain-code" }, + keybinding: "", + mode: "ask", + type: "default" + }, + { + key: "test", + description: "Generate Unit Tests", + icon: "package", + command: { command: "cody.command.unit-tests" }, + keybinding: "", + mode: "edit", + type: "default" + }, + { + key: "smell", + description: "Find Code Smells", + icon: "checklist", + command: { command: "cody.command.smell-code" }, + keybinding: "", + mode: "ask", + type: "default" + }, + { + key: "custom", + description: "Custom Commands", + icon: "tools", + command: { command: "cody.menu.custom-commands" }, + keybinding: `${osIcon}\u21E7C`, + type: "default" + } + ]; + } +}); + // ../vscode/src/services/treeViewItems.ts function getCodyTreeItems(type) { switch (type) { case "command": - return commandsItems; + return getCommandTreeItems(); case "support": return supportItems; default: return []; } } -var supportItems, commandsItems; +var supportItems; var init_treeViewItems = __esm({ "../vscode/src/services/treeViewItems.ts"() { "use strict"; init_release(); init_version(); + init_commands(); supportItems = [ { title: "Upgrade", @@ -101287,50 +101496,6 @@ var init_treeViewItems = __esm({ command: { command: "cody.sidebar.account" } } ]; - commandsItems = [ - { - title: "Chat", - icon: "comment", - description: "Ask Cody a question", - command: { command: "cody.chat.panel.new" } - }, - { - title: "Document", - icon: "book", - description: "Add code documentation", - command: { command: "cody.command.document-code" } - }, - { - title: "Edit", - icon: "wand", - command: { command: "cody.command.edit-code" }, - description: "Edit code with instructions" - }, - { - title: "Explain", - icon: "file-binary", - command: { command: "cody.command.explain-code" }, - description: "Explain code" - }, - { - title: "Smell", - icon: "checklist", - command: { command: "cody.command.smell-code" }, - description: "Identify code smells" - }, - { - title: "Test", - icon: "package", - command: { command: "cody.command.unit-tests" }, - description: "Generate unit tests" - }, - { - title: "Custom", - icon: "tools", - command: { command: "cody.menu.custom-commands" }, - description: "Custom commands" - } - ]; } }); @@ -102753,7 +102918,7 @@ function getOpenTabsUris() { } return uris; } -var init_utils4 = __esm({ +var init_utils5 = __esm({ "../vscode/src/editor/utils/index.ts"() { "use strict"; init_vscode_shim(); @@ -102802,9 +102967,24 @@ async function getFileContextFiles(query, maxResults, token) { return result; }); const sortedResults = adjustedResults.sort((a, b) => { - return b.score - a.score || new Intl.Collator(void 0, { numeric: true }).compare(a.obj.uri.fsPath, b.obj.uri.fsPath); - }); - return sortedResults.flatMap((result) => createContextFileFromUri(result.obj.uri, "user", "file")); + return b.score - a.score || new Intl.Collator(void 0, { numeric: true }).compare(a.obj.uri.path, b.obj.uri.path); + }).flatMap((result) => createContextFileFromUri(result.obj.uri, "user", "file")); + const filtered = []; + try { + for (const sorted of sortedResults) { + const fileStat = await workspace.fs.stat(sorted.uri); + if (fileStat.type !== 1 /* File */ || fileStat.size > 1e6) { + continue; + } + if (fileStat.size > CHARS_PER_TOKEN * MAX_CURRENT_FILE_TOKENS) { + sorted.title = "large-file"; + } + filtered.push(sorted); + } + } catch (error) { + console.log("atMention:getFileContextFiles:failed", error); + } + return filtered; } async function getSymbolContextFiles(query, maxResults = 20) { if (!query.trim()) { @@ -102894,9 +103074,10 @@ var init_editor_context = __esm({ import_throttle2 = __toESM(require_throttle2()); init_vscode_shim(); init_src(); - init_utils4(); + init_utils5(); + init_constants(); findWorkspaceFiles = async (cancellationToken) => { - const fileExcludesPattern = "**/{*.env,.git,out/,dist/,snap,node_modules,__pycache__}**"; + const fileExcludesPattern = "**/{*.env,.git/,.class,out/,dist/,build/,snap,node_modules/,__pycache__/}**"; return workspace.findFiles("", fileExcludesPattern, void 0, cancellationToken); }; lowScoringPathSegments = ["bin"]; @@ -103142,7 +103323,7 @@ async function handleCodeFromInsertAtCursor(text, meta) { if (!activeEditor || !selectionRange) { throw new Error("No editor or selection found to insert text"); } - const edit2 = new WorkspaceEdit(); + const edit2 = new AgentWorkspaceEdit(); edit2.insert(activeEditor.document.uri, selectionRange.start, `${text} `); await workspace.applyEdit(edit2); @@ -103334,7 +103515,7 @@ function newAuthStatus(endpoint, isDotComOrApp, user, isEmailVerified, isCodyEna return authStatus; } var countGeneratedCode; -var init_utils5 = __esm({ +var init_utils6 = __esm({ "../vscode/src/chat/utils.ts"() { "use strict"; init_protocol(); @@ -103921,7 +104102,10 @@ var init_InitDoer = __esm({ } }); -// ../vscode/src/chat/chat-view/prompt.ts +// ../vscode/src/prompt-builder/utils.ts +function contextItemId(contextItem) { + return contextItem.range ? `${contextItem.uri.toString()}#${contextItem.range.start.line}:${contextItem.range.end.line}` : contextItem.uri.toString(); +} function renderContextItem(contextItem) { if (!contextItem.text?.trim()?.length) { return []; @@ -103945,15 +104129,129 @@ function renderContextItem(contextItem) { { speaker: "assistant", text: "Ok." } ]; } -var import_vscode_uri6, ENHANCED_CONTEXT_ALLOCATION, DefaultPrompter, PromptBuilder; +var import_vscode_uri6; +var init_utils7 = __esm({ + "../vscode/src/prompt-builder/utils.ts"() { + "use strict"; + init_src(); + import_vscode_uri6 = __toESM(require_umd()); + } +}); + +// ../vscode/src/prompt-builder/index.ts +var isAgentTesting3, PromptBuilder; +var init_prompt_builder = __esm({ + "../vscode/src/prompt-builder/index.ts"() { + "use strict"; + init_src(); + init_utils7(); + isAgentTesting3 = process.env.CODY_SHIM_TESTING === "true"; + PromptBuilder = class { + constructor(charLimit) { + this.charLimit = charLimit; + } + prefixMessages = []; + reverseMessages = []; + charsUsed = 0; + seenContext = /* @__PURE__ */ new Set(); + build() { + return this.prefixMessages.concat([...this.reverseMessages].reverse()); + } + tryAddToPrefix(messages2) { + let numChars = 0; + for (const message of messages2) { + numChars += message.speaker.length + (message.text?.length || 0) + 3; + } + if (numChars + this.charsUsed > this.charLimit) { + return false; + } + this.prefixMessages.push(...messages2); + this.charsUsed += numChars; + return true; + } + tryAdd(message) { + const lastMessage = this.reverseMessages.at(-1); + if (lastMessage?.speaker === message.speaker) { + throw new Error("Cannot add message with same speaker as last message"); + } + const msgLen = message.speaker.length + (message.text?.length || 0) + 3; + if (this.charsUsed + msgLen > this.charLimit) { + return false; + } + this.reverseMessages.push(message); + this.charsUsed += msgLen; + return true; + } + /** + * Tries to add context items to the prompt, tracking characters used. + * Returns info about which items were used vs. ignored. + * + * If charLimit is specified, then imposes an additional limit on the + * amount of context added from contextItems. This does not affect the + * overall character limit, which is still enforced. + */ + tryAddContext(contextItems, charLimit) { + let effectiveCharLimit = this.charLimit - this.charsUsed; + if (charLimit && charLimit < effectiveCharLimit) { + effectiveCharLimit = charLimit; + } + let limitReached = false; + const used = []; + const ignored = []; + const duplicate = []; + if (isAgentTesting3) { + contextItems.sort((a, b) => a.uri.path.localeCompare(b.uri.path)); + const selectionContext = contextItems.find((item) => item.source === "selection"); + if (selectionContext) { + contextItems.splice(contextItems.indexOf(selectionContext), 1); + contextItems.unshift(selectionContext); + } + } + for (const contextItem of contextItems) { + if (contextItem.uri.scheme === "file" && isCodyIgnoredFile(contextItem.uri)) { + ignored.push(contextItem); + continue; + } + const id = contextItemId(contextItem); + if (this.seenContext.has(id)) { + duplicate.push(contextItem); + continue; + } + const contextMessages = renderContextItem(contextItem).reverse(); + const contextLen = contextMessages.reduce( + (acc, msg) => acc + msg.speaker.length + (msg.text?.length || 0) + 3, + 0 + ); + if (this.charsUsed + contextLen > effectiveCharLimit) { + ignored.push(contextItem); + limitReached = true; + continue; + } + this.seenContext.add(id); + this.reverseMessages.push(...contextMessages); + this.charsUsed += contextLen; + used.push(contextItem); + } + return { + limitReached, + used, + ignored, + duplicate + }; + } + }; + } +}); + +// ../vscode/src/chat/chat-view/prompt.ts +var ENHANCED_CONTEXT_ALLOCATION, DefaultPrompter; var init_prompt = __esm({ "../vscode/src/chat/chat-view/prompt.ts"() { "use strict"; init_vscode_shim(); init_src(); init_log(); - init_SimpleChatModel(); - import_vscode_uri6 = __toESM(require_umd()); + init_prompt_builder(); ENHANCED_CONTEXT_ALLOCATION = 0.6; DefaultPrompter = class { constructor(explicitContext, getEnhancedContext2) { @@ -104043,85 +104341,79 @@ var init_prompt = __esm({ }; } }; - PromptBuilder = class { - constructor(charLimit) { - this.charLimit = charLimit; - } - prefixMessages = []; - reverseMessages = []; - charsUsed = 0; - seenContext = /* @__PURE__ */ new Set(); - build() { - return this.prefixMessages.concat([...this.reverseMessages].reverse()); - } - tryAddToPrefix(messages2) { - let numChars = 0; - for (const message of messages2) { - numChars += message.speaker.length + (message.text?.length || 0) + 3; - } - if (numChars + this.charsUsed > this.charLimit) { - return false; - } - this.prefixMessages.push(...messages2); - this.charsUsed += numChars; - return true; - } - tryAdd(message) { - const lastMessage = this.reverseMessages.at(-1); - if (lastMessage?.speaker === message.speaker) { - throw new Error("Cannot add message with same speaker as last message"); - } - const msgLen = message.speaker.length + (message.text?.length || 0) + 3; - if (this.charsUsed + msgLen > this.charLimit) { - return false; - } - this.reverseMessages.push(message); - this.charsUsed += msgLen; - return true; - } - /** - * Tries to add context items to the prompt, tracking characters used. - * Returns info about which items were used vs. ignored. - */ - tryAddContext(contextItems, charLimit) { - const effectiveCharLimit = charLimit ? this.charsUsed + charLimit : this.charLimit; - let limitReached = false; - const used = []; - const ignored = []; - const duplicate = []; - for (const contextItem of contextItems) { - if (contextItem.uri.scheme === "file" && isCodyIgnoredFile(contextItem.uri)) { - ignored.push(contextItem); - continue; - } - const id = contextItemId(contextItem); - if (this.seenContext.has(id)) { - duplicate.push(contextItem); - continue; - } - const contextMessages = renderContextItem(contextItem).reverse(); - const contextLen = contextMessages.reduce( - (acc, msg) => acc + msg.speaker.length + (msg.text?.length || 0) + 3, - 0 - ); - if (this.charsUsed + contextLen > effectiveCharLimit) { - ignored.push(contextItem); - limitReached = true; - continue; - } - this.seenContext.add(id); - this.reverseMessages.push(...contextMessages); - this.charsUsed += contextLen; - used.push(contextItem); - } - return { - limitReached, - used, - ignored, - duplicate - }; - } - }; + } +}); + +// ../vscode/src/models/index.ts +async function setModel(modelID, storageKey) { + return localStorage2.set(storageKey, modelID); +} +function getModel(authProvider, models, storageKey) { + const authStatus = authProvider.getAuthStatus(); + if (authStatus.isDotCom && authStatus.userCanUpgrade) { + return models[0].model; + } + if (!authStatus.isDotCom) { + return models[0].model; + } + const lastSelectedModelID = localStorage2.get(storageKey); + if (lastSelectedModelID) { + const model = models.find((m) => m.model === lastSelectedModelID); + if (model) { + return lastSelectedModelID; + } + } + const defaultModel = models.find((m) => m.default) || models[0]; + if (!defaultModel) { + throw new Error("No chat model found in server-provided config"); + } + return defaultModel.model; +} +function createModelAccessor(storageKey) { + return { + get: (authProvider, models) => getModel(authProvider, models, storageKey), + set: (modelID) => setModel(modelID, storageKey) + }; +} +var chatModel, editModel; +var init_models2 = __esm({ + "../vscode/src/models/index.ts"() { + "use strict"; + init_LocalStorageProvider(); + chatModel = createModelAccessor("model"); + editModel = createModelAccessor("editModel"); + } +}); + +// ../vscode/src/models/utilts.ts +function getContextWindowForModel(authStatus, modelID) { + if (authStatus.endpoint && !isDotCom(authStatus.endpoint)) { + const codyConfig = workspace.getConfiguration("cody"); + const tokenLimit = codyConfig.get("provider.limit.prompt"); + if (tokenLimit) { + return tokenLimit * 4; + } + if (authStatus.configOverwrites?.chatModelMaxTokens) { + return authStatus.configOverwrites.chatModelMaxTokens * 4; + } + return 28e3; + } + if (modelID === "openai/gpt-4-1106-preview") { + return 28e3; + } + if (modelID === "openai/gpt-3.5-turbo") { + return 1e4; + } + if (modelID === "fireworks/accounts/fireworks/models/mixtral-8x7b-instruct") { + return 28e3; + } + return 28e3; +} +var init_utilts = __esm({ + "../vscode/src/models/utilts.ts"() { + "use strict"; + init_vscode_shim(); + init_src(); } }); @@ -104214,47 +104506,6 @@ function deserializedContextFilesToContextItems(files, contextMessages) { function isAbortError2(error) { return error.message === "aborted" || error.message === "socket hang up"; } -function getContextWindowForModel(authStatus, modelID) { - if (authStatus.endpoint && !isDotCom(authStatus.endpoint)) { - const codyConfig = workspace.getConfiguration("cody"); - const tokenLimit = codyConfig.get("provider.limit.prompt"); - if (tokenLimit) { - return tokenLimit * 4; - } - if (authStatus.configOverwrites?.chatModelMaxTokens) { - return authStatus.configOverwrites.chatModelMaxTokens * 4; - } - return 28e3; - } - if (modelID.includes("openai/gpt-4-1106-preview")) { - return 28e3; - } - if (modelID.endsWith("openai/gpt-3.5-turbo")) { - return 1e4; - } - if (modelID.includes("mixtral-8x7b-instruct") && modelID.includes("fireworks")) { - return 28e3; - } - return 28e3; -} -function selectModel(authProvider, models) { - const authStatus = authProvider.getAuthStatus(); - if (authStatus.isDotCom && authStatus.userCanUpgrade) { - return models[0].model; - } - const lastSelectedModelID = localStorage2.get("model"); - if (lastSelectedModelID) { - const model = models.find((m) => m.model === lastSelectedModelID); - if (model) { - return lastSelectedModelID; - } - } - const defaultModel = models.find((m) => m.default) || models[0]; - if (!defaultModel) { - throw new Error("No chat model found in server-provided config"); - } - return defaultModel.model; -} var SimpleChatPanelProvider; var init_SimpleChatPanelProvider = __esm({ "../vscode/src/chat/chat-view/SimpleChatPanelProvider.ts"() { @@ -104269,13 +104520,12 @@ var init_SimpleChatPanelProvider = __esm({ init_enhanced_context_status(); init_log(); init_LocalAppDetector(); - init_LocalStorageProvider(); init_telemetry(); init_telemetry_v2(); init_codeblock_action_tracker(); init_workspace_action(); init_test_support(); - init_utils5(); + init_utils6(); init_chat_helpers(); init_ChatHistoryManager(); init_ChatManager(); @@ -104284,6 +104534,8 @@ var init_SimpleChatPanelProvider = __esm({ init_InitDoer(); init_prompt(); init_SimpleChatModel(); + init_models2(); + init_utilts(); SimpleChatPanelProvider = class { chatModel; config; @@ -104328,7 +104580,7 @@ var init_SimpleChatPanelProvider = __esm({ this.remoteSearch = enterpriseContext?.createRemoteSearch() || null; this.editor = editor; this.treeView = treeView; - this.chatModel = new SimpleChatModel(selectModel(authProvider, models)); + this.chatModel = new SimpleChatModel(chatModel.get(authProvider, models)); this.guardrails = guardrails; if (TestSupport.instance) { TestSupport.instance.chatPanelProvider.set(this); @@ -104624,17 +104876,27 @@ var init_SimpleChatPanelProvider = __esm({ } async handleSetChatModel(modelID) { this.chatModel.modelID = modelID; - await localStorage2.set("model", modelID); + await chatModel.set(modelID); } async handleGetUserContextFilesCandidates(query) { + const source = "chat"; if (!query.length) { + telemetryService.log("CodyVSCodeExtension:at-mention:executed", { source }); + telemetryRecorder.recordEvent("cody.at-mention", "executed", { privateMetadata: { source } }); const tabs = getOpenTabsContextFile(); - await this.postMessage({ + void this.postMessage({ type: "userContextFiles", context: tabs }); return; } + if (query.length === 1) { + const type = query.startsWith("#") ? "symbol" : "file"; + telemetryService.log(`CodyVSCodeExtension:at-mention:${type}:executed`, { source }); + telemetryRecorder.recordEvent(`cody.at-mention.${type}`, "executed", { + privateMetadata: { source } + }); + } const cancellation = new CancellationTokenSource(); try { const MAX_RESULTS = 20; @@ -104750,9 +105012,15 @@ var init_SimpleChatPanelProvider = __esm({ return; } if (authStatus?.configOverwrites?.chatModel) { - ChatModelProvider.add(new ChatModelProvider(authStatus.configOverwrites.chatModel)); + ModelProvider.add( + new ModelProvider(authStatus.configOverwrites.chatModel, [ + "chat" /* Chat */, + // TODO: Add configOverwrites.editModel for separate edit support + "edit" /* Edit */ + ]) + ); } - const models = ChatModelProvider.get(authStatus.endpoint, this.chatModel.modelID); + const models = ModelProvider.get("chat" /* Chat */, authStatus.endpoint, this.chatModel.modelID); void this.postMessage({ type: "chatModels", models @@ -105254,9 +105522,15 @@ var init_ChatPanelsManager = __esm({ const authProvider = this.options.authProvider; const authStatus = authProvider.getAuthStatus(); if (authStatus?.configOverwrites?.chatModel) { - ChatModelProvider.add(new ChatModelProvider(authStatus.configOverwrites.chatModel)); + ModelProvider.add( + new ModelProvider(authStatus.configOverwrites.chatModel, [ + "chat" /* Chat */, + // TODO: Add configOverwrites.editModel for separate edit support + "edit" /* Edit */ + ]) + ); } - const models = ChatModelProvider.get(authStatus.endpoint); + const models = ModelProvider.get("chat" /* Chat */, authStatus.endpoint); const isConsumer = authProvider.getAuthStatus().isDotCom; return new SimpleChatPanelProvider({ ...this.options, @@ -105385,9 +105659,9 @@ async function openExternalAuthUrl(provider) { const postSignUpSurveyUrl = `/post-sign-up?returnTo=${newTokenUrl}`; const site = DOTCOM_URL.toString(); const genericLoginUrl = `${site}sign-in?returnTo=${postSignUpSurveyUrl}`; - const gitHubLoginUrl = `${site}.auth/github/login?pc=https%3A%2F%2Fgithub.com%2F%3A%3Ae917b2b7fa9040e1edd4&redirect=${postSignUpSurveyUrl}`; - const gitLabLoginUrl = `${site}.auth/gitlab/login?pc=https%3A%2F%2Fgitlab.com%2F%3A%3Ab45ecb474e92c069567822400cf73db6e39917635bf682f062c57aca68a1e41c&redirect=${postSignUpSurveyUrl}`; - const googleLoginUrl = `${site}.auth/openidconnect/login?pc=google&redirect=${postSignUpSurveyUrl}`; + const gitHubLoginUrl = `${site}.auth/openidconnect/login?prompt_auth=github&pc=sams&redirect=${postSignUpSurveyUrl}`; + const gitLabLoginUrl = `${site}.auth/openidconnect/login?prompt_auth=gitlab&pc=sams&redirect=${postSignUpSurveyUrl}`; + const googleLoginUrl = `${site}.auth/openidconnect/login?prompt_auth=google&pc=sams&redirect=${postSignUpSurveyUrl}`; let uriSpec; switch (provider) { case "github": @@ -105635,7 +105909,13 @@ var init_ChatManager = __esm({ } async syncAuthStatus(authStatus) { if (authStatus?.configOverwrites?.chatModel) { - ChatModelProvider.add(new ChatModelProvider(authStatus.configOverwrites.chatModel)); + ModelProvider.add( + new ModelProvider(authStatus.configOverwrites.chatModel, [ + "chat" /* Chat */, + // TODO: Add configOverwrites.editModel for separate edit support + "edit" /* Edit */ + ]) + ); } await this.chatPanelsManager.syncAuthStatus(authStatus); } @@ -106039,13 +106319,15 @@ var init_document = __esm({ command: "cody.command.edit-code", arguments: [ { - instruction: this.instruction, - range, - intent: "doc", - document: document2, - mode: "insert" - }, - source + configuration: { + instruction: this.instruction, + range, + intent: "doc", + document: document2, + mode: "insert" + }, + source + } ], title: displayText }; @@ -106090,12 +106372,14 @@ var init_edit = __esm({ command: "cody.command.edit-code", arguments: [ { - range: new Range(selection.start, selection.end), - intent: "add", - document: document2, - mode: "insert" - }, - source + configuration: { + range: new Range(selection.start, selection.end), + intent: "add", + document: document2, + mode: "insert" + }, + source + } ], title: displayText }; @@ -106109,11 +106393,13 @@ var init_edit = __esm({ command: "cody.command.edit-code", arguments: [ { - range: new Range(selection.start, selection.end), - intent: "edit", - document: document2 - }, - source + configuration: { + range: new Range(selection.start, selection.end), + intent: "edit", + document: document2 + }, + source + } ], title: displayText }; @@ -106145,7 +106431,13 @@ var init_explain = __esm({ const instruction = this.getCodeActionInstruction(diagnostics); action.command = { command: "cody.action.chat", - arguments: [instruction, { source: "code-action:explain" }], + arguments: [ + { + text: instruction, + source: "code-action:explain", + submitType: "user-newchat" + } + ], title: "Ask Cody to Explain" }; action.diagnostics = diagnostics; @@ -106164,7 +106456,7 @@ var init_fixup = __esm({ "../vscode/src/code-actions/fixup.ts"() { "use strict"; init_vscode_shim(); - init_utils4(); + init_utils5(); FIX_PROMPT_TOPICS = { SOURCE: "PROBLEMCODE4179", RELATED: "RELATEDCODE50" @@ -106195,8 +106487,10 @@ var init_fixup = __esm({ action.command = { command: "cody.command.edit-code", arguments: [ - { instruction, range, intent: "fix", document: document2 }, - source + { + configuration: { instruction, range, intent: "fix", document: document2 }, + source + } ], title: "Ask Cody to Fix" }; @@ -106296,12 +106590,18 @@ function isEmptyOrIncompleteSelection(document2, selection) { const line = document2.lineAt(selection.start.line); return line.firstNonWhitespaceCharacterIndex < selection.start.character || line.range.end.character > selection.end.character; } +async function getGhostHintEnablement() { + const config = workspace.getConfiguration("cody"); + const configSettings = config.inspect("commandHints.enabled"); + return configSettings?.workspaceValue ?? configSettings?.globalValue ?? featureFlagProvider.evaluateFeatureFlag("cody-command-hints" /* CodyCommandHints */); +} var import_lodash8, EDIT_SHORTCUT_LABEL, CHAT_SHORTCUT_LABEL, ghostHintDecoration, GhostHintDecorator; var init_GhostHintDecorator = __esm({ "../vscode/src/commands/GhostHintDecorator.ts"() { "use strict"; import_lodash8 = __toESM(require_lodash()); init_vscode_shim(); + init_src(); EDIT_SHORTCUT_LABEL = process.platform === "win32" ? "Alt+K" : "Opt+K"; CHAT_SHORTCUT_LABEL = process.platform === "win32" ? "Alt+L" : "Opt+L"; ghostHintDecoration = window2.createTextEditorDecorationType({ @@ -106316,15 +106616,17 @@ var init_GhostHintDecorator = __esm({ isActive = false; activeDecoration = null; throttledSetGhostText; - constructor() { + constructor(authProvider) { this.throttledSetGhostText = (0, import_lodash8.throttle)(this.setGhostText.bind(this), 250, { leading: false, trailing: true }); - this.updateConfig(); + const initialAuth = authProvider.getAuthStatus(); + this.updateEnablement(initialAuth); + authProvider.addChangeListener((authStatus) => this.updateEnablement(authStatus)); workspace.onDidChangeConfiguration((e) => { if (e.affectsConfiguration("cody")) { - this.updateConfig(); + this.updateEnablement(authProvider.getAuthStatus()); } }); } @@ -106333,6 +106635,12 @@ var init_GhostHintDecorator = __esm({ window2.onDidChangeTextEditorSelection( (event) => { const editor = event.textEditor; + if (editor.document.uri.scheme !== "file") { + return; + } + if (event.selections.length > 1) { + return this.clearGhostText(editor); + } const selection = event.selections[0]; if (isEmptyOrIncompleteSelection(editor.document, selection)) { return this.clearGhostText(editor); @@ -106360,14 +106668,13 @@ var init_GhostHintDecorator = __esm({ this.activeDecoration = null; editor.setDecorations(ghostHintDecoration, []); } - updateConfig() { - const config = workspace.getConfiguration("cody"); - const isEnabled = config.get("commandHints.enabled"); - if (!isEnabled) { + async updateEnablement(authStatus) { + const featureEnabled = await getGhostHintEnablement(); + if (!authStatus.isLoggedIn || !featureEnabled) { this.dispose(); return; } - if (isEnabled && !this.isActive) { + if (!this.isActive) { this.isActive = true; this.init(); return; @@ -106640,12 +106947,82 @@ function baseLanguageId(languageId) { return languageId; } } -var init_utils6 = __esm({ +var init_utils8 = __esm({ "../vscode/src/completions/context/utils.ts"() { "use strict"; } }); +// ../vscode/src/completions/context/retrievers/jaccard-similarity/history.ts +var VSCodeDocumentHistory; +var init_history = __esm({ + "../vscode/src/completions/context/retrievers/jaccard-similarity/history.ts"() { + "use strict"; + init_vscode_shim(); + VSCodeDocumentHistory = class { + window = 50; + // tracks history in chronological order (latest at the end of the array) + history; + subscriptions = []; + constructor(register2 = () => window2.onDidChangeActiveTextEditor((event) => { + if (!event?.document.uri) { + return; + } + this.addItem({ + document: event.document + }); + })) { + this.history = []; + if (register2) { + const disposable = register2(); + if (disposable) { + this.subscriptions.push(disposable); + } + } + } + dispose() { + Disposable.from(...this.subscriptions).dispose(); + } + addItem(newItem) { + if (newItem.document.uri.scheme === "codegen") { + return; + } + const foundIndex = this.history.findIndex( + (item) => item.document.uri.toString() === newItem.document.uri.toString() + ); + if (foundIndex >= 0) { + this.history = [...this.history.slice(0, foundIndex), ...this.history.slice(foundIndex + 1)]; + } + this.history.push(newItem); + if (this.history.length > this.window) { + this.history.shift(); + } + } + /** + * Returns the last n items of history in reverse chronological order (latest item at the front) + */ + lastN(n, languageId, ignoreUris) { + const ret2 = []; + const ignoreSet = new Set(ignoreUris || []); + for (let i = this.history.length - 1; i >= 0; i--) { + const item = this.history[i]; + if (ret2.length > n) { + break; + } + if (ignoreSet.has(item.document.uri)) { + continue; + } + if (languageId && languageId !== item.document.languageId) { + continue; + } + ret2.push(item); + } + return ret2; + } + }; + } +}); + // ../node_modules/.pnpm/wink-porter2-stemmer@2.0.1/node_modules/wink-porter2-stemmer/src/wink-porter2-stemmer.js var require_wink_porter2_stemmer = __commonJS({ "../node_modules/.pnpm/wink-porter2-stemmer@2.0.1/node_modules/wink-porter2-stemmer/src/wink-porter2-stemmer.js"(exports2, module2) { @@ -113867,7 +114244,7 @@ var require_wn_verb_exceptions = __commonJS({ var slap = "slap"; var slat = "slat"; var sled = "sled"; - var sleep = "sleep"; + var sleep2 = "sleep"; var slide = "slide"; var slip = "slip"; var slit = "slit"; @@ -114211,7 +114588,7 @@ var require_wn_verb_exceptions = __commonJS({ var zip = "zip"; exceptions.abetted = abet, exceptions.abetting = abet, exceptions.abhorred = abhor, exceptions.abhorring = abhor, exceptions.abode = abide, exceptions.abought = aby, exceptions.abutted = abut, exceptions.abutting = abut, exceptions.abye = aby, exceptions.accompanied = accompany, exceptions.acetified = acetify, exceptions.acidified = acidify, exceptions.acquitted = acquit, exceptions.acquitting = acquit, exceptions.addrest = address, exceptions.admitted = admit, exceptions.admitting = admit, exceptions.aerified = aerify, exceptions.airdropped = airdrop, exceptions.airdropping = airdrop, exceptions.alkalified = alkalify, exceptions.allied = ally, exceptions.allotted = allot, exceptions.allotting = allot, exceptions.am = be, exceptions.ammonified = ammonify, exceptions.amnestied = amnesty, exceptions.amplified = amplify, exceptions.anglified = anglify, exceptions.annulled = annul, exceptions.annulling = annul, exceptions.appalled = appal, exceptions.appalling = appal, exceptions.applied = apply, exceptions.arcked = arc, exceptions.arcking = arc, exceptions.are = be, exceptions.argufied = argufy, exceptions.arisen = arise, exceptions.arose = arise, exceptions.ate = eat, exceptions.atrophied = atrophy, exceptions.averred = aver, exceptions.averring = aver, exceptions.awoke = awake, exceptions.awoken = awake, exceptions.babied = baby, exceptions.backbit = backbite, exceptions.backbitten = backbite, exceptions.backslid = backslide, exceptions.backslidden = backslide, exceptions.bade = bid, exceptions.bagged = bag, exceptions.bagging = bag, exceptions.ballyragged = ballyrag, exceptions.ballyragging = ballyrag, exceptions.bandied = bandy, exceptions.banned = ban, exceptions.banning = ban, exceptions.barred = bar, exceptions.barrelled = barrel, exceptions.barrelling = barrel, exceptions.barring = bar, exceptions.basified = basify, exceptions.batted = bat, exceptions.batting = bat, exceptions.bayonetted = bayonet, exceptions.bayonetting = bayonet, exceptions.beaten = beat, exceptions.beatified = beatify, exceptions.beautified = beautify, exceptions.became = become, exceptions.bed = bed, exceptions.bedded = bed, exceptions.bedding = bed, exceptions.bedevilled = bedevil, exceptions.bedevilling = bedevil, exceptions.bedimmed = bedim, exceptions.bedimming = bedim, exceptions.been = be, exceptions.befallen = befall, exceptions.befell = befall, exceptions.befitted = befit, exceptions.befitting = befit, exceptions.befogged = befog, exceptions.befogging = befog, exceptions.began = begin, exceptions.begat = beget, exceptions.begetting = beget, exceptions.begged = beg, exceptions.begging = beg, exceptions.beginning = begin, exceptions.begirt = begird, exceptions.begot = beget, exceptions.begotten = beget, exceptions.begun = begin, exceptions.beheld = behold, exceptions.beholden = behold, exceptions.bejewelled = bejewel, exceptions.bejewelling = bejewel, exceptions.bellied = belly, exceptions.belying = belie, exceptions.benefitted = benefit, exceptions.benefitting = benefit, exceptions.benempt = bename, exceptions.bent = bend, exceptions.berried = berry, exceptions.besetting = beset, exceptions.besought = beseech, exceptions.bespoke = bespeak, exceptions.bespoken = bespeak, exceptions.bestirred = bestir, exceptions.bestirring = bestir, exceptions.bestrewn = bestrew, exceptions.bestrid = bestride, exceptions.bestridden = bestride, exceptions.bestrode = bestride, exceptions.betaken = betake, exceptions.bethought = bethink, exceptions.betook = betake, exceptions.betted = bet, exceptions.betting = bet, exceptions.bevelled = bevel, exceptions.bevelling = bevel, exceptions.biassed = bias, exceptions.biassing = bias, exceptions.bidden = bid, exceptions.bidding = bid, exceptions.bing = bing, exceptions.binned = bin, exceptions.binning = bin, exceptions.bit = bite, exceptions.bitted = bit, exceptions.bitten = bite, exceptions.bitting = bit, exceptions.bivouacked = bivouac, exceptions.bivouacking = bivouac, exceptions.blabbed = blab, exceptions.blabbing = blab, exceptions.blackberried = blackberry, exceptions.blacklegged = blackleg, exceptions.blacklegging = blackleg, exceptions.blatted = blat, exceptions.blatting = blat, exceptions.bled = bleed, exceptions.blest = bless, exceptions.blew = blow, exceptions.blipped = blip, exceptions.blipping = blip, exceptions.blobbed = blob, exceptions.blobbing = blob, exceptions.bloodied = bloody, exceptions.blotted = blot, exceptions.blotting = blot, exceptions.blown = blow, exceptions.blubbed = blub, exceptions.blubbing = blub, exceptions.blurred = blur, exceptions.blurring = blur, exceptions.bobbed = bob, exceptions.bobbing = bob, exceptions.bodied = body2, exceptions.bootlegged = bootleg, exceptions.bootlegging = bootleg, exceptions.bopped = bop, exceptions.bopping = bop, exceptions.bore = bear, exceptions.born = bear, exceptions.borne = bear, exceptions.bought = buy, exceptions.bound = bind2, exceptions.bragged = brag, exceptions.bragging = brag, exceptions.bred = breed, exceptions.brevetted = brevet, exceptions.brevetting = brevet, exceptions.brimmed = brim, exceptions.brimming = brim, exceptions.broke = break1, exceptions.broken = break1, exceptions.brought = bring, exceptions.browbeaten = browbeat, exceptions.brutified = brutify, exceptions.budded = bud, exceptions.budding = bud, exceptions.bugged = bug, exceptions.bugging = bug, exceptions.built = build, exceptions.bulldogging = bulldog, exceptions.bullied = bully, exceptions.bullshitted = bullshit, exceptions.bullshitting = bullshit, exceptions.bullwhipped = bullwhip, exceptions.bullwhipping = bullwhip, exceptions.bullyragged = bullyrag, exceptions.bullyragging = bullyrag, exceptions.bummed = bum, exceptions.bumming = bum, exceptions.buried = bury, exceptions.burnt = burn, exceptions.burred = bur, exceptions.burring = bur, exceptions.bushelled = bushel, exceptions.bushelling = bushel, exceptions.busied = busy, exceptions.bypast = bypass, exceptions.caballed = cabal, exceptions.caballing = cabal, exceptions.caddied = caddy, exceptions.caddies = caddy, exceptions.caddying = caddy, exceptions.calcified = calcify, exceptions.came = come, exceptions.canalled = canal, exceptions.canalling = canal, exceptions.cancelled = cancel, exceptions.cancelling = cancel, exceptions.candied = candy, exceptions.canned = can, exceptions.canning = can, exceptions.canopied = canopy, exceptions.capped = cap, exceptions.capping = cap, exceptions.carburetted = carburet, exceptions.carburetting = carburet, exceptions.carillonned = carillon, exceptions.carillonning = carillon, exceptions.carnied = carny, exceptions.carnified = carnify, exceptions.carolled = carol, exceptions.carolling = carol, exceptions.carried = carry, exceptions.casefied = casefy, exceptions.catnapped = catnap, exceptions.catnapping = catnap, exceptions.catted = cat, exceptions.catting = cat, exceptions.caught = catch1, exceptions.cavilled = cavil, exceptions.cavilling = cavil, exceptions.certified = certify, exceptions.channelled = channel, exceptions.channelling = channel, exceptions.chapped = chap, exceptions.chapping = chap, exceptions.charred = char, exceptions.charring = char, exceptions.chatted = chat, exceptions.chatting = chat, exceptions.chevied = chivy, exceptions.chevies = chivy, exceptions.chevying = chivy, exceptions.chid = chide, exceptions.chidden = chide, exceptions.chinned = chin, exceptions.chinning = chin, exceptions.chipped = chip, exceptions.chipping = chip, exceptions.chiselled = chisel, exceptions.chiselling = chisel, exceptions.chitchatted = chitchat, exceptions.chitchatting = chitchat, exceptions.chivied = chivy, exceptions.chivved = chiv, exceptions.chivvied = chivy, exceptions.chivvies = chivy, exceptions.chivving = chiv, exceptions.chivvying = chivy, exceptions.chondrified = chondrify, exceptions.chopped = chop, exceptions.chopping = chop, exceptions.chose = choose, exceptions.chosen = choose, exceptions.chugged = chug, exceptions.chugging = chug, exceptions.chummed = chum, exceptions.chumming = chum, exceptions.citified = citify, exceptions.clad = clothe, exceptions.cladded = clad, exceptions.cladding = clad, exceptions.clammed = clam, exceptions.clamming = clam, exceptions.clapped = clap, exceptions.clapping = clap, exceptions.clarified = clarify, exceptions.classified = classify, exceptions.cleft = cleave, exceptions.clemmed = clem, exceptions.clemming = clem, exceptions.clept = clepe, exceptions.clipped = clip, exceptions.clipping = clip, exceptions.clogged = clog, exceptions.clogging = clog, exceptions.clopped = clop, exceptions.clopping = clop, exceptions.clotted = clot, exceptions.clotting = clot, exceptions.clove = cleave, exceptions.cloven = cleave, exceptions.clubbed = club, exceptions.clubbing = club, exceptions.clung = cling, exceptions.cockneyfied = cockneyfy, exceptions.codded = cod, exceptions.codding = cod, exceptions.codified = codify, exceptions.cogged = cog, exceptions.cogging = cog, exceptions.coiffed = coif, exceptions.coiffing = coif, exceptions.collied = colly, exceptions.combatted = combat, exceptions.combatting = combat, exceptions.committed = commit, exceptions.committing = commit, exceptions.compelled = compel, exceptions.compelling = compel, exceptions.complied = comply, exceptions.complotted = complot, exceptions.complotting = complot, exceptions.concurred = concur, exceptions.concurring = concur, exceptions.confabbed = confab, exceptions.confabbing = confab, exceptions.conferred = confer, exceptions.conferring = confer, exceptions.conned = con, exceptions.conning = con, exceptions.controlled = control, exceptions.controlling = control, exceptions.copied = copy, exceptions.copped = cop, exceptions.copping = cop, exceptions.coquetted = coquet, exceptions.coquetting = coquet, exceptions.corralled = corral, exceptions.corralling = corral, exceptions.could = can, exceptions.counselled = counsel, exceptions.counselling = counsel, exceptions.counterplotted = counterplot, exceptions.counterplotting = counterplot, exceptions.countersank = countersink, exceptions.countersunk = countersink, exceptions.crabbed = crab, exceptions.crabbing = crab, exceptions.crammed = cram, exceptions.cramming = cram, exceptions.crapped = crap, exceptions.crapping = crap, exceptions.creeped = creep, exceptions.crept = creep, exceptions.cribbed = crib, exceptions.cribbing = crib, exceptions.cried = cry, exceptions.cropped = crop, exceptions.cropping = crop, exceptions.crossbred = crossbreed, exceptions.crosscutting = crosscut, exceptions.crucified = crucify, exceptions.cubbed = cub, exceptions.cubbing = cub, exceptions.cudgelled = cudgel, exceptions.cudgelling = cudgel, exceptions.cupelled = cupel, exceptions.cupelling = cupel, exceptions.cupped = cup, exceptions.cupping = cup, exceptions.curetted = curet, exceptions.curettes = curet, exceptions.curetting = curet, exceptions.curried = curry, exceptions.curst = curse, exceptions.curtsied = curtsy, exceptions.curvetted = curvet, exceptions.curvetting = curvet, exceptions.cutting = cut, exceptions.dabbed = dab, exceptions.dabbing = dab, exceptions.dagged = dag, exceptions.dagging = dag, exceptions.dallied = dally, exceptions.dammed = dam, exceptions.damming = dam, exceptions.damnified = damnify, exceptions.dandified = dandify, exceptions.dapped = dap, exceptions.dapping = dap, exceptions.dealt = deal, exceptions.debarred = debar, exceptions.debarring = debar, exceptions.debugged = debug, exceptions.debugging = debug, exceptions.debussed = debus, exceptions.debusses = debus, exceptions.debussing = debus, exceptions.decalcified = decalcify, exceptions.declassified = declassify, exceptions.decontrolled = decontrol, exceptions.decontrolling = decontrol, exceptions.decried = decry, exceptions.deferred = defer2, exceptions.deferring = defer2, exceptions.defied = defy, exceptions.degassed = degas, exceptions.degasses = degas, exceptions.degassing = degas, exceptions.dehumidified = dehumidify, exceptions.deified = deify, exceptions.demitted = demit, exceptions.demitting = demit, exceptions.demobbed = demob, exceptions.demobbing = demob, exceptions.demulsified = demulsify, exceptions.demurred = demur, exceptions.demurring = demur, exceptions.demystified = demystify, exceptions.denazified = denazify, exceptions.denied = deny, exceptions.denitrified = denitrify, exceptions.denned = den, exceptions.denning = den, exceptions.descried = descry, exceptions.deterred = deter, exceptions.deterring = deter, exceptions.detoxified = detoxify, exceptions.devilled = devil, exceptions.devilling = devil, exceptions.devitrified = devitrify, exceptions.diagrammed = diagram, exceptions.diagramming = diagram, exceptions.dialled = dial, exceptions.dialling = dial, exceptions.dibbed = dib, exceptions.dibbing = dib, exceptions.did = do1, exceptions.digging = dig, exceptions.dignified = dignify, exceptions.dimmed = dim, exceptions.dimming = dim, exceptions.dinned = din, exceptions.dinning = din, exceptions.dipped = dip, exceptions.dipping = dip, exceptions.dirtied = dirty, exceptions.disannulled = disannul, exceptions.disannulling = disannul, exceptions.disbarred = disbar, exceptions.disbarring = disbar, exceptions.disbudded = disbud, exceptions.disbudding = disbud, exceptions.disembodied = disembody, exceptions.disembowelled = disembowel, exceptions.disembowelling = disembowel, exceptions.disenthralled = disenthral, exceptions.disenthralling = disenthral, exceptions.disenthralls = disenthral, exceptions.disenthrals = disenthrall, exceptions.dishevelled = dishevel, exceptions.dishevelling = dishevel, exceptions.disinterred = disinter, exceptions.disinterring = disinter, exceptions.dispelled = dispel, exceptions.dispelling = dispel, exceptions.disqualified = disqualify, exceptions.dissatisfied = dissatisfy, exceptions.distilled = distil, exceptions.distilling = distil, exceptions.diversified = diversify, exceptions.divvied = divvy, exceptions.dizzied = dizzy, exceptions.does = do1, exceptions.dogged = dog, exceptions.dogging = dog, exceptions.doglegged = dogleg, exceptions.doglegging = dogleg, exceptions.dollied = dolly, exceptions.done = do1, exceptions.donned = don, exceptions.donning = don, exceptions.dotted = dot, exceptions.dotting = dot, exceptions.dought = dow, exceptions.dove = dive, exceptions.drabbed = drab, exceptions.drabbing = drab, exceptions.dragged = drag, exceptions.dragging = drag, exceptions.drank = drink, exceptions.drawn = draw, exceptions.dreamt = dream, exceptions.drew = draw, exceptions.dried = dry, exceptions.dripped = drip, exceptions.dripping = drip, exceptions.drivelled = drivel, exceptions.drivelling = drivel, exceptions.driven = drive, exceptions.dropped = drop, exceptions.dropping = drop, exceptions.drove = drive, exceptions.drubbed = drub, exceptions.drubbing = drub, exceptions.drugged = drug, exceptions.drugging = drug, exceptions.drummed = drum, exceptions.drumming = drum, exceptions.drunk = drink, exceptions.dubbed = dub, exceptions.dubbing = dub, exceptions.duelled = duel, exceptions.duelling = duel, exceptions.dug = dig, exceptions.dulcified = dulcify, exceptions.dummied = dummy, exceptions.dunned = dun, exceptions.dunning = dun, exceptions.dwelt = dwell, exceptions.dying = die, exceptions.easied = easy, exceptions.eaten = eat, exceptions.eavesdropped = eavesdrop, exceptions.eavesdropping = eavesdrop, exceptions.eddied = eddy, exceptions.edified = edify, exceptions.electrified = electrify, exceptions.embedded = embed, exceptions.embedding = embed, exceptions.embodied = embody, exceptions.embussed = embus, exceptions.embusses = embus, exceptions.embussing = embus, exceptions.emitted = emit, exceptions.emitting = emit, exceptions.empanelled = empanel, exceptions.empanelling = empanel, exceptions.emptied = empty, exceptions.emulsified = emulsify, exceptions.enamelled = enamel, exceptions.enamelling = enamel, exceptions.englutted = englut, exceptions.englutting = englut, exceptions.enrolled = enrol, exceptions.enrolling = enrol, exceptions.enthralled = enthral, exceptions.enthralling = enthral, exceptions.entrammelled = entrammel, exceptions.entrammelling = entrammel, exceptions.entrapped = entrap, exceptions.entrapping = entrap, exceptions.envied = envy, exceptions.enwound = enwind, exceptions.enwrapped = enwrap, exceptions.enwrapping = enwrap, exceptions.equalled = equal, exceptions.equalling = equal, exceptions.equipped = equip, exceptions.equipping = equip, exceptions.espied = espy, exceptions.esterified = esterify, exceptions.estopped = estop, exceptions.estopping = estop, exceptions.etherified = etherify, exceptions.excelled = excel, exceptions.excelling = excel, exceptions.exemplified = exemplify, exceptions.expelled = expel, exceptions.expelling = expel, exceptions.extolled = extol, exceptions.extolling = extol, exceptions.facetted = facet, exceptions.facetting = facet, exceptions.fagged = fag, exceptions.fagging = fag, exceptions.fallen = fall, exceptions.falsified = falsify, exceptions.fancied = fancy, exceptions.fanned = fan, exceptions.fanning = fan, exceptions.fantasied = fantasy, exceptions.fatted = fat, exceptions.fatting = fat, exceptions.featherbedded = featherbed, exceptions.featherbedding = featherbed, exceptions.fed = feed, exceptions.feed = feed, exceptions.fell = fall, exceptions.felt = feel, exceptions.ferried = ferry, exceptions.fibbed = fib, exceptions.fibbing = fib, exceptions.figged = fig, exceptions.figging = fig, exceptions.finned = fin, exceptions.finning = fin, exceptions.fitted = fit, exceptions.fitting = fit, exceptions.flagged = flag, exceptions.flagging = flag, exceptions.flammed = flam, exceptions.flamming = flam, exceptions.flannelled = flannel, exceptions.flannelling = flannel, exceptions.flapped = flap, exceptions.flapping = flap, exceptions.flatted = flat, exceptions.flatting = flat, exceptions.fled = flee, exceptions.flew = fly, exceptions.flimflammed = flimflam, exceptions.flimflamming = flimflam, exceptions.flipped = flip, exceptions.flipping = flip, exceptions.flitted = flit, exceptions.flitting = flit, exceptions.flogged = flog, exceptions.flogging = flog, exceptions.floodlit = floodlight, exceptions.flopped = flop, exceptions.flopping = flop, exceptions.flown = fly, exceptions.flubbed = flub, exceptions.flubbing = flub, exceptions.flung = fling, exceptions.flurried = flurry, exceptions.flyblew = flyblow, exceptions.flyblown = flyblow, exceptions.fobbed = fob, exceptions.fobbing = fob, exceptions.fogged = fog, exceptions.fogging = fog, exceptions.footslogged = footslog, exceptions.footslogging = footslog, exceptions.forbad = forbid, exceptions.forbade = forbid, exceptions.forbidden = forbid, exceptions.forbidding = forbid, exceptions.forbore = forbear, exceptions.forborne = forbear, exceptions.fordid = fordo, exceptions.fordone = fordo, exceptions.foredid = foredo, exceptions.foredone = foredo, exceptions.foregone = forego, exceptions.foreknew = foreknow, exceptions.foreknown = foreknow, exceptions.foreran = forerun, exceptions.forerunning = forerun, exceptions.foresaw = foresee, exceptions.foreseen = foresee, exceptions.foreshown = foreshow, exceptions.forespoke = forespeak, exceptions.forespoken = forespeak, exceptions.foretold = foretell, exceptions.forewent = forego, exceptions.forgave = forgive, exceptions.forgetting = forget, exceptions.forgiven = forgive, exceptions.forgone = forgo, exceptions.forgot = forget, exceptions.forgotten = forget, exceptions.formatted = format2, exceptions.formatting = format2, exceptions.forsaken = forsake, exceptions.forsook = forsake, exceptions.forspoke = forspeak, exceptions.forspoken = forspeak, exceptions.forswore = forswear, exceptions.forsworn = forswear, exceptions.fortified = fortify, exceptions.forwent = forgo, exceptions.fought = fight, exceptions.found = find, exceptions.foxtrotted = foxtrot, exceptions.foxtrotting = foxtrot, exceptions.frapped = frap, exceptions.frapping = frap, exceptions.frenchified = frenchify, exceptions.frenzied = frenzy, exceptions.fretted = fret, exceptions.fretting = fret, exceptions.fried = fry, exceptions.frigged = frig, exceptions.frigging = frig, exceptions.fritted = frit, exceptions.fritting = frit, exceptions.frivolled = frivol, exceptions.frivolling = frivol, exceptions.frogged = frog, exceptions.frogging = frog, exceptions.frolicked = frolic, exceptions.frolicking = frolic, exceptions.froze = freeze, exceptions.frozen = freeze, exceptions.fructified = fructify, exceptions.fuelled = fuel, exceptions.fuelling = fuel, exceptions.fulfilled = fulfil, exceptions.fulfilling = fulfil, exceptions.funned = fun, exceptions.funnelled = funnel, exceptions.funnelling = funnel, exceptions.funning = fun, exceptions.furred = fur, exceptions.furring = fur, exceptions.gadded = gad, exceptions.gadding = gad, exceptions.gagged = gag, exceptions.gagging = gag, exceptions.gainsaid = gainsay, exceptions.gambolled = gambol, exceptions.gambolling = gambol, exceptions.gammed = gam, exceptions.gamming = gam, exceptions.gan = gin, exceptions.ganned = gan, exceptions.ganning = gan, exceptions.gapped = gap, exceptions.gapping = gap, exceptions.gasified = gasify, exceptions.gassed = gas, exceptions.gasses = gas, exceptions.gassing = gas, exceptions.gave = give, exceptions.gelled = gel, exceptions.gelling = gel, exceptions.gelt = geld, exceptions.gemmed = gem, exceptions.gemming = gem, exceptions.getting = get, exceptions.ghostwritten = ghostwrite, exceptions.ghostwrote = ghostwrite, exceptions.gibbed = gib, exceptions.gibbing = gib, exceptions.giddied = giddy, exceptions.giftwrapped = giftwrap, exceptions.giftwrapping = giftwrap, exceptions.gigged = gig, exceptions.gigging = gig, exceptions.gilt = gild, exceptions.ginned = gin, exceptions.ginning = gin, exceptions.gipped = gip, exceptions.gipping = gip, exceptions.girt = gird, exceptions.given = give, exceptions.glommed = glom, exceptions.glomming = glom, exceptions.gloried = glory, exceptions.glorified = glorify, exceptions.glutted = glut, exceptions.glutting = glut, exceptions.gnawn = gnaw, exceptions.gollied = golly, exceptions.gone = go, exceptions.got = get, exceptions.gotten = get, exceptions.grabbed = grab, exceptions.grabbing = grab, exceptions.gratified = gratify, exceptions.gravelled = gravel, exceptions.gravelling = gravel, exceptions.graven = grave, exceptions.grew = grow, exceptions.grinned = grin, exceptions.grinning = grin, exceptions.gripped = grip, exceptions.gripping = grip, exceptions.gript = grip, exceptions.gritted = grit, exceptions.gritting = grit, exceptions.ground = grind, exceptions.grovelled = grovel, exceptions.grovelling = grovel, exceptions.grown = grow, exceptions.grubbed = grub, exceptions.grubbing = grub, exceptions.guarantied = guaranty, exceptions.gullied = gully, exceptions.gummed = gum, exceptions.gumming = gum, exceptions.gunned = gun, exceptions.gunning = gun, exceptions.gypped = gyp, exceptions.gypping = gyp, exceptions.hacksawn = hacksaw, exceptions.had = have, exceptions.hammed = ham, exceptions.hamming = ham, exceptions.hamstrung = hamstring, exceptions.handfed = handfeed, exceptions.handicapped = handicap, exceptions.handicapping = handicap, exceptions.handselled = handsel, exceptions.handselling = handsel, exceptions.harried = harry, exceptions.has = have, exceptions.hatchelled = hatchel; exceptions.hatchelling = hatchel, exceptions.hatted = hat, exceptions.hatting = hat, exceptions.heard = hear, exceptions.hedgehopped = hedgehop, exceptions.hedgehopping = hedgehop, exceptions.held = hold, exceptions.hemmed = hem, exceptions.hemming = hem, exceptions.hewn = hew, exceptions.hiccupped = hiccup, exceptions.hiccupping = hiccup, exceptions.hid = hide, exceptions.hidden = hide, exceptions.hinnied = hinny, exceptions.hitting = hit, exceptions.hobbed = hob, exceptions.hobbing = hob, exceptions.hobnobbed = hobnob, exceptions.hobnobbing = hobnob, exceptions.hocussed = hocus, exceptions.hocussing = hocus, exceptions.hogged = hog, exceptions.hogging = hog, exceptions.hogtying = hogtie, exceptions.honied = honey, exceptions.hopped = hop, exceptions.hopping = hop, exceptions.horrified = horrify, exceptions.horsewhipped = horsewhip, exceptions.horsewhipping = horsewhip, exceptions.houselled = housel, exceptions.houselling = housel, exceptions.hove = heave, exceptions.hovelled = hovel, exceptions.hovelling = hovel, exceptions.hugged = hug, exceptions.hugging = hug, exceptions.humbugged = humbug, exceptions.humbugging = humbug, exceptions.humidified = humidify, exceptions.hummed = hum, exceptions.humming = hum, exceptions.hung = hang, exceptions.hurried = hurry, exceptions.hypertrophied = hypertrophy, exceptions.identified = identify, exceptions.imbedded = imbed, exceptions.imbedding = imbed, exceptions.impanelled = impanel, exceptions.impanelling = impanel, exceptions.impelled = impel, exceptions.impelling = impel, exceptions.implied = imply, exceptions.inbred = inbreed, exceptions.incurred = incur, exceptions.incurring = incur, exceptions.indemnified = indemnify, exceptions.indwelt = indwell, exceptions.inferred = infer, exceptions.inferring = infer, exceptions.initialled = initial, exceptions.initialling = initial, exceptions.inlaid = inlay, exceptions.insetting = inset, exceptions.inspanned = inspan, exceptions.inspanning = inspan, exceptions.installed = install, exceptions.installing = install, exceptions.intensified = intensify, exceptions.interbred = interbreed, exceptions.intercropped = intercrop, exceptions.intercropping = intercrop, exceptions.intercutting = intercut, exceptions.interlaid = interlay, exceptions.interlapped = interlap, exceptions.interlapping = interlap, exceptions.intermarried = intermarry, exceptions.intermitted = intermit, exceptions.intermitting = intermit, exceptions.interpled = interplead, exceptions.interred = inter, exceptions.interring = inter, exceptions.interstratified = interstratify, exceptions.interwove = interweave, exceptions.interwoven = interweave, exceptions.intromitted = intromit, exceptions.intromitting = intromit, exceptions.inwove = inweave, exceptions.inwoven = inweave, exceptions.inwrapped = inwrap, exceptions.inwrapping = inwrap, exceptions.is = be, exceptions.jabbed = jab, exceptions.jabbing = jab, exceptions.jagged = jag, exceptions.jagging = jag, exceptions.jammed = jam, exceptions.jamming = jam, exceptions.japanned = japan, exceptions.japanning = japan, exceptions.jarred = jar, exceptions.jarring = jar, exceptions.jellied = jelly, exceptions.jellified = jellify, exceptions.jemmied = jemmy, exceptions.jetted = jet, exceptions.jetting = jet, exceptions.jewelled = jewel, exceptions.jewelling = jewel, exceptions.jibbed = jib, exceptions.jibbing = jib, exceptions.jigged = jig, exceptions.jigging = jig, exceptions.jimmied = jimmy, exceptions.jitterbugged = jitterbug, exceptions.jitterbugging = jitterbug, exceptions.jobbed = job, exceptions.jobbing = job, exceptions.jogged = jog, exceptions.jogging = jog, exceptions.jollied = jolly, exceptions.jollified = jollify, exceptions.jotted = jot, exceptions.jotting = jot, exceptions.joypopped = joypop, exceptions.joypopping = joypop, exceptions.jugged = jug, exceptions.jugging = jug, exceptions.justified = justify, exceptions.jutted = jut, exceptions.jutting = jut, exceptions.kenned = ken, exceptions.kennelled = kennel, exceptions.kennelling = kennel, exceptions.kenning = ken, exceptions.kent = ken, exceptions.kept = keep, exceptions.kernelled = kernel, exceptions.kernelling = kernel, exceptions.kidded = kid, exceptions.kidding = kid, exceptions.kidnapped = kidnap, exceptions.kidnapping = kidnap, exceptions.kipped = kip, exceptions.kipping = kip, exceptions.knapped = knap, exceptions.knapping = knap, exceptions.kneecapped = kneecap, exceptions.kneecapping = kneecap, exceptions.knelt = kneel, exceptions.knew = know, exceptions.knitted = knit, exceptions.knitting = knit, exceptions.knobbed = knob, exceptions.knobbing = knob, exceptions.knotted = knot, exceptions.knotting = knot, exceptions.known = know, exceptions.labelled = label, exceptions.labelling = label, exceptions.laden = lade, exceptions.ladyfied = ladify, exceptions.ladyfies = ladify, exceptions.ladyfying = ladify, exceptions.lagged = lag, exceptions.lagging = lag, exceptions.laid = lay, exceptions.lain = lie, exceptions.lallygagged = lallygag, exceptions.lallygagging = lallygag, exceptions.lammed = lam, exceptions.lamming = lam, exceptions.lapidified = lapidify, exceptions.lapped = lap, exceptions.lapping = lap, exceptions.laurelled = laurel, exceptions.laurelling = laurel, exceptions.lay = lie, exceptions.leant = lean, exceptions.leapfrogged = leapfrog, exceptions.leapfrogging = leapfrog, exceptions.leapt = leap, exceptions.learnt = learn, exceptions.led = lead, exceptions.left = leave, exceptions.lent = lend, exceptions.letting = let1, exceptions.levelled = level, exceptions.levelling = level, exceptions.levied = levy, exceptions.libelled = libel, exceptions.libelling = libel, exceptions.lignified = lignify, exceptions.lipped = lip, exceptions.lipping = lip, exceptions.liquefied = liquefy, exceptions.liquified = liquify, exceptions.lit = light, exceptions.lobbed = lob, exceptions.lobbied = lobby, exceptions.lobbing = lob, exceptions.logged = log2, exceptions.logging = log2, exceptions.lopped = lop, exceptions.lopping = lop, exceptions.lost = lose, exceptions.lotted = lot, exceptions.lotting = lot, exceptions.lugged = lug, exceptions.lugging = lug, exceptions.lullabied = lullaby, exceptions.lying = lie, exceptions.madded = mad, exceptions.madding = mad, exceptions.made = make, exceptions.magnified = magnify, exceptions.manned = man, exceptions.manning = man, exceptions.manumitted = manumit, exceptions.manumitting = manumit, exceptions.mapped = map, exceptions.mapping = map, exceptions.marcelled = marcel, exceptions.marcelling = marcel, exceptions.marred = mar, exceptions.married = marry, exceptions.marring = mar, exceptions.marshalled = marshal, exceptions.marshalling = marshal, exceptions.marvelled = marvel, exceptions.marvelling = marvel, exceptions.matted = mat, exceptions.matting = mat, exceptions.meant = mean, exceptions.medalled = medal, exceptions.medalling = medal, exceptions.met = meet, exceptions.metalled = metal, exceptions.metalling = metal, exceptions.metrified = metrify, exceptions.might = may, exceptions.mimicked = mimic, exceptions.mimicking = mimic, exceptions.minified = minify, exceptions.misapplied = misapply, exceptions.misbecame = misbecome, exceptions.miscarried = miscarry, exceptions.misdealt = misdeal, exceptions.misfitted = misfit, exceptions.misfitting = misfit, exceptions.misgave = misgive, exceptions.misgiven = misgive, exceptions.mishitting = mishit, exceptions.mislaid = mislay, exceptions.misled = mislead, exceptions.mispled = misplead, exceptions.misspelt = misspell, exceptions.misspent = misspend, exceptions.mistaken = mistake, exceptions.mistook = mistake, exceptions.misunderstood = misunderstand, exceptions.mobbed = mob, exceptions.mobbing = mob, exceptions.modelled = model, exceptions.modelling = model, exceptions.modified = modify, exceptions.mollified = mollify, exceptions.molten = melt, exceptions.mopped = mop, exceptions.mopping = mop, exceptions.mortified = mortify, exceptions.mown = mow, exceptions.mudded = mud, exceptions.muddied = muddy, exceptions.mudding = mud, exceptions.mugged = mug, exceptions.mugging = mug, exceptions.multiplied = multiply, exceptions.mummed = mum, exceptions.mummified = mummify, exceptions.mumming = mum, exceptions.mutinied = mutiny, exceptions.mystified = mystify, exceptions.nabbed = nab, exceptions.nabbing = nab, exceptions.nagged = nag, exceptions.nagging = nag, exceptions.napped = nap, exceptions.napping = nap, exceptions.netted = net, exceptions.netting = net, exceptions.nibbed = nib, exceptions.nibbing = nib, exceptions.nickelled = nickel, exceptions.nickelling = nickel, exceptions.nidified = nidify, exceptions.nigrified = nigrify, exceptions.nipped = nip, exceptions.nipping = nip, exceptions.nitrified = nitrify, exceptions.nodded = nod, exceptions.nodding = nod, exceptions.nonplussed = nonplus, exceptions.nonplusses = nonplus, exceptions.nonplussing = nonplus, exceptions.notified = notify, exceptions.nullified = nullify, exceptions.nutted = nut, exceptions.nutting = nut, exceptions.objectified = objectify, exceptions.occupied = occupy, exceptions.occurred = occur, exceptions.occurring = occur, exceptions.offsetting = offset, exceptions.omitted = omit2, exceptions.omitting = omit2, exceptions.ossified = ossify, exceptions.outbidden = outbid, exceptions.outbidding = outbid, exceptions.outbred = outbreed, exceptions.outcried = outcry, exceptions.outcropped = outcrop, exceptions.outcropping = outcrop, exceptions.outdid = outdo, exceptions.outdone = outdo, exceptions.outdrawn = outdraw, exceptions.outdrew = outdraw, exceptions.outfitted = outfit, exceptions.outfitting = outfit, exceptions.outfought = outfight, exceptions.outgassed = outgas, exceptions.outgasses = outgas, exceptions.outgassing = outgas, exceptions.outgeneralled = outgeneral, exceptions.outgeneralling = outgeneral, exceptions.outgone = outgo, exceptions.outgrew = outgrow, exceptions.outgrown = outgrow, exceptions.outlaid = outlay, exceptions.outmanned = outman, exceptions.outmanning = outman, exceptions.outputted = output, exceptions.outputting = output, exceptions.outran = outrun, exceptions.outridden = outride, exceptions.outrode = outride, exceptions.outrunning = outrun, exceptions.outshone = outshine, exceptions.outshot = outshoot, exceptions.outsold = outsell, exceptions.outspanned = outspan, exceptions.outspanning = outspan, exceptions.outstood = outstand, exceptions.outstripped = outstrip, exceptions.outstripping = outstrip, exceptions.outthought = outthink, exceptions.outwent = outgo, exceptions.outwitted = outwit, exceptions.outwitting = outwit, exceptions.outwore = outwear, exceptions.outworn = outwear, exceptions.overbidden = overbid, exceptions.overbidding = overbid, exceptions.overblew = overblow, exceptions.overblown = overblow, exceptions.overbore = overbear, exceptions.overborne = overbear, exceptions.overbuilt = overbuild, exceptions.overcame = overcome, exceptions.overcropped = overcrop, exceptions.overcropping = overcrop, exceptions.overdid = overdo, exceptions.overdone = overdo, exceptions.overdrawn = overdraw, exceptions.overdrew = overdraw, exceptions.overdriven = overdrive, exceptions.overdrove = overdrive, exceptions.overflew = overfly, exceptions.overflown = overflow, exceptions.overgrew = overgrow, exceptions.overgrown = overgrow, exceptions.overheard = overhear, exceptions.overhung = overhang, exceptions.overlaid = overlay, exceptions.overlain = overlie, exceptions.overlapped = overlap, exceptions.overlapping = overlap, exceptions.overlay = overlie, exceptions.overlying = overlie, exceptions.overmanned = overman, exceptions.overmanning = overman, exceptions.overpaid = overpay, exceptions.overpast = overpass, exceptions.overran = overrun, exceptions.overridden = override, exceptions.overrode = override, exceptions.overrunning = overrun, exceptions.oversaw = oversee, exceptions.overseen = oversee, exceptions.oversetting = overset, exceptions.oversewn = oversew, exceptions.overshot = overshoot, exceptions.oversimplified = oversimplify, exceptions.overslept = oversleep, exceptions.oversold = oversell, exceptions.overspent = overspend, exceptions.overspilt = overspill, exceptions.overstepped = overstep, exceptions.overstepping = overstep, exceptions.overtaken = overtake, exceptions.overthrew = overthrow, exceptions.overthrown = overthrow, exceptions.overtook = overtake, exceptions.overtopped = overtop, exceptions.overtopping = overtop, exceptions.overwound = overwind, exceptions.overwritten = overwrite, exceptions.overwrote = overwrite, exceptions.pacified = pacify, exceptions.padded = pad, exceptions.padding = pad, exceptions.paid = pay, exceptions.palled = pal, exceptions.palling = pal, exceptions.palsied = palsy, exceptions.pandied = pandy, exceptions.panelled = panel, exceptions.panelling = panel, exceptions.panicked = panic, exceptions.panicking = panic, exceptions.panned = pan, exceptions.panning = pan, exceptions.parallelled = parallel, exceptions.parallelling = parallel, exceptions.parcelled = parcel, exceptions.parcelling = parcel, exceptions.parodied = parody, exceptions.parried = parry, exceptions.partaken = partake, exceptions.partook = partake, exceptions.pasquil = pasquinade, exceptions.pasquilled = pasquinade, exceptions.pasquilling = pasquinade, exceptions.pasquils = pasquinade, exceptions.patrolled = patrol, exceptions.patrolling = patrol, exceptions.patted = pat, exceptions.patting = pat, exceptions.pedalled = pedal, exceptions.pedalling = pedal, exceptions.pegged = peg, exceptions.pegging = peg, exceptions.pencilled = pencil, exceptions.pencilling = pencil, exceptions.penned = pen, exceptions.penning = pen, exceptions.pent = pen, exceptions.pepped = pep, exceptions.pepping = pep, exceptions.permitted = permit, exceptions.permitting = permit, exceptions.personified = personify, exceptions.petrified = petrify, exceptions.petted = pet, exceptions.pettifogged = pettifog, exceptions.pettifogging = pettifog, exceptions.petting = pet, exceptions.phantasied = phantasy, exceptions.photocopied = photocopy, exceptions.photomapped = photomap, exceptions.photomapping = photomap, exceptions.photosetting = photoset, exceptions.physicked = physic, exceptions.physicking = physic, exceptions.picnicked = picnic, exceptions.picnicking = picnic, exceptions.pigged = pig, exceptions.pigging = pig, exceptions.pilloried = pillory, exceptions.pinned = pin, exceptions.pinning = pin, exceptions.pipped = pip, exceptions.pipping = pip, exceptions.pistolled = pistol, exceptions.pistolling = pistol, exceptions.pitapatted = pitapat, exceptions.pitapatting = pitapat, exceptions.pitied = pity, exceptions.pitted = pit, exceptions.pitting = pit, exceptions.planned = plan, exceptions.planning = plan, exceptions.platted = plat, exceptions.platting = plat, exceptions.pled = plead, exceptions.plied = ply, exceptions.plodded = plod, exceptions.plodding = plod, exceptions.plopped = plop, exceptions.plopping = plop, exceptions.plotted = plot, exceptions.plotting = plot, exceptions.plugged = plug, exceptions.plugging = plug, exceptions.podded = pod, exceptions.podding = pod, exceptions.pommelled = pommel, exceptions.pommelling = pommel, exceptions.popes = popes, exceptions.popped = pop, exceptions.popping = pop, exceptions.potted = pot, exceptions.potting = pot, exceptions.preachified = preachify, exceptions.precancelled = precancel, exceptions.precancelling = precancel, exceptions.preferred = prefer, exceptions.preferring = prefer, exceptions.preoccupied = preoccupy, exceptions.prepaid = prepay, exceptions.presignified = presignify, exceptions.pretermitted = pretermit, exceptions.pretermitting = pretermit, exceptions.prettied = pretty, exceptions.prettified = prettify, exceptions.pried = pry, exceptions.prigged = prig, exceptions.prigging = prig, exceptions.primmed = prim, exceptions.primming = prim, exceptions.prodded = prod, exceptions.prodding = prod, exceptions.programmed = program2, exceptions.programmes = program2, exceptions.programming = program2, exceptions.prologed = prologue, exceptions.prologing = prologue, exceptions.prologs = prologue, exceptions.propelled = propel, exceptions.propelling = propel, exceptions.prophesied = prophesy, exceptions.propped = prop, exceptions.propping = prop, exceptions.proven = prove, exceptions.pubbed = pub, exceptions.pubbing = pub, exceptions.pugged = pug, exceptions.pugging = pug, exceptions.pummelled = pummel, exceptions.pummelling = pummel, exceptions.punned = pun, exceptions.punning = pun, exceptions.pupped = pup, exceptions.pupping = pup, exceptions.purified = purify, exceptions.putrefied = putrefy, exceptions.puttied = putty, exceptions.putting = put, exceptions.qualified = qualify, exceptions.quantified = quantify, exceptions.quarrelled = quarrel, exceptions.quarrelling = quarrel, exceptions.quarried = quarry, exceptions.quartersawn = quartersaw, exceptions.queried = query, exceptions.quickstepped = quickstep, exceptions.quickstepping = quickstep, exceptions.quipped = quip, exceptions.quipping = quip, exceptions.quitted = quit, exceptions.quitting = quit, exceptions.quizzed = quiz, exceptions.quizzes = quiz, exceptions.quizzing = quiz, exceptions.ragged = rag, exceptions.ragging = rag, exceptions.rallied = rally, exceptions.ramified = ramify, exceptions.rammed = ram, exceptions.ramming = ram, exceptions.ran = run2, exceptions.rang = ring, exceptions.rapped = rap, exceptions.rappelled = rappel, exceptions.rappelling = rappel, exceptions.rapping = rap, exceptions.rarefied = rarefy, exceptions.ratified = ratify, exceptions.ratted = rat, exceptions.ratting = rat, exceptions.ravelled = ravel, exceptions.ravelling = ravel, exceptions.rebelled = rebel, exceptions.rebelling = rebel, exceptions.rebuilt = rebuild, exceptions.rebutted = rebut, exceptions.rebutting = rebut, exceptions.recapped = recap, exceptions.recapping = recap, exceptions.reclassified = reclassify, exceptions.recommitted = recommit, exceptions.recommitting = recommit, exceptions.recopied = recopy, exceptions.rectified = rectify, exceptions.recurred = recur, exceptions.recurring = recur, exceptions.red = red, exceptions.redded = red, exceptions.redding = red, exceptions.redid = redo, exceptions.redone = redo, exceptions.referred = refer, exceptions.referring = refer, exceptions.refitted = refit, exceptions.refitting = refit, exceptions.reft = reave, exceptions.refuelled = refuel, exceptions.refuelling = refuel, exceptions.regretted = regret, exceptions.regretting = regret, exceptions.reheard = rehear, exceptions.reified = reify, exceptions.relied = rely, exceptions.remade = remake, exceptions.remarried = remarry, exceptions.remitted = remit, exceptions.remitting = remit, exceptions.rent = rend, exceptions.repaid = repay, exceptions.repelled = repel, exceptions.repelling = repel, exceptions.replevied = replevy, exceptions.replied = reply, exceptions.repotted = repot, exceptions.repotting = repot, exceptions.reran = rerun, exceptions.rerunning = rerun, exceptions.resat = resit, exceptions.resetting = reset, exceptions.resewn = resew, exceptions.resitting = resit, exceptions.retaken = retake, exceptions.rethought = rethink, exceptions.retold = retell, exceptions.retook = retake, exceptions.retransmitted = retransmit, exceptions.retransmitting = retransmit, exceptions.retried = retry, exceptions.retrofitted = retrofit, exceptions.retrofitting = retrofit, exceptions.retted = ret2, exceptions.retting = ret2, exceptions.reunified = reunify, exceptions.revelled = revel, exceptions.revelling = revel, exceptions.revetted = revet, exceptions.revetting = revet, exceptions.revivified = revivify, exceptions.revved = rev, exceptions.revving = rev, exceptions.rewound = rewind, exceptions.rewritten = rewrite, exceptions.rewrote = rewrite, exceptions.ribbed = rib, exceptions.ribbing = rib, exceptions.ricochetted = ricochet, exceptions.ricochetting = ricochet, exceptions.ridded = rid, exceptions.ridden = ride, exceptions.ridding = rid, exceptions.rigged = rig, exceptions.rigging = rig, exceptions.rigidified = rigidify, exceptions.rimmed = rim, exceptions.rimming = rim, exceptions.ripped = rip, exceptions.ripping = rip, exceptions.risen = rise, exceptions.rivalled = rival, exceptions.rivalling = rival, exceptions.riven = rive, exceptions.robbed = rob, exceptions.robbing = rob, exceptions.rode = ride, exceptions.rose = rise, exceptions.rotted = rot, exceptions.rotting = rot, exceptions.rove = reeve, exceptions.rowelled = rowel, exceptions.rowelling = rowel, exceptions.rubbed = rub, exceptions.rubbing = rub, exceptions.rung = ring, exceptions.running = run2, exceptions.rutted = rut, exceptions.rutting = rut, exceptions.saccharified = saccharify, exceptions.sagged = sag, exceptions.sagging = sag, exceptions.said = say, exceptions.salaried = salary, exceptions.salified = salify, exceptions.sallied = sally, exceptions.sanctified = sanctify, exceptions.sandbagged = sandbag, exceptions.sandbagging = sandbag, exceptions.sang = sing, exceptions.sank = sink, exceptions.saponified = saponify, exceptions.sapped = sap, exceptions.sapping = sap, exceptions.sat = sit, exceptions.satisfied = satisfy, exceptions.savvied = savvy, exceptions.saw = see, exceptions.sawn = saw, exceptions.scagged = scag, exceptions.scagging = scag, exceptions.scanned = scan, exceptions.scanning = scan, exceptions.scarified = scarify, exceptions.scarred = scar, exceptions.scarring = scar, exceptions.scatted = scat, exceptions.scatting = scat, exceptions.scorified = scorify, exceptions.scragged = scrag, exceptions.scragging = scrag, exceptions.scrammed = scram, exceptions.scramming = scram, exceptions.scrapped = scrap, exceptions.scrapping = scrap, exceptions.scried = scry, exceptions.scrubbed = scrub, exceptions.scrubbing = scrub, exceptions.scrummed = scrum, exceptions.scrumming = scrum, exceptions.scudded = scud, exceptions.scudding = scud, exceptions.scummed = scum, exceptions.scumming = scum, exceptions.scurried = scurry, exceptions.seed = seed, exceptions.seen = see, exceptions.sent = send, exceptions.setting = set, exceptions.sewn = sew, exceptions.shagged = shag, exceptions.shagging = shag, exceptions.shaken = shake, exceptions.shammed = sham, exceptions.shamming = sham, exceptions.sharecropped = sharecrop, exceptions.sharecropping = sharecrop, exceptions.shat = shit, exceptions.shaven = shave, exceptions.shorn = shear, exceptions.shed = shed, exceptions.shedding = shed, exceptions.shellacked = shellac, exceptions.shellacking = shellac, exceptions.shent = shend, exceptions.shewn = shew, exceptions.shied = shy, exceptions.shikarred = shikar, exceptions.shikarring = shikar, exceptions.shillyshallied = shillyshally, exceptions.shimmed = shim, exceptions.shimmied = shimmy, exceptions.shimming = shim, exceptions.shinned = shin, exceptions.shinning = shin, exceptions.shipped = ship, exceptions.shipping = ship, exceptions.shitted = shit, exceptions.shitting = shit, exceptions.shod = shoe, exceptions.shone = shine, exceptions.shook = shake, exceptions.shopped = shop, exceptions.shopping = shop, exceptions.shot = shoot, exceptions.shotgunned = shotgun, exceptions.shotgunning = shotgun, exceptions.shotted = shot, exceptions.shotting = shot, exceptions.shovelled = shovel, exceptions.shovelling = shovel, exceptions.shown = show, exceptions.shrank = shrink, exceptions.shredded = shred, exceptions.shredding = shred, exceptions.shrivelled = shrivel, exceptions.shrivelling = shrivel, exceptions.shriven = shrive, exceptions.shrove = shrive, exceptions.shrugged = shrug, exceptions.shrugging = shrug, exceptions.shrunk = shrink; - exceptions.shrunken = shrink, exceptions.shunned = shun, exceptions.shunning = shun, exceptions.shutting = shut, exceptions.sicked = sic, exceptions.sicking = sic, exceptions.sideslipped = sideslip, exceptions.sideslipping = sideslip, exceptions.sidestepped = sidestep, exceptions.sidestepping = sidestep, exceptions.sightsaw = sightsee, exceptions.sightseen = sightsee, exceptions.signalled = signal, exceptions.signalling = signal, exceptions.signified = signify, exceptions.silicified = silicify, exceptions.simplified = simplify, exceptions.singing = sing, exceptions.sinned = sin, exceptions.sinning = sin, exceptions.sipped = sip, exceptions.sipping = sip, exceptions.sitting = sit, exceptions.skellied = skelly, exceptions.skenned = sken, exceptions.skenning = sken, exceptions.sketted = sket, exceptions.sketting = sket, exceptions.skidded = skid, exceptions.skidding = skid, exceptions.skimmed = skim, exceptions.skimming = skim, exceptions.skinned = skin, exceptions.skinning = skin, exceptions.skipped = skip, exceptions.skipping = skip, exceptions.skivvied = skivvy, exceptions.skydove = skydive, exceptions.slabbed = slab, exceptions.slabbing = slab, exceptions.slagged = slag, exceptions.slagging = slag, exceptions.slain = slay, exceptions.slammed = slam, exceptions.slamming = slam, exceptions.slapped = slap, exceptions.slapping = slap, exceptions.slatted = slat, exceptions.slatting = slat, exceptions.sledding = sled, exceptions.slept = sleep, exceptions.slew = slay, exceptions.slid = slide, exceptions.slidden = slide, exceptions.slipped = slip, exceptions.slipping = slip, exceptions.slitting = slit, exceptions.slogged = slog, exceptions.slogging = slog, exceptions.slopped = slop, exceptions.slopping = slop, exceptions.slotted = slot, exceptions.slotting = slot, exceptions.slugged = slug, exceptions.slugging = slug, exceptions.slummed = slum, exceptions.slumming = slum, exceptions.slung = sling, exceptions.slunk = slink, exceptions.slurred = slur, exceptions.slurring = slur, exceptions.smelt = smell, exceptions.smit = smite, exceptions.smitten = smite, exceptions.smote = smite, exceptions.smutted = smut, exceptions.smutting = smut, exceptions.snagged = snag, exceptions.snagging = snag, exceptions.snapped = snap, exceptions.snapping = snap, exceptions.snedded = sned, exceptions.snedding = sned, exceptions.snipped = snip, exceptions.snipping = snip, exceptions.snivelled = snivel, exceptions.snivelling = snivel, exceptions.snogged = snog, exceptions.snogging = snog, exceptions.snubbed = snub, exceptions.snubbing = snub, exceptions.snuck = sneak, exceptions.snugged = snug, exceptions.snugging = snug, exceptions.sobbed = sob, exceptions.sobbing = sob, exceptions.sodded = sod, exceptions.sodding = sod, exceptions.sold = sell, exceptions.solemnified = solemnify, exceptions.solidified = solidify, exceptions.soothsaid = soothsay, exceptions.sopped = sop, exceptions.sopping = sop, exceptions.sought = seek, exceptions.sown = sow, exceptions.spagged = spag, exceptions.spagging = spag, exceptions.spancelled = spancel, exceptions.spancelling = spancel, exceptions.spanned = span, exceptions.spanning = span, exceptions.sparred = spar, exceptions.sparring = spar, exceptions.spat = spit, exceptions.spatted = spat, exceptions.spatting = spat, exceptions.specified = specify, exceptions.sped = speed, exceptions.speechified = speechify, exceptions.spellbound = spellbind, exceptions.spelt = spell, exceptions.spent = spend, exceptions.spied = spy, exceptions.spilt = spill, exceptions.spinning = spin, exceptions.spiralled = spiral, exceptions.spiralling = spiral, exceptions.spitted = spit, exceptions.spitting = spit, exceptions.splitting = split, exceptions.spoilt = spoil, exceptions.spoke = speak, exceptions.spoken = speak, exceptions.spotlit = spotlight, exceptions.spotted = spot, exceptions.spotting = spot, exceptions.sprang = spring, exceptions.sprigged = sprig, exceptions.sprigging = sprig, exceptions.sprung = spring, exceptions.spudded = spud, exceptions.spudding = spud, exceptions.spun = spin, exceptions.spurred = spur, exceptions.spurring = spur, exceptions.squatted = squat, exceptions.squatting = squat, exceptions.squibbed = squib, exceptions.squibbing = squib, exceptions.squidded = squid, exceptions.squidding = squid, exceptions.squilgee = squeegee, exceptions.stabbed = stab, exceptions.stabbing = stab, exceptions.stank = stink, exceptions.starred = star3, exceptions.starring = star3, exceptions.steadied = steady, exceptions.stellified = stellify, exceptions.stemmed = stem, exceptions.stemming = stem, exceptions.stencilled = stencil, exceptions.stencilling = stencil, exceptions.stepped = step, exceptions.stepping = step, exceptions.stetted = stet, exceptions.stetting = stet, exceptions.stied = sty, exceptions.stilettoeing = stiletto, exceptions.stirred = stir, exceptions.stirring = stir, exceptions.stole = steal, exceptions.stolen = steal, exceptions.stood = stand, exceptions.stopped = stop2, exceptions.stopping = stop2, exceptions.storied = story, exceptions.stotted = stot, exceptions.stotting = stot, exceptions.stove = stave, exceptions.strapped = strap, exceptions.strapping = strap, exceptions.stratified = stratify, exceptions.strewn = strew, exceptions.stridden = stride, exceptions.stripped = strip, exceptions.stripping = strip, exceptions.striven = strive, exceptions.strode = stride, exceptions.stropped = strop, exceptions.stropping = strop, exceptions.strove = strive, exceptions.strown = strow, exceptions.stricken = strike, exceptions.struck = strike, exceptions.strummed = strum, exceptions.strumming = strum, exceptions.strung = string, exceptions.strutted = strut, exceptions.strutting = strut, exceptions.stubbed = stub, exceptions.stubbing = stub, exceptions.stuck = stick, exceptions.studded = stud, exceptions.studding = stud, exceptions.studied = study, exceptions.stultified = stultify, exceptions.stummed = stum, exceptions.stumming = stum, exceptions.stung = sting, exceptions.stunk = stink, exceptions.stunned = stun, exceptions.stunning = stun, exceptions.stupefied = stupefy, exceptions.stymying = stymie, exceptions.subbed = sub, exceptions.subbing = sub, exceptions.subjectified = subjectify, exceptions.subletting = sublet, exceptions.submitted = submit, exceptions.submitting = submit, exceptions.subtotalled = subtotal, exceptions.subtotalling = subtotal, exceptions.sullied = sully, exceptions.sulphuretted = sulphuret, exceptions.sulphuretting = sulphuret, exceptions.summed = sum, exceptions.summing = sum, exceptions.sung = sing, exceptions.sunk = sink, exceptions.sunken = sink, exceptions.sunned = sun, exceptions.sunning = sun, exceptions.supped = sup, exceptions.supping = sup, exceptions.supplied = supply, exceptions.swabbed = swab, exceptions.swabbing = swab, exceptions.swagged = swag, exceptions.swagging = swag, exceptions.swam = swim, exceptions.swapped = swap, exceptions.swapping = swap, exceptions.swatted = swat, exceptions.swatting = swat, exceptions.swept = sweep, exceptions.swigged = swig, exceptions.swigging = swig, exceptions.swimming = swim, exceptions.swivelled = swivel, exceptions.swivelling = swivel, exceptions.swollen = swell, exceptions.swopped = swap, exceptions.swopping = swap, exceptions.swops = swap, exceptions.swore = swear, exceptions.sworn = swear, exceptions.swotted = swot, exceptions.swotting = swot, exceptions.swum = swim, exceptions.swung = swing, exceptions.syllabified = syllabify, exceptions.symbolled = symbol, exceptions.symbolling = symbol, exceptions.tabbed = tab, exceptions.tabbing = tab, exceptions.tagged = tag, exceptions.tagging = tag, exceptions.taken = take, exceptions.talcked = talc, exceptions.talcking = talc, exceptions.tallied = tally, exceptions.tammied = tammy, exceptions.tanned = tan, exceptions.tanning = tan, exceptions.tapped = tap, exceptions.tapping = tap, exceptions.tarred = tar, exceptions.tarried = tarry, exceptions.tarring = tar, exceptions.tasselled = tassel, exceptions.tasselling = tassel, exceptions.tatted = tat, exceptions.tatting = tat, exceptions.taught = teach, exceptions.taxis = taxis, exceptions.taxying = taxi, exceptions.teaselled = teasel, exceptions.teaselling = teasel, exceptions.tedded = ted, exceptions.tedding = ted, exceptions.tepefied = tepefy, exceptions.terrified = terrify, exceptions.testes = testes, exceptions.testified = testify, exceptions.thinned = thin, exceptions.thinning = thin, exceptions.thought = think, exceptions.threw = throw1, exceptions.thriven = thrive, exceptions.throbbed = throb, exceptions.throbbing = throb, exceptions.throve = thrive, exceptions.thrown = throw1, exceptions.thrummed = thrum, exceptions.thrumming = thrum, exceptions.thudded = thud, exceptions.thudding = thud, exceptions.tidied = tidy, exceptions.tinned = tin, exceptions.tinning = tin, exceptions.tinselled = tinsel, exceptions.tinselling = tinsel, exceptions.tipped = tip, exceptions.tipping = tip, exceptions.tittupped = tittup, exceptions.tittupping = tittup, exceptions.toadied = toady, exceptions.togged = tog, exceptions.togging = tog, exceptions.told = tell, exceptions.took = take, exceptions.topped = top, exceptions.topping = top, exceptions.tore = tear, exceptions.torn = tear, exceptions.torrefied = torrefy, exceptions.torrify = torrefy, exceptions.totalled = total, exceptions.totalling = total, exceptions.totted = tot, exceptions.totting = tot, exceptions.towelled = towel, exceptions.towelling = towel, exceptions.trafficked = traffic, exceptions.trafficking = traffic, exceptions.trameled = trammel, exceptions.trameling = trammel, exceptions.tramelled = trammel, exceptions.tramelling = trammel, exceptions.tramels = trammel, exceptions.trammed = tram, exceptions.tramming = tram, exceptions.transferred = transfer, exceptions.transferring = transfer, exceptions.transfixt = transfix, exceptions.tranship = transship, exceptions.transhipped = tranship, exceptions.transhipping = tranship, exceptions.transmitted = transmit, exceptions.transmitting = transmit, exceptions.transmogrified = transmogrify, exceptions.transshipped = transship, exceptions.transshipping = transship, exceptions.trapanned = trapan, exceptions.trapanning = trapan, exceptions.trapped = trap, exceptions.trapping = trap, exceptions.travelled = travel, exceptions.travelling = travel, exceptions.travestied = travesty, exceptions.trekked = trek, exceptions.trekking = trek, exceptions.trepanned = trepan, exceptions.trepanning = trepan, exceptions.tried = try1, exceptions.trigged = trig, exceptions.trigging = trig, exceptions.trimmed = trim2, exceptions.trimming = trim2, exceptions.tripped = trip, exceptions.tripping = trip, exceptions.trod = tread, exceptions.trodden = tread, exceptions.trogged = trog, exceptions.trogging = trog, exceptions.trotted = trot, exceptions.trotting = trot, exceptions.trowelled = trowel, exceptions.trowelling = trowel, exceptions.tugged = tug, exceptions.tugging = tug, exceptions.tumefied = tumefy, exceptions.tunned = tun, exceptions.tunnelled = tunnel, exceptions.tunnelling = tunnel, exceptions.tunning = tun, exceptions.tupped = tup, exceptions.tupping = tup, exceptions.twigged = twig, exceptions.twigging = twig, exceptions.twinned = twin, exceptions.twinning = twin, exceptions.twitted = twit, exceptions.twitting = twit, exceptions.tying = tie, exceptions.typesetting = typeset, exceptions.typewritten = typewrite, exceptions.typewrote = typewrite, exceptions.typified = typify, exceptions.uglified = uglify, exceptions.unbarred = unbar, exceptions.unbarring = unbar, exceptions.unbent = unbend, exceptions.unbound = unbind, exceptions.uncapped = uncap, exceptions.uncapping = uncap, exceptions.unclad = unclothe, exceptions.unclogged = unclog, exceptions.unclogging = unclog, exceptions.underbidding = underbid, exceptions.underbought = underbuy, exceptions.undercutting = undercut, exceptions.underfed = underfeed, exceptions.undergirt = undergird, exceptions.undergone = undergo, exceptions.underlaid = underlay, exceptions.underlain = underlie, exceptions.underlay = underlie, exceptions.underletting = underlet, exceptions.underlying = underlie, exceptions.underpaid = underpay, exceptions.underpinned = underpin, exceptions.underpinning = underpin, exceptions.underpropped = underprop, exceptions.underpropping = underprop, exceptions.undersetting = underset, exceptions.undershot = undershoot, exceptions.undersold = undersell, exceptions.understood = understand, exceptions.understudied = understudy, exceptions.undertaken = undertake, exceptions.undertook = undertake, exceptions.underwent = undergo, exceptions.underwritten = underwrite, exceptions.underwrote = underwrite, exceptions.undid = undo, exceptions.undone = undo, exceptions.unfitted = unfit, exceptions.unfitting = unfit, exceptions.unfroze = unfreeze, exceptions.unfrozen = unfreeze, exceptions.unified = unify, exceptions.unkennelled = unkennel, exceptions.unkennelling = unkennel, exceptions.unknitted = unknit, exceptions.unknitting = unknit, exceptions.unlaid = unlay, exceptions.unlearnt = unlearn, exceptions.unmade = unmake, exceptions.unmanned = unman, exceptions.unmanning = unman, exceptions.unpegged = unpeg, exceptions.unpegging = unpeg, exceptions.unpinned = unpin, exceptions.unpinning = unpin, exceptions.unplugged = unplug, exceptions.unplugging = unplug, exceptions.unravelled = unravel, exceptions.unravelling = unravel, exceptions.unrigged = unrig, exceptions.unrigging = unrig, exceptions.unripped = unrip, exceptions.unripping = unrip, exceptions.unrove = unreeve, exceptions.unsaid = unsay, exceptions.unshipped = unship, exceptions.unshipping = unship, exceptions.unslung = unsling, exceptions.unsnapped = unsnap, exceptions.unsnapping = unsnap, exceptions.unspoke = unspeak, exceptions.unspoken = unspeak, exceptions.unsteadied = unsteady, exceptions.unstepped = unstep, exceptions.unstepping = unstep, exceptions.unstopped = unstop, exceptions.unstopping = unstop, exceptions.unstrung = unstring, exceptions.unstuck = unstick, exceptions.unswore = unswear, exceptions.unsworn = unswear, exceptions.untaught = unteach, exceptions.unthought = unthink, exceptions.untidied = untidy, exceptions.untrod = untread, exceptions.untrodden = untread, exceptions.untying = untie, exceptions.unwound = unwind, exceptions.unwrapped = unwrap, exceptions.unwrapping = unwrap, exceptions.unzipped = unzip, exceptions.unzipping = unzip, exceptions.upbuilt = upbuild, exceptions.upheld = uphold, exceptions.uphove = upheave, exceptions.upped = up, exceptions.uppercutting = uppercut, exceptions.upping = up, exceptions.uprisen = uprise, exceptions.uprose = uprise, exceptions.upsetting = upset, exceptions.upsprang = upspring, exceptions.upsprung = upspring, exceptions.upswept = upsweep, exceptions.upswollen = upswell, exceptions.upswung = upswing, exceptions.vagged = vag, exceptions.vagging = vag, exceptions.varied = vary, exceptions.vatted = vat, exceptions.vatting = vat, exceptions.verbified = verbify, exceptions.verified = verify, exceptions.versified = versify, exceptions.vetted = vet, exceptions.vetting = vet, exceptions.victualled = victual, exceptions.victualling = victual, exceptions.vilified = vilify, exceptions.vitrified = vitrify, exceptions.vitriolled = vitriol, exceptions.vitriolling = vitriol, exceptions.vivified = vivify, exceptions.vying = vie, exceptions.wadded = wad, exceptions.waddied = waddy, exceptions.wadding = wad, exceptions.wadsetted = wadset, exceptions.wadsetting = wadset, exceptions.wagged = wag, exceptions.wagging = wag, exceptions.wanned = wan, exceptions.wanning = wan, exceptions.warred = war, exceptions.warring = war, exceptions.was = be, exceptions.waylaid = waylay, exceptions.wearied = weary, exceptions.weatherstripped = weatherstrip, exceptions.weatherstripping = weatherstrip, exceptions.webbed = web, exceptions.webbing = web, exceptions.wedded = wed, exceptions.wedding = wed, exceptions.weed = weed, exceptions.went = go, exceptions.wept = weep, exceptions.were = be, exceptions.wetted = wet, exceptions.wetting = wet, exceptions.whammed = wham, exceptions.whamming = wham, exceptions.whapped = whap, exceptions.whapping = whap, exceptions.whetted = whet, exceptions.whetting = whet, exceptions.whinnied = whinny, exceptions.whipped = whip, exceptions.whipping = whip, exceptions.whipsawn = whipsaw, exceptions.whirred = whir, exceptions.whirring = whir, exceptions.whizzed = whiz, exceptions.whizzes = whiz, exceptions.whizzing = whiz, exceptions.whopped = whop, exceptions.whopping = whop, exceptions.wigged = wig, exceptions.wigging = wig, exceptions.wigwagged = wigwag, exceptions.wigwagging = wigwag, exceptions.wildcatted = wildcat, exceptions.wildcatting = wildcat, exceptions.winning = win, exceptions.winterfed = winterfeed, exceptions.wiredrawn = wiredraw, exceptions.wiredrew = wiredraw, exceptions.withdrawn = withdraw, exceptions.withdrew = withdraw, exceptions.withheld = withhold, exceptions.withstood = withstand, exceptions.woke = wake, exceptions.woken = wake, exceptions.won = win, exceptions.wonned = won, exceptions.wonning = won, exceptions.wore = wear, exceptions.worn = wear, exceptions.worried = worry, exceptions.worshipped = worship, exceptions.worshipping = worship, exceptions.wound = wind, exceptions.wove = weave, exceptions.woven = weave, exceptions.wrapped = wrap2, exceptions.wrapping = wrap2, exceptions.wried = wry, exceptions.written = write, exceptions.wrote = write, exceptions.wrought = work, exceptions.wrung = wring, exceptions.would = will, exceptions.yakked = yak, exceptions.yakking = yak, exceptions.yapped = yap, exceptions.yapping = yap, exceptions.ycleped = clepe, exceptions.yclept = clepe, exceptions.yenned = yen, exceptions.yenning = yen, exceptions.yodelled = yodel, exceptions.yodelling = yodel, exceptions.zapped = zap, exceptions.zapping = zap, exceptions.zigzagged = zigzag, exceptions.zigzagging = zigzag, exceptions.zipped = zip, exceptions.zipping = zip, module2.exports = exceptions; + exceptions.shrunken = shrink, exceptions.shunned = shun, exceptions.shunning = shun, exceptions.shutting = shut, exceptions.sicked = sic, exceptions.sicking = sic, exceptions.sideslipped = sideslip, exceptions.sideslipping = sideslip, exceptions.sidestepped = sidestep, exceptions.sidestepping = sidestep, exceptions.sightsaw = sightsee, exceptions.sightseen = sightsee, exceptions.signalled = signal, exceptions.signalling = signal, exceptions.signified = signify, exceptions.silicified = silicify, exceptions.simplified = simplify, exceptions.singing = sing, exceptions.sinned = sin, exceptions.sinning = sin, exceptions.sipped = sip, exceptions.sipping = sip, exceptions.sitting = sit, exceptions.skellied = skelly, exceptions.skenned = sken, exceptions.skenning = sken, exceptions.sketted = sket, exceptions.sketting = sket, exceptions.skidded = skid, exceptions.skidding = skid, exceptions.skimmed = skim, exceptions.skimming = skim, exceptions.skinned = skin, exceptions.skinning = skin, exceptions.skipped = skip, exceptions.skipping = skip, exceptions.skivvied = skivvy, exceptions.skydove = skydive, exceptions.slabbed = slab, exceptions.slabbing = slab, exceptions.slagged = slag, exceptions.slagging = slag, exceptions.slain = slay, exceptions.slammed = slam, exceptions.slamming = slam, exceptions.slapped = slap, exceptions.slapping = slap, exceptions.slatted = slat, exceptions.slatting = slat, exceptions.sledding = sled, exceptions.slept = sleep2, exceptions.slew = slay, exceptions.slid = slide, exceptions.slidden = slide, exceptions.slipped = slip, exceptions.slipping = slip, exceptions.slitting = slit, exceptions.slogged = slog, exceptions.slogging = slog, exceptions.slopped = slop, exceptions.slopping = slop, exceptions.slotted = slot, exceptions.slotting = slot, exceptions.slugged = slug, exceptions.slugging = slug, exceptions.slummed = slum, exceptions.slumming = slum, exceptions.slung = sling, exceptions.slunk = slink, exceptions.slurred = slur, exceptions.slurring = slur, exceptions.smelt = smell, exceptions.smit = smite, exceptions.smitten = smite, exceptions.smote = smite, exceptions.smutted = smut, exceptions.smutting = smut, exceptions.snagged = snag, exceptions.snagging = snag, exceptions.snapped = snap, exceptions.snapping = snap, exceptions.snedded = sned, exceptions.snedding = sned, exceptions.snipped = snip, exceptions.snipping = snip, exceptions.snivelled = snivel, exceptions.snivelling = snivel, exceptions.snogged = snog, exceptions.snogging = snog, exceptions.snubbed = snub, exceptions.snubbing = snub, exceptions.snuck = sneak, exceptions.snugged = snug, exceptions.snugging = snug, exceptions.sobbed = sob, exceptions.sobbing = sob, exceptions.sodded = sod, exceptions.sodding = sod, exceptions.sold = sell, exceptions.solemnified = solemnify, exceptions.solidified = solidify, exceptions.soothsaid = soothsay, exceptions.sopped = sop, exceptions.sopping = sop, exceptions.sought = seek, exceptions.sown = sow, exceptions.spagged = spag, exceptions.spagging = spag, exceptions.spancelled = spancel, exceptions.spancelling = spancel, exceptions.spanned = span, exceptions.spanning = span, exceptions.sparred = spar, exceptions.sparring = spar, exceptions.spat = spit, exceptions.spatted = spat, exceptions.spatting = spat, exceptions.specified = specify, exceptions.sped = speed, exceptions.speechified = speechify, exceptions.spellbound = spellbind, exceptions.spelt = spell, exceptions.spent = spend, exceptions.spied = spy, exceptions.spilt = spill, exceptions.spinning = spin, exceptions.spiralled = spiral, exceptions.spiralling = spiral, exceptions.spitted = spit, exceptions.spitting = spit, exceptions.splitting = split, exceptions.spoilt = spoil, exceptions.spoke = speak, exceptions.spoken = speak, exceptions.spotlit = spotlight, exceptions.spotted = spot, exceptions.spotting = spot, exceptions.sprang = spring, exceptions.sprigged = sprig, exceptions.sprigging = sprig, exceptions.sprung = spring, exceptions.spudded = spud, exceptions.spudding = spud, exceptions.spun = spin, exceptions.spurred = spur, exceptions.spurring = spur, exceptions.squatted = squat, exceptions.squatting = squat, exceptions.squibbed = squib, exceptions.squibbing = squib, exceptions.squidded = squid, exceptions.squidding = squid, exceptions.squilgee = squeegee, exceptions.stabbed = stab, exceptions.stabbing = stab, exceptions.stank = stink, exceptions.starred = star3, exceptions.starring = star3, exceptions.steadied = steady, exceptions.stellified = stellify, exceptions.stemmed = stem, exceptions.stemming = stem, exceptions.stencilled = stencil, exceptions.stencilling = stencil, exceptions.stepped = step, exceptions.stepping = step, exceptions.stetted = stet, exceptions.stetting = stet, exceptions.stied = sty, exceptions.stilettoeing = stiletto, exceptions.stirred = stir, exceptions.stirring = stir, exceptions.stole = steal, exceptions.stolen = steal, exceptions.stood = stand, exceptions.stopped = stop2, exceptions.stopping = stop2, exceptions.storied = story, exceptions.stotted = stot, exceptions.stotting = stot, exceptions.stove = stave, exceptions.strapped = strap, exceptions.strapping = strap, exceptions.stratified = stratify, exceptions.strewn = strew, exceptions.stridden = stride, exceptions.stripped = strip, exceptions.stripping = strip, exceptions.striven = strive, exceptions.strode = stride, exceptions.stropped = strop, exceptions.stropping = strop, exceptions.strove = strive, exceptions.strown = strow, exceptions.stricken = strike, exceptions.struck = strike, exceptions.strummed = strum, exceptions.strumming = strum, exceptions.strung = string, exceptions.strutted = strut, exceptions.strutting = strut, exceptions.stubbed = stub, exceptions.stubbing = stub, exceptions.stuck = stick, exceptions.studded = stud, exceptions.studding = stud, exceptions.studied = study, exceptions.stultified = stultify, exceptions.stummed = stum, exceptions.stumming = stum, exceptions.stung = sting, exceptions.stunk = stink, exceptions.stunned = stun, exceptions.stunning = stun, exceptions.stupefied = stupefy, exceptions.stymying = stymie, exceptions.subbed = sub, exceptions.subbing = sub, exceptions.subjectified = subjectify, exceptions.subletting = sublet, exceptions.submitted = submit, exceptions.submitting = submit, exceptions.subtotalled = subtotal, exceptions.subtotalling = subtotal, exceptions.sullied = sully, exceptions.sulphuretted = sulphuret, exceptions.sulphuretting = sulphuret, exceptions.summed = sum, exceptions.summing = sum, exceptions.sung = sing, exceptions.sunk = sink, exceptions.sunken = sink, exceptions.sunned = sun, exceptions.sunning = sun, exceptions.supped = sup, exceptions.supping = sup, exceptions.supplied = supply, exceptions.swabbed = swab, exceptions.swabbing = swab, exceptions.swagged = swag, exceptions.swagging = swag, exceptions.swam = swim, exceptions.swapped = swap, exceptions.swapping = swap, exceptions.swatted = swat, exceptions.swatting = swat, exceptions.swept = sweep, exceptions.swigged = swig, exceptions.swigging = swig, exceptions.swimming = swim, exceptions.swivelled = swivel, exceptions.swivelling = swivel, exceptions.swollen = swell, exceptions.swopped = swap, exceptions.swopping = swap, exceptions.swops = swap, exceptions.swore = swear, exceptions.sworn = swear, exceptions.swotted = swot, exceptions.swotting = swot, exceptions.swum = swim, exceptions.swung = swing, exceptions.syllabified = syllabify, exceptions.symbolled = symbol, exceptions.symbolling = symbol, exceptions.tabbed = tab, exceptions.tabbing = tab, exceptions.tagged = tag, exceptions.tagging = tag, exceptions.taken = take, exceptions.talcked = talc, exceptions.talcking = talc, exceptions.tallied = tally, exceptions.tammied = tammy, exceptions.tanned = tan, exceptions.tanning = tan, exceptions.tapped = tap, exceptions.tapping = tap, exceptions.tarred = tar, exceptions.tarried = tarry, exceptions.tarring = tar, exceptions.tasselled = tassel, exceptions.tasselling = tassel, exceptions.tatted = tat, exceptions.tatting = tat, exceptions.taught = teach, exceptions.taxis = taxis, exceptions.taxying = taxi, exceptions.teaselled = teasel, exceptions.teaselling = teasel, exceptions.tedded = ted, exceptions.tedding = ted, exceptions.tepefied = tepefy, exceptions.terrified = terrify, exceptions.testes = testes, exceptions.testified = testify, exceptions.thinned = thin, exceptions.thinning = thin, exceptions.thought = think, exceptions.threw = throw1, exceptions.thriven = thrive, exceptions.throbbed = throb, exceptions.throbbing = throb, exceptions.throve = thrive, exceptions.thrown = throw1, exceptions.thrummed = thrum, exceptions.thrumming = thrum, exceptions.thudded = thud, exceptions.thudding = thud, exceptions.tidied = tidy, exceptions.tinned = tin, exceptions.tinning = tin, exceptions.tinselled = tinsel, exceptions.tinselling = tinsel, exceptions.tipped = tip, exceptions.tipping = tip, exceptions.tittupped = tittup, exceptions.tittupping = tittup, exceptions.toadied = toady, exceptions.togged = tog, exceptions.togging = tog, exceptions.told = tell, exceptions.took = take, exceptions.topped = top, exceptions.topping = top, exceptions.tore = tear, exceptions.torn = tear, exceptions.torrefied = torrefy, exceptions.torrify = torrefy, exceptions.totalled = total, exceptions.totalling = total, exceptions.totted = tot, exceptions.totting = tot, exceptions.towelled = towel, exceptions.towelling = towel, exceptions.trafficked = traffic, exceptions.trafficking = traffic, exceptions.trameled = trammel, exceptions.trameling = trammel, exceptions.tramelled = trammel, exceptions.tramelling = trammel, exceptions.tramels = trammel, exceptions.trammed = tram, exceptions.tramming = tram, exceptions.transferred = transfer, exceptions.transferring = transfer, exceptions.transfixt = transfix, exceptions.tranship = transship, exceptions.transhipped = tranship, exceptions.transhipping = tranship, exceptions.transmitted = transmit, exceptions.transmitting = transmit, exceptions.transmogrified = transmogrify, exceptions.transshipped = transship, exceptions.transshipping = transship, exceptions.trapanned = trapan, exceptions.trapanning = trapan, exceptions.trapped = trap, exceptions.trapping = trap, exceptions.travelled = travel, exceptions.travelling = travel, exceptions.travestied = travesty, exceptions.trekked = trek, exceptions.trekking = trek, exceptions.trepanned = trepan, exceptions.trepanning = trepan, exceptions.tried = try1, exceptions.trigged = trig, exceptions.trigging = trig, exceptions.trimmed = trim2, exceptions.trimming = trim2, exceptions.tripped = trip, exceptions.tripping = trip, exceptions.trod = tread, exceptions.trodden = tread, exceptions.trogged = trog, exceptions.trogging = trog, exceptions.trotted = trot, exceptions.trotting = trot, exceptions.trowelled = trowel, exceptions.trowelling = trowel, exceptions.tugged = tug, exceptions.tugging = tug, exceptions.tumefied = tumefy, exceptions.tunned = tun, exceptions.tunnelled = tunnel, exceptions.tunnelling = tunnel, exceptions.tunning = tun, exceptions.tupped = tup, exceptions.tupping = tup, exceptions.twigged = twig, exceptions.twigging = twig, exceptions.twinned = twin, exceptions.twinning = twin, exceptions.twitted = twit, exceptions.twitting = twit, exceptions.tying = tie, exceptions.typesetting = typeset, exceptions.typewritten = typewrite, exceptions.typewrote = typewrite, exceptions.typified = typify, exceptions.uglified = uglify, exceptions.unbarred = unbar, exceptions.unbarring = unbar, exceptions.unbent = unbend, exceptions.unbound = unbind, exceptions.uncapped = uncap, exceptions.uncapping = uncap, exceptions.unclad = unclothe, exceptions.unclogged = unclog, exceptions.unclogging = unclog, exceptions.underbidding = underbid, exceptions.underbought = underbuy, exceptions.undercutting = undercut, exceptions.underfed = underfeed, exceptions.undergirt = undergird, exceptions.undergone = undergo, exceptions.underlaid = underlay, exceptions.underlain = underlie, exceptions.underlay = underlie, exceptions.underletting = underlet, exceptions.underlying = underlie, exceptions.underpaid = underpay, exceptions.underpinned = underpin, exceptions.underpinning = underpin, exceptions.underpropped = underprop, exceptions.underpropping = underprop, exceptions.undersetting = underset, exceptions.undershot = undershoot, exceptions.undersold = undersell, exceptions.understood = understand, exceptions.understudied = understudy, exceptions.undertaken = undertake, exceptions.undertook = undertake, exceptions.underwent = undergo, exceptions.underwritten = underwrite, exceptions.underwrote = underwrite, exceptions.undid = undo, exceptions.undone = undo, exceptions.unfitted = unfit, exceptions.unfitting = unfit, exceptions.unfroze = unfreeze, exceptions.unfrozen = unfreeze, exceptions.unified = unify, exceptions.unkennelled = unkennel, exceptions.unkennelling = unkennel, exceptions.unknitted = unknit, exceptions.unknitting = unknit, exceptions.unlaid = unlay, exceptions.unlearnt = unlearn, exceptions.unmade = unmake, exceptions.unmanned = unman, exceptions.unmanning = unman, exceptions.unpegged = unpeg, exceptions.unpegging = unpeg, exceptions.unpinned = unpin, exceptions.unpinning = unpin, exceptions.unplugged = unplug, exceptions.unplugging = unplug, exceptions.unravelled = unravel, exceptions.unravelling = unravel, exceptions.unrigged = unrig, exceptions.unrigging = unrig, exceptions.unripped = unrip, exceptions.unripping = unrip, exceptions.unrove = unreeve, exceptions.unsaid = unsay, exceptions.unshipped = unship, exceptions.unshipping = unship, exceptions.unslung = unsling, exceptions.unsnapped = unsnap, exceptions.unsnapping = unsnap, exceptions.unspoke = unspeak, exceptions.unspoken = unspeak, exceptions.unsteadied = unsteady, exceptions.unstepped = unstep, exceptions.unstepping = unstep, exceptions.unstopped = unstop, exceptions.unstopping = unstop, exceptions.unstrung = unstring, exceptions.unstuck = unstick, exceptions.unswore = unswear, exceptions.unsworn = unswear, exceptions.untaught = unteach, exceptions.unthought = unthink, exceptions.untidied = untidy, exceptions.untrod = untread, exceptions.untrodden = untread, exceptions.untying = untie, exceptions.unwound = unwind, exceptions.unwrapped = unwrap, exceptions.unwrapping = unwrap, exceptions.unzipped = unzip, exceptions.unzipping = unzip, exceptions.upbuilt = upbuild, exceptions.upheld = uphold, exceptions.uphove = upheave, exceptions.upped = up, exceptions.uppercutting = uppercut, exceptions.upping = up, exceptions.uprisen = uprise, exceptions.uprose = uprise, exceptions.upsetting = upset, exceptions.upsprang = upspring, exceptions.upsprung = upspring, exceptions.upswept = upsweep, exceptions.upswollen = upswell, exceptions.upswung = upswing, exceptions.vagged = vag, exceptions.vagging = vag, exceptions.varied = vary, exceptions.vatted = vat, exceptions.vatting = vat, exceptions.verbified = verbify, exceptions.verified = verify, exceptions.versified = versify, exceptions.vetted = vet, exceptions.vetting = vet, exceptions.victualled = victual, exceptions.victualling = victual, exceptions.vilified = vilify, exceptions.vitrified = vitrify, exceptions.vitriolled = vitriol, exceptions.vitriolling = vitriol, exceptions.vivified = vivify, exceptions.vying = vie, exceptions.wadded = wad, exceptions.waddied = waddy, exceptions.wadding = wad, exceptions.wadsetted = wadset, exceptions.wadsetting = wadset, exceptions.wagged = wag, exceptions.wagging = wag, exceptions.wanned = wan, exceptions.wanning = wan, exceptions.warred = war, exceptions.warring = war, exceptions.was = be, exceptions.waylaid = waylay, exceptions.wearied = weary, exceptions.weatherstripped = weatherstrip, exceptions.weatherstripping = weatherstrip, exceptions.webbed = web, exceptions.webbing = web, exceptions.wedded = wed, exceptions.wedding = wed, exceptions.weed = weed, exceptions.went = go, exceptions.wept = weep, exceptions.were = be, exceptions.wetted = wet, exceptions.wetting = wet, exceptions.whammed = wham, exceptions.whamming = wham, exceptions.whapped = whap, exceptions.whapping = whap, exceptions.whetted = whet, exceptions.whetting = whet, exceptions.whinnied = whinny, exceptions.whipped = whip, exceptions.whipping = whip, exceptions.whipsawn = whipsaw, exceptions.whirred = whir, exceptions.whirring = whir, exceptions.whizzed = whiz, exceptions.whizzes = whiz, exceptions.whizzing = whiz, exceptions.whopped = whop, exceptions.whopping = whop, exceptions.wigged = wig, exceptions.wigging = wig, exceptions.wigwagged = wigwag, exceptions.wigwagging = wigwag, exceptions.wildcatted = wildcat, exceptions.wildcatting = wildcat, exceptions.winning = win, exceptions.winterfed = winterfeed, exceptions.wiredrawn = wiredraw, exceptions.wiredrew = wiredraw, exceptions.withdrawn = withdraw, exceptions.withdrew = withdraw, exceptions.withheld = withhold, exceptions.withstood = withstand, exceptions.woke = wake, exceptions.woken = wake, exceptions.won = win, exceptions.wonned = won, exceptions.wonning = won, exceptions.wore = wear, exceptions.worn = wear, exceptions.worried = worry, exceptions.worshipped = worship, exceptions.worshipping = worship, exceptions.wound = wind, exceptions.wove = weave, exceptions.woven = weave, exceptions.wrapped = wrap2, exceptions.wrapping = wrap2, exceptions.wried = wry, exceptions.written = write, exceptions.wrote = write, exceptions.wrought = work, exceptions.wrung = wring, exceptions.would = will, exceptions.yakked = yak, exceptions.yakking = yak, exceptions.yapped = yap, exceptions.yapping = yap, exceptions.ycleped = clepe, exceptions.yclept = clepe, exceptions.yenned = yen, exceptions.yenning = yen, exceptions.yodelled = yodel, exceptions.yodelling = yodel, exceptions.zapped = zap, exceptions.zapping = zap, exceptions.zigzagged = zigzag, exceptions.zigzagging = zigzag, exceptions.zipped = zip, exceptions.zipping = zip, module2.exports = exceptions; } }); @@ -115162,85 +115539,85 @@ var require_wink_nlp_utils = __commonJS({ }); // ../vscode/src/completions/context/retrievers/jaccard-similarity/bestJaccardMatch.ts -function bestJaccardMatch(targetText, matchText, windowSize) { - const wordCount = (words) => { - let count = 0; - for (const v of words.values()) { - count += v; - } - return count; - }; - const subtract2 = (minuend, subtrahend) => { - let decrease = 0; - for (const [word, count] of subtrahend) { - const currentCount = minuend.get(word) || 0; - const newCount = Math.max(0, currentCount - count); - minuend.set(word, newCount); - decrease += newCount - currentCount; - } - return decrease; - }; - const add2 = (target, window3, intersection, newLine) => { - let windowIncrease = 0; - let intersectionIncrease = 0; - for (const [word, count] of newLine) { - windowIncrease += count; - window3.set(word, (window3.get(word) || 0) + count); - const targetCount2 = target.get(word) || 0; - if (targetCount2 > 0) { - const intersectionCount = intersection.get(word) || 0; - const newIntersectionCount = Math.min(count + intersectionCount, targetCount2); - intersection.set(word, newIntersectionCount); - intersectionIncrease += newIntersectionCount - intersectionCount; - } - } - return { windowIncrease, intersectionIncrease }; - }; - const targetWords = getWords(targetText); - const targetCount = wordCount(targetWords); +function bestJaccardMatches(targetText, matchText, windowSize, maxMatches) { + if (windowSize < 1) { + throw new Error("windowSize must be a positive integer"); + } + const targetOccurrences = getWordOccurrences(targetText); + const targetWordCounts = sumWordCounts(targetOccurrences); const lines2 = matchText.split("\n"); - const wordsForEachLine = lines2.map((line) => getWords(line)); - const windowWords = /* @__PURE__ */ new Map(); - for (let i = 0; i < Math.min(windowSize, lines2.length); i++) { + const wordsForEachLine = lines2.map((line) => getWordOccurrences(line)); + const firstWindowStart = 0; + const firstWindowEnd = Math.min(windowSize - 1, lines2.length - 1); + const windowOccurrences = /* @__PURE__ */ new Map(); + for (let i = firstWindowStart; i <= firstWindowEnd; i++) { for (const [wordInThisLine, wordInThisLineCount] of wordsForEachLine[i].entries()) { - windowWords.set(wordInThisLine, (windowWords.get(wordInThisLine) || 0) + wordInThisLineCount); - } - } - let windowCount = wordCount(windowWords); - const bothWords = /* @__PURE__ */ new Map(); - for (const [word, wordCount2] of targetWords.entries()) { - bothWords.set(word, Math.min(wordCount2, windowWords.get(word) || 0)); - } - let bothCount = wordCount(bothWords); - let bestScore = jaccardDistance(targetCount, windowCount, bothCount); - let bestWindow = [0, Math.min(windowSize, lines2.length)]; - for (let i = 0; i < wordsForEachLine.length - windowSize; i++) { - windowCount += subtract2(windowWords, wordsForEachLine[i]); - bothCount += subtract2(bothWords, wordsForEachLine[i]); - const { windowIncrease, intersectionIncrease } = add2( - targetWords, - windowWords, - bothWords, - wordsForEachLine[i + windowSize] + windowOccurrences.set( + wordInThisLine, + (windowOccurrences.get(wordInThisLine) || 0) + wordInThisLineCount + ); + } + } + let windowWordCounts = sumWordCounts(windowOccurrences); + const intersectionOccurrences = /* @__PURE__ */ new Map(); + for (const [word, wordCount] of targetOccurrences.entries()) { + intersectionOccurrences.set(word, Math.min(wordCount, windowOccurrences.get(word) || 0)); + } + let intersectionWordCounts = sumWordCounts(intersectionOccurrences); + const windows3 = [ + { + score: jaccardSimilarity(targetWordCounts, windowWordCounts, intersectionWordCounts), + content: lines2.slice(firstWindowStart, firstWindowEnd + 1).join("\n"), + startLine: firstWindowStart, + endLine: firstWindowEnd + } + ]; + for (let i = 1; i <= lines2.length - windowSize; i++) { + windowWordCounts += subtract(windowOccurrences, wordsForEachLine[i - 1]); + intersectionWordCounts += subtract(intersectionOccurrences, wordsForEachLine[i - 1]); + const { windowIncrease, intersectionIncrease } = add( + targetOccurrences, + windowOccurrences, + intersectionOccurrences, + wordsForEachLine[i + windowSize - 1] ); - windowCount += windowIncrease; - bothCount += intersectionIncrease; - if (i % 5 === 0) { - const score = jaccardDistance(targetCount, windowCount, bothCount); - if (score > bestScore) { - bestScore = score; - bestWindow = [i + 1, i + windowSize + 1]; + windowWordCounts += windowIncrease; + intersectionWordCounts += intersectionIncrease; + const isLastWindow = i === lines2.length - windowSize; + if (lines2[i].trim() === "" && !isLastWindow) { + continue; + } + const score = jaccardSimilarity(targetWordCounts, windowWordCounts, intersectionWordCounts); + const startLine = i; + const endLine = i + windowSize - 1; + windows3.push({ + score, + content: lines2.slice(startLine, endLine + 1).join("\n"), + startLine, + endLine + }); + } + windows3.sort((a, b) => b.score - a.score); + const retainedWindows = []; + const includedLines = /* @__PURE__ */ new Set(); + for (const window3 of windows3) { + let hasOverlap = false; + for (let i = window3.startLine; i <= window3.endLine; i++) { + if (includedLines.has(i)) { + hasOverlap = true; + break; } } + if (!hasOverlap) { + for (let i = window3.startLine; i <= window3.endLine; i++) { + includedLines.add(i); + } + retainedWindows.push(window3); + } } - return { - score: bestScore, - content: lines2.slice(bestWindow[0], bestWindow[1]).join("\n"), - startLine: bestWindow[0], - endLine: Math.max(bestWindow[1] - 1, 0) - }; + return retainedWindows.slice(0, maxMatches); } -function jaccardDistance(left, right, intersection) { +function jaccardSimilarity(left, right, intersection) { const union = left + right - intersection; if (union < 0) { throw new Error("intersection can't be greater than the sum of left and right"); @@ -115250,7 +115627,7 @@ function jaccardDistance(left, right, intersection) { } return intersection / union; } -function getWords(s) { +function getWordOccurrences(s) { const frequencyCounter = /* @__PURE__ */ new Map(); const words = import_wink_nlp_utils.default.string.tokenize0(s); const filteredWords = import_wink_nlp_utils.default.tokens.removeWords(words); @@ -115260,6 +115637,39 @@ function getWords(s) { } return frequencyCounter; } +function sumWordCounts(words) { + let count = 0; + for (const v of words.values()) { + count += v; + } + return count; +} +function subtract(minuend, subtrahend) { + let decrease = 0; + for (const [word, count] of subtrahend) { + const currentCount = minuend.get(word) || 0; + const newCount = Math.max(0, currentCount - count); + minuend.set(word, newCount); + decrease += newCount - currentCount; + } + return decrease; +} +function add(target, window3, intersection, newLine) { + let windowIncrease = 0; + let intersectionIncrease = 0; + for (const [word, count] of newLine) { + windowIncrease += count; + window3.set(word, (window3.get(word) || 0) + count); + const targetCount = target.get(word) || 0; + if (targetCount > 0) { + const intersectionCount = intersection.get(word) || 0; + const newIntersectionCount = Math.min(count + intersectionCount, targetCount); + intersection.set(word, newIntersectionCount); + intersectionIncrease += newIntersectionCount - intersectionCount; + } + } + return { windowIncrease, intersectionIncrease }; +} var import_wink_nlp_utils; var init_bestJaccardMatch = __esm({ "../vscode/src/completions/context/retrievers/jaccard-similarity/bestJaccardMatch.ts"() { @@ -115268,76 +115678,6 @@ var init_bestJaccardMatch = __esm({ } }); -// ../vscode/src/completions/context/retrievers/jaccard-similarity/history.ts -var VSCodeDocumentHistory; -var init_history = __esm({ - "../vscode/src/completions/context/retrievers/jaccard-similarity/history.ts"() { - "use strict"; - init_vscode_shim(); - VSCodeDocumentHistory = class { - window = 50; - // tracks history in chronological order (latest at the end of the array) - history; - subscriptions = []; - constructor(register2 = () => window2.onDidChangeActiveTextEditor((event) => { - if (!event?.document.uri) { - return; - } - this.addItem({ - document: event.document - }); - })) { - this.history = []; - if (register2) { - const disposable = register2(); - if (disposable) { - this.subscriptions.push(disposable); - } - } - } - dispose() { - Disposable.from(...this.subscriptions).dispose(); - } - addItem(newItem) { - if (newItem.document.uri.scheme === "codegen") { - return; - } - const foundIndex = this.history.findIndex( - (item) => item.document.uri.toString() === newItem.document.uri.toString() - ); - if (foundIndex >= 0) { - this.history = [...this.history.slice(0, foundIndex), ...this.history.slice(foundIndex + 1)]; - } - this.history.push(newItem); - if (this.history.length > this.window) { - this.history.shift(); - } - } - /** - * Returns the last n items of history in reverse chronological order (latest item at the front) - */ - lastN(n, languageId, ignoreUris) { - const ret2 = []; - const ignoreSet = new Set(ignoreUris || []); - for (let i = this.history.length - 1; i >= 0; i--) { - const item = this.history[i]; - if (ret2.length > n) { - break; - } - if (ignoreSet.has(item.document.uri)) { - continue; - } - if (languageId && languageId !== item.document.languageId) { - continue; - } - ret2.push(item); - } - return ret2; - } - }; - } -}); - // ../node_modules/.pnpm/js-levenshtein@1.1.6/node_modules/js-levenshtein/index.js var require_js_levenshtein = __commonJS({ "../node_modules/.pnpm/js-levenshtein@1.1.6/node_modules/js-levenshtein/index.js"(exports2, module2) { @@ -116120,34 +116460,42 @@ async function* zipGenerators(generators) { } } async function* generatorWithErrorObserver(generator, errorObserver) { - while (true) { - try { - const res = await generator.next(); - if (res.done) { - return; + try { + while (true) { + try { + const res = await generator.next(); + if (res.done) { + return; + } + yield res.value; + } catch (error) { + errorObserver(error); + throw error; } - yield res.value; - } catch (error) { - errorObserver(error); - throw error; } + } finally { + generator.return(); } } async function* generatorWithTimeout(generator, timeoutMs, abortController) { - if (timeoutMs === 0) { - return; - } - const timeoutPromise = createTimeout(timeoutMs).finally(() => { - abortController.abort(); - }); - while (true) { - const { value, done } = await Promise.race([generator.next(), timeoutPromise]); - if (value) { - yield value; + try { + if (timeoutMs === 0) { + return; } - if (done) { - break; + const timeoutPromise = createTimeout(timeoutMs).finally(() => { + abortController.abort(); + }); + while (true) { + const { value, done } = await Promise.race([generator.next(), timeoutPromise]); + if (value) { + yield value; + } + if (done) { + break; + } } + } finally { + generator.return(); } } function createTimeout(timeoutMs) { @@ -116155,8 +116503,11 @@ function createTimeout(timeoutMs) { (_, reject) => setTimeout(() => reject(new TimeoutError("The request timed out")), timeoutMs) ); } +function sleep(ms) { + return new Promise((resolve8) => setTimeout(resolve8, ms)); +} var anthropic; -var init_utils7 = __esm({ +var init_utils9 = __esm({ "../vscode/src/completions/utils.ts"() { "use strict"; anthropic = __toESM(require_src2()); @@ -116180,7 +116531,7 @@ var subscriber, statistics, registerChangeListener; var init_statistics = __esm({ "../vscode/src/completions/statistics.ts"() { "use strict"; - init_utils7(); + init_utils9(); subscriber = createSubscriber(); statistics = { suggested: 0, @@ -116190,6 +116541,71 @@ var init_statistics = __esm({ } }); +// ../vscode/src/completions/completion-provider-config.ts +var CompletionProviderConfig, completionProviderConfig; +var init_completion_provider_config = __esm({ + "../vscode/src/completions/completion-provider-config.ts"() { + "use strict"; + CompletionProviderConfig = class { + _config; + /** + * Use the injected feature flag provider to make testing easier. + */ + featureFlagProvider; + flagsToResolve = [ + "cody-autocomplete-context-bfg-mixed" /* CodyAutocompleteContextBfgMixed */, + "cody-autocomplete-dynamic-multiline-completions" /* CodyAutocompleteDynamicMultilineCompletions */, + "cody-autocomplete-hot-streak" /* CodyAutocompleteHotStreak */, + "cody-autocomplete-single-multiline-request" /* CodyAutocompleteSingleMultilineRequest */, + "cody-autocomplete-fast-path" /* CodyAutocompleteFastPath */, + "cody-autocomplete-user-latency" /* CodyAutocompleteUserLatency */, + "cody-autocomplete-eager-cancellation" /* CodyAutocompleteEagerCancellation */, + "cody-autocomplete-tracing" /* CodyAutocompleteTracing */ + ]; + get config() { + if (!this._config) { + throw new Error("CompletionProviderConfig is not initialized"); + } + return this._config; + } + /** + * Should be called before `InlineCompletionItemProvider` instance is created, so that the singleton + * with resolved values is ready for downstream use. + */ + async init(config, featureFlagProvider2) { + this._config = config; + this.featureFlagProvider = featureFlagProvider2; + await Promise.all(this.flagsToResolve.map((flag) => featureFlagProvider2.evaluateFeatureFlag(flag))); + } + setConfig(config) { + this._config = config; + } + getPrefetchedFlag(flag) { + if (!this.featureFlagProvider) { + throw new Error("CompletionProviderConfig is not initialized"); + } + return Boolean(this.featureFlagProvider.getFromCache(flag)); + } + get dynamicMultilineCompletions() { + return this.config.autocompleteExperimentalDynamicMultilineCompletions || this.getPrefetchedFlag("cody-autocomplete-dynamic-multiline-completions" /* CodyAutocompleteDynamicMultilineCompletions */); + } + get hotStreak() { + return this.config.autocompleteExperimentalHotStreak || this.getPrefetchedFlag("cody-autocomplete-hot-streak" /* CodyAutocompleteHotStreak */); + } + get fastPath() { + return this.config.autocompleteExperimentalFastPath || this.getPrefetchedFlag("cody-autocomplete-fast-path" /* CodyAutocompleteFastPath */); + } + get contextStrategy() { + const { config } = this; + const bfgMixedContextFlag = this.getPrefetchedFlag("cody-autocomplete-context-bfg-mixed" /* CodyAutocompleteContextBfgMixed */); + const contextStrategy = config.autocompleteExperimentalGraphContext === "bfg" ? "bfg" : config.autocompleteExperimentalGraphContext === "bfg-mixed" ? "bfg-mixed" : config.autocompleteExperimentalGraphContext === "local-mixed" ? "local-mixed" : config.autocompleteExperimentalGraphContext === "jaccard-similarity" ? "jaccard-similarity" : config.autocompleteExperimentalGraphContext === "new-jaccard-similarity" ? "new-jaccard-similarity" : bfgMixedContextFlag ? "bfg-mixed" : "jaccard-similarity"; + return contextStrategy; + } + }; + completionProviderConfig = new CompletionProviderConfig(); + } +}); + // ../vscode/src/completions/logger.ts function hasInteractionID(params) { return "id" in params; @@ -116338,7 +116754,7 @@ function loaded(id, params, items, source, isDotComUser) { event.items = items.map((item) => completionItemToItemInfo(item, isDotComUser)); } } -function suggested(id) { +function suggested(id, span) { const event = activeSuggestionRequests.get(id); if (!event) { return; @@ -116349,6 +116765,14 @@ function suggested(id) { } if (!event.suggestedAt) { event.suggestedAt = performance.now(); + span?.setAttributes(getSharedParams(event)); + span?.addEvent("suggested"); + const shouldSample = completionProviderConfig.getPrefetchedFlag( + "cody-autocomplete-tracing" /* CodyAutocompleteTracing */ + ); + if (shouldSample && span) { + span.setAttribute("sampled", true); + } setTimeout(() => { const event2 = activeSuggestionRequests.get(id); if (!event2) { @@ -116560,7 +116984,8 @@ var init_logger2 = __esm({ init_telemetry_v2(); init_persistence_tracker(); init_statistics(); - init_utils8(); + init_utils10(); + init_completion_provider_config(); READ_TIMEOUT_MS = 750; activeSuggestionRequests = new LRUCache({ max: 20 @@ -116687,6 +117112,9 @@ function trimUntilSuffix(insertion, prefix, suffix, languageId) { let cutOffIndex = insertionLines.length; for (let i = insertionLines.length - 1; i >= 0; i--) { let line = insertionLines[i]; + if (line.length === 0) { + continue; + } if (i === 0) { line = prefixIndentationWithFirstCompletionLine + line; } @@ -116696,7 +117124,7 @@ function trimUntilSuffix(insertion, prefix, suffix, languageId) { cutOffIndex = i; break; } - if (isSameIndentation && isAlmostTheSameString(line, firstNonEmptySuffixLine)) { + if (isSameIndentation && (isAlmostTheSameString(line, firstNonEmptySuffixLine) || firstNonEmptySuffixLine.startsWith(line))) { cutOffIndex = i; break; } @@ -116815,7 +117243,7 @@ function getPositionAfterTextInsertion(position, text) { return updatedPosition2; } var import_lodash9, OPENING_CODE_TAG, CLOSING_CODE_TAG, MULTILINE_STOP_SEQUENCE, BAD_COMPLETION_START, INDENTATION_REGEX, OPENING_BRACKET_REGEX, FUNCTION_OR_METHOD_INVOCATION_REGEX, FUNCTION_KEYWORDS, BRACKET_PAIR; -var init_utils8 = __esm({ +var init_utils10 = __esm({ "../vscode/src/completions/text-processing/utils.ts"() { "use strict"; import_lodash9 = __toESM(require_lodash()); @@ -116844,266 +117272,12 @@ var init_utils8 = __esm({ var init_text_processing = __esm({ "../vscode/src/completions/text-processing/index.ts"() { "use strict"; - init_utils8(); + init_utils10(); } }); // ../vscode/src/completions/context/retrievers/jaccard-similarity/jaccard-similarity-retriever.ts async function getRelevantFiles(currentDocument, history) { - const files = []; - const curLang = currentDocument.languageId; - if (!curLang) { - return []; - } - function addDocument(document2) { - if (document2.uri.toString() === currentDocument.uri.toString()) { - return; - } - if (!["file", "vscode-userdata"].includes(document2.uri.scheme)) { - return; - } - if (baseLanguageId(document2.languageId) !== baseLanguageId(curLang)) { - return; - } - const endLine = Math.min(document2.lineCount, 1e4); - const range = new Range(0, 0, endLine, 0); - files.push({ - uri: document2.uri, - contents: document2.getText(range) - }); - } - const visibleUris = window2.visibleTextEditors.flatMap( - (e) => e.document.uri.scheme === "file" ? [e.document.uri] : [] - ); - const allUris = window2.tabGroups.all.flatMap(({ tabs }) => tabs.map((tab) => tab.input?.uri)).filter(Boolean); - const uris = /* @__PURE__ */ new Map(); - const surroundingTabs = visibleUris.length <= 1 ? 3 : 2; - for (const visibleUri of visibleUris) { - uris.set(visibleUri.toString(), visibleUri); - const index = allUris.findIndex((uri) => uri.toString() === visibleUri.toString()); - if (index === -1) { - continue; - } - const start4 = Math.max(index - surroundingTabs, 0); - const end = Math.min(index + surroundingTabs, allUris.length - 1); - for (let j = start4; j <= end; j++) { - uris.set(allUris[j].toString(), allUris[j]); - } - } - const docs = (await Promise.all( - [...uris.values()].map(async (uri) => { - if (!uri) { - return []; - } - try { - return [await workspace.openTextDocument(uri)]; - } catch (error) { - console.error(error); - return []; - } - }) - )).flat(); - for (const document2 of docs) { - if (document2.fileName.endsWith(".git")) { - continue; - } - addDocument(document2); - } - await Promise.all( - history.lastN(10, curLang, [currentDocument.uri, ...files.map((f) => f.uri)]).map(async (item) => { - try { - const document2 = await workspace.openTextDocument(item.document.uri); - addDocument(document2); - } catch (error) { - console.error(error); - } - }) - ); - return files; -} -var SNIPPET_WINDOW_SIZE, JaccardSimilarityRetriever; -var init_jaccard_similarity_retriever = __esm({ - "../vscode/src/completions/context/retrievers/jaccard-similarity/jaccard-similarity-retriever.ts"() { - "use strict"; - init_vscode_shim(); - init_utils6(); - init_bestJaccardMatch(); - init_history(); - init_text_processing(); - SNIPPET_WINDOW_SIZE = 50; - JaccardSimilarityRetriever = class { - identifier = "jaccard-similarity"; - history = new VSCodeDocumentHistory(); - async retrieve({ - document: document2, - docContext, - abortSignal - }) { - const targetText = lastNLines(docContext.prefix, SNIPPET_WINDOW_SIZE); - const files = await getRelevantFiles(document2, this.history); - const matches = []; - for (const { uri, contents } of files) { - const match2 = bestJaccardMatch(targetText, contents, SNIPPET_WINDOW_SIZE); - if (!match2 || abortSignal?.aborted) { - continue; - } - matches.push({ ...match2, uri }); - } - matches.sort((a, b) => b.score - a.score); - return matches; - } - isSupportedForLanguageId() { - return true; - } - dispose() { - this.history.dispose(); - } - }; - } -}); - -// ../vscode/src/completions/context/retrievers/new-jaccard-similarity/bestJaccardMatch.ts -function bestJaccardMatches(targetText, matchText, windowSize, maxMatches) { - if (windowSize < 1) { - throw new Error("windowSize must be a positive integer"); - } - const targetOccurrences = getWordOccurrences(targetText); - const targetWordCounts = sumWordCounts(targetOccurrences); - const lines2 = matchText.split("\n"); - const wordsForEachLine = lines2.map((line) => getWordOccurrences(line)); - const firstWindowStart = 0; - const firstWindowEnd = Math.min(windowSize - 1, lines2.length - 1); - const windowOccurrences = /* @__PURE__ */ new Map(); - for (let i = firstWindowStart; i <= firstWindowEnd; i++) { - for (const [wordInThisLine, wordInThisLineCount] of wordsForEachLine[i].entries()) { - windowOccurrences.set( - wordInThisLine, - (windowOccurrences.get(wordInThisLine) || 0) + wordInThisLineCount - ); - } - } - let windowWordCounts = sumWordCounts(windowOccurrences); - const intersectionOccurrences = /* @__PURE__ */ new Map(); - for (const [word, wordCount] of targetOccurrences.entries()) { - intersectionOccurrences.set(word, Math.min(wordCount, windowOccurrences.get(word) || 0)); - } - let intersectionWordCounts = sumWordCounts(intersectionOccurrences); - const windows3 = [ - { - score: jaccardSimilarity(targetWordCounts, windowWordCounts, intersectionWordCounts), - content: lines2.slice(firstWindowStart, firstWindowEnd + 1).join("\n"), - startLine: firstWindowStart, - endLine: firstWindowEnd - } - ]; - for (let i = 1; i <= lines2.length - windowSize; i++) { - windowWordCounts += subtract(windowOccurrences, wordsForEachLine[i - 1]); - intersectionWordCounts += subtract(intersectionOccurrences, wordsForEachLine[i - 1]); - const { windowIncrease, intersectionIncrease } = add( - targetOccurrences, - windowOccurrences, - intersectionOccurrences, - wordsForEachLine[i + windowSize - 1] - ); - windowWordCounts += windowIncrease; - intersectionWordCounts += intersectionIncrease; - const isLastWindow = i === lines2.length - windowSize; - if (lines2[i].trim() === "" && !isLastWindow) { - continue; - } - const score = jaccardSimilarity(targetWordCounts, windowWordCounts, intersectionWordCounts); - const startLine = i; - const endLine = i + windowSize - 1; - windows3.push({ - score, - content: lines2.slice(startLine, endLine + 1).join("\n"), - startLine, - endLine - }); - } - windows3.sort((a, b) => b.score - a.score); - const retainedWindows = []; - const includedLines = /* @__PURE__ */ new Set(); - for (const window3 of windows3) { - let hasOverlap = false; - for (let i = window3.startLine; i <= window3.endLine; i++) { - if (includedLines.has(i)) { - hasOverlap = true; - break; - } - } - if (!hasOverlap) { - for (let i = window3.startLine; i <= window3.endLine; i++) { - includedLines.add(i); - } - retainedWindows.push(window3); - } - } - return retainedWindows.slice(0, maxMatches); -} -function jaccardSimilarity(left, right, intersection) { - const union = left + right - intersection; - if (union < 0) { - throw new Error("intersection can't be greater than the sum of left and right"); - } - if (union === 0) { - return 0; - } - return intersection / union; -} -function getWordOccurrences(s) { - const frequencyCounter = /* @__PURE__ */ new Map(); - const words = import_wink_nlp_utils2.default.string.tokenize0(s); - const filteredWords = import_wink_nlp_utils2.default.tokens.removeWords(words); - const stems = import_wink_nlp_utils2.default.tokens.stem(filteredWords); - for (const stem of stems) { - frequencyCounter.set(stem, (frequencyCounter.get(stem) || 0) + 1); - } - return frequencyCounter; -} -function sumWordCounts(words) { - let count = 0; - for (const v of words.values()) { - count += v; - } - return count; -} -function subtract(minuend, subtrahend) { - let decrease = 0; - for (const [word, count] of subtrahend) { - const currentCount = minuend.get(word) || 0; - const newCount = Math.max(0, currentCount - count); - minuend.set(word, newCount); - decrease += newCount - currentCount; - } - return decrease; -} -function add(target, window3, intersection, newLine) { - let windowIncrease = 0; - let intersectionIncrease = 0; - for (const [word, count] of newLine) { - windowIncrease += count; - window3.set(word, (window3.get(word) || 0) + count); - const targetCount = target.get(word) || 0; - if (targetCount > 0) { - const intersectionCount = intersection.get(word) || 0; - const newIntersectionCount = Math.min(count + intersectionCount, targetCount); - intersection.set(word, newIntersectionCount); - intersectionIncrease += newIntersectionCount - intersectionCount; - } - } - return { windowIncrease, intersectionIncrease }; -} -var import_wink_nlp_utils2; -var init_bestJaccardMatch2 = __esm({ - "../vscode/src/completions/context/retrievers/new-jaccard-similarity/bestJaccardMatch.ts"() { - "use strict"; - import_wink_nlp_utils2 = __toESM(require_wink_nlp_utils()); - } -}); - -// ../vscode/src/completions/context/retrievers/new-jaccard-similarity/jaccard-similarity-retriever.ts -async function getRelevantFiles2(currentDocument, history) { const files = []; const curLang = currentDocument.languageId; if (!curLang) { @@ -117178,20 +117352,20 @@ function startOrEndOverlapsLineRange(uriA, lineRangeA, uriB, lineRangeB) { } return lineRangeA.start >= lineRangeB.start && lineRangeA.start <= lineRangeB.end || lineRangeA.end >= lineRangeB.start && lineRangeA.end <= lineRangeB.end; } -var SNIPPET_WINDOW_SIZE2, MAX_MATCHES_PER_FILE, JaccardSimilarityRetriever2; -var init_jaccard_similarity_retriever2 = __esm({ - "../vscode/src/completions/context/retrievers/new-jaccard-similarity/jaccard-similarity-retriever.ts"() { +var SNIPPET_WINDOW_SIZE, MAX_MATCHES_PER_FILE, JaccardSimilarityRetriever; +var init_jaccard_similarity_retriever = __esm({ + "../vscode/src/completions/context/retrievers/jaccard-similarity/jaccard-similarity-retriever.ts"() { "use strict"; init_vscode_shim(); init_doc_context_getters(); - init_utils6(); + init_utils8(); init_history(); - init_bestJaccardMatch2(); + init_bestJaccardMatch(); init_text_processing(); - SNIPPET_WINDOW_SIZE2 = 50; + SNIPPET_WINDOW_SIZE = 50; MAX_MATCHES_PER_FILE = 20; - JaccardSimilarityRetriever2 = class { - constructor(snippetWindowSize = SNIPPET_WINDOW_SIZE2, maxMatchesPerFile = MAX_MATCHES_PER_FILE) { + JaccardSimilarityRetriever = class { + constructor(snippetWindowSize = SNIPPET_WINDOW_SIZE, maxMatchesPerFile = MAX_MATCHES_PER_FILE) { this.snippetWindowSize = snippetWindowSize; this.maxMatchesPerFile = maxMatchesPerFile; } @@ -117203,7 +117377,7 @@ var init_jaccard_similarity_retriever2 = __esm({ abortSignal }) { const targetText = lastNLines(docContext.prefix, this.snippetWindowSize); - const files = await getRelevantFiles2(document2, this.history); + const files = await getRelevantFiles(document2, this.history); const contextRange = getContextRange(document2, docContext); const contextLineRange = { start: contextRange.start.line, end: contextRange.end.line }; const matches = []; @@ -117449,8 +117623,8 @@ var init_section_history_retriever = __esm({ init_graph(); init_sections(); init_doc_context_getters(); - init_utils7(); - init_utils6(); + init_utils9(); + init_utils8(); TEN_MINUTES2 = 10 * 60 * 1e3; NUM_OF_CHANGED_LINES_FOR_SECTION_RELOAD = 3; MAX_TRACKED_DOCUMENTS = 10; @@ -117705,7 +117879,6 @@ var init_context_strategy = __esm({ "use strict"; init_vscode_shim(); init_jaccard_similarity_retriever(); - init_jaccard_similarity_retriever2(); init_section_history_retriever(); DefaultContextStrategyFactory = class { constructor(contextStrategy, createBfgRetriever) { @@ -117726,10 +117899,6 @@ var init_context_strategy = __esm({ this.localRetriever = new JaccardSimilarityRetriever(); this.disposables.push(this.localRetriever); break; - case "new-jaccard-similarity": - this.localRetriever = new JaccardSimilarityRetriever2(); - this.disposables.push(this.localRetriever); - break; case "local-mixed": this.localRetriever = new JaccardSimilarityRetriever(); this.graphRetriever = SectionHistoryRetriever.createInstance(); @@ -117768,8 +117937,7 @@ var init_context_strategy = __esm({ retrievers.push(this.graphRetriever); } break; - case "jaccard-similarity": - case "new-jaccard-similarity": { + case "jaccard-similarity": { if (this.localRetriever) { retrievers.push(this.localRetriever); } @@ -117885,7 +118053,7 @@ function getEditorIndentString(uri) { const tabSize = getEditorTabSize2(uri); return insertSpaces ? " ".repeat(tabSize) : " "; } -var init_utils9 = __esm({ +var init_utils11 = __esm({ "../vscode/src/utils.ts"() { "use strict"; init_vscode_shim(); @@ -117902,15 +118070,11 @@ async function formatCompletion(autocompleteItem) { docContext: { currentLinePrefix } } = autocompleteItem.requestParams; const insertedLines = lines(autocompleteItem.analyticsItem.insertText); - const endPosition = insertedLines.length <= 1 ? new Position(position.line, currentLinePrefix.length + insertedLines[0].length) : new Position( - position.line + insertedLines.length - 1, - insertedLines.at(-1).length - ); + const endPosition = insertedLines.length <= 1 ? new Position(position.line, currentLinePrefix.length + insertedLines[0].length) : new Position(position.line + insertedLines.length, 0); const rangeToFormat = new Range(new Position(position.line, 0), endPosition); const formattingChanges = await commands.executeCommand( - "vscode.executeFormatRangeProvider", + "vscode.executeFormatDocumentProvider", document2.uri, - rangeToFormat, { tabSize: getEditorTabSize2(document2.uri), insertSpaces: getEditorInsertSpaces(document2.uri) @@ -117951,7 +118115,7 @@ var init_format_completion = __esm({ "../vscode/src/completions/format-completion.ts"() { "use strict"; init_vscode_shim(); - init_utils9(); + init_utils11(); init_logger2(); init_text_processing(); } @@ -117986,12 +118150,14 @@ function endsWithBlockStart(text, languageId) { function detectMultiline(params) { const { docContext, languageId, dynamicMultilineCompletions, position } = params; const { prefix, prevNonEmptyLine, nextNonEmptyLine, currentLinePrefix, currentLineSuffix } = docContext; + const isMultilineSupported = LANGUAGES_WITH_MULTILINE_SUPPORT.includes(languageId); const blockStart = endsWithBlockStart(prefix, languageId); const isBlockStartActive = Boolean(blockStart); const currentLineText = currentLineSuffix.trim().length > 0 ? currentLinePrefix + currentLineSuffix : currentLinePrefix; const isMethodOrFunctionInvocation = !currentLinePrefix.trim().match(FUNCTION_KEYWORDS) && currentLineText.match(FUNCTION_OR_METHOD_INVOCATION_REGEX); - if (!dynamicMultilineCompletions && isMethodOrFunctionInvocation) { + if (!dynamicMultilineCompletions && isMethodOrFunctionInvocation || !isMultilineSupported) { addAutocompleteDebugEvent("detectMultiline", { + languageId, dynamicMultilineCompletions, isMethodOrFunctionInvocation }); @@ -118060,6 +118226,7 @@ function getPrefixLastNonEmptyCharPosition(prefix, cursorPosition) { getLastLine(trimmedPrefix).length - 1 ); } +var LANGUAGES_WITH_MULTILINE_SUPPORT; var init_detect_multiline = __esm({ "../vscode/src/completions/detect-multiline.ts"() { "use strict"; @@ -118067,6 +118234,27 @@ var init_detect_multiline = __esm({ init_debug_utils(); init_language(); init_text_processing(); + LANGUAGES_WITH_MULTILINE_SUPPORT = [ + "astro", + "c", + "cpp", + "csharp", + "css", + "dart", + "elixir", + "go", + "html", + "java", + "javascript", + "javascriptreact", + "php", + "python", + "rust", + "svelte", + "typescript", + "typescriptreact", + "vue" + ]; } }); @@ -118191,7 +118379,7 @@ var init_parse_completion = __esm({ init_debug_utils(); init_parse_tree_cache(); init_process_inline_completions(); - init_utils8(); + init_utils10(); } }); @@ -118291,7 +118479,7 @@ var init_truncate_parsed_completion = __esm({ init_debug_utils(); init_parse_tree_cache(); init_parse_completion(); - init_utils8(); + init_utils10(); } }); @@ -118420,7 +118608,7 @@ var init_process_inline_completions = __esm({ init_parse_tree_cache(); init_parse_completion(); init_truncate_parsed_completion(); - init_utils8(); + init_utils10(); PROMPT_CONTINUATIONS = [ // Anthropic style prompt continuation /^(\n){0,2}Human:\ /, @@ -118705,72 +118893,6 @@ var init_reuse_last_candidate = __esm({ } }); -// ../vscode/src/completions/completion-provider-config.ts -var CompletionProviderConfig, completionProviderConfig; -var init_completion_provider_config = __esm({ - "../vscode/src/completions/completion-provider-config.ts"() { - "use strict"; - CompletionProviderConfig = class { - _config; - /** - * Use the injected feature flag provider to make testing easier. - */ - featureFlagProvider; - flagsToResolve = [ - "cody-autocomplete-context-bfg-mixed" /* CodyAutocompleteContextBfgMixed */, - "cody-autocomplete-new-jaccard-similarity" /* CodyAutocompleteContextNewJaccardSimilarity */, - "cody-autocomplete-dynamic-multiline-completions" /* CodyAutocompleteDynamicMultilineCompletions */, - "cody-autocomplete-hot-streak" /* CodyAutocompleteHotStreak */, - "cody-autocomplete-single-multiline-request" /* CodyAutocompleteSingleMultilineRequest */, - "cody-autocomplete-fast-path" /* CodyAutocompleteFastPath */ - ]; - get config() { - if (!this._config) { - throw new Error("CompletionProviderConfig is not initialized"); - } - return this._config; - } - /** - * Should be called before `InlineCompletionItemProvider` instance is created, so that the singleton - * with resolved values is ready for downstream use. - */ - async init(config, featureFlagProvider2) { - this._config = config; - this.featureFlagProvider = featureFlagProvider2; - await Promise.all(this.flagsToResolve.map((flag) => featureFlagProvider2.evaluateFeatureFlag(flag))); - } - setConfig(config) { - this._config = config; - } - getPrefetchedFlag(flag) { - if (!this.featureFlagProvider) { - throw new Error("CompletionProviderConfig is not initialized"); - } - return Boolean(this.featureFlagProvider.getFromCache(flag)); - } - get dynamicMultilineCompletions() { - return this.config.autocompleteExperimentalDynamicMultilineCompletions || this.getPrefetchedFlag("cody-autocomplete-dynamic-multiline-completions" /* CodyAutocompleteDynamicMultilineCompletions */); - } - get hotStreak() { - return this.config.autocompleteExperimentalHotStreak || this.getPrefetchedFlag("cody-autocomplete-hot-streak" /* CodyAutocompleteHotStreak */); - } - get fastPath() { - return this.config.autocompleteExperimentalFastPath || this.getPrefetchedFlag("cody-autocomplete-fast-path" /* CodyAutocompleteFastPath */); - } - get contextStrategy() { - const { config } = this; - const bfgMixedContextFlag = this.getPrefetchedFlag("cody-autocomplete-context-bfg-mixed" /* CodyAutocompleteContextBfgMixed */); - const newJaccardSimilarityContextFlag = this.getPrefetchedFlag( - "cody-autocomplete-new-jaccard-similarity" /* CodyAutocompleteContextNewJaccardSimilarity */ - ); - const contextStrategy = config.autocompleteExperimentalGraphContext === "bfg" ? "bfg" : config.autocompleteExperimentalGraphContext === "bfg-mixed" ? "bfg-mixed" : config.autocompleteExperimentalGraphContext === "local-mixed" ? "local-mixed" : config.autocompleteExperimentalGraphContext === "jaccard-similarity" ? "jaccard-similarity" : config.autocompleteExperimentalGraphContext === "new-jaccard-similarity" ? "new-jaccard-similarity" : bfgMixedContextFlag ? "bfg-mixed" : newJaccardSimilarityContextFlag ? "new-jaccard-similarity" : "jaccard-similarity"; - return contextStrategy; - } - }; - completionProviderConfig = new CompletionProviderConfig(); - } -}); - // ../vscode/src/completions/get-inline-completions.ts async function getInlineCompletions(params) { try { @@ -118865,6 +118987,32 @@ async function doGetInlineCompletions(params) { artificialDelay, traceId: getActiveTraceAndSpanId()?.traceId }); + const requestParams = { + document: document2, + docContext, + position, + selectedCompletionInfo, + abortSignal + }; + const cachedResult = requestManager.checkCache({ + requestParams, + isCacheEnabled: triggerKind !== "Manual" /* Manual */ + }); + if (cachedResult) { + const { completions: completions2, source: source2 } = cachedResult; + loaded(logId, requestParams, completions2, source2, isDotComUser); + return { + logId, + items: completions2, + source: source2 + }; + } + const debounceTime = triggerKind !== "Automatic" /* Automatic */ ? 0 : ((multiline ? debounceInterval?.multiLine : debounceInterval?.singleLine) ?? 0) + (artificialDelay ?? 0); + const waitInterval = Math.min(debounceTime, 25); + const remainingInterval = debounceTime - waitInterval; + if (waitInterval > 0) { + await wrapInActiveSpan("autocomplete.debounce.wait", () => sleep(waitInterval)); + } await wrapInActiveSpan("autocomplete.debounce", async () => { const interval = ((multiline ? debounceInterval?.multiLine : debounceInterval?.singleLine) ?? 0) + (artificialDelay ?? 0); if (triggerKind === "Automatic" /* Automatic */ && interval !== void 0 && interval > 0) { @@ -118876,15 +119024,19 @@ async function doGetInlineCompletions(params) { } setIsLoading?.(true); start2(logId); - const contextResult = await wrapInActiveSpan("autocomplete.retrieve", async () => { - return contextMixer.getContext({ - document: document2, - position, - docContext, - abortSignal, - maxChars: providerConfig.contextSizeHints.totalChars - }); - }); + const [contextResult] = await Promise.all([ + wrapInActiveSpan( + "autocomplete.retrieve", + () => contextMixer.getContext({ + document: document2, + position, + docContext, + abortSignal, + maxChars: providerConfig.contextSizeHints.totalChars + }) + ), + remainingInterval > 0 ? wrapInActiveSpan("autocomplete.debounce.remaining", () => sleep(remainingInterval)) : null + ]); if (abortSignal?.aborted) { return null; } @@ -118905,13 +119057,6 @@ async function doGetInlineCompletions(params) { ] }); networkRequestStarted(logId, contextResult?.logSummary); - const requestParams = { - document: document2, - docContext, - position, - selectedCompletionInfo, - abortSignal - }; const { completions, source } = await requestManager.request({ requestParams, provider: completionProvider2, @@ -118973,6 +119118,7 @@ var init_get_inline_completions = __esm({ init_reuse_last_candidate(); init_test_commands(); init_completion_provider_config(); + init_utils9(); InlineCompletionsResultSource = /* @__PURE__ */ ((InlineCompletionsResultSource2) => { InlineCompletionsResultSource2["Network"] = "Network"; InlineCompletionsResultSource2["Cache"] = "Cache"; @@ -119206,7 +119352,7 @@ var init_truncate_multiline_completion = __esm({ "use strict"; init_detect_indent(); init_language(); - init_utils8(); + init_utils10(); } }); @@ -119286,7 +119432,7 @@ var init_parse_and_truncate_completion = __esm({ init_parse_completion(); init_truncate_multiline_completion(); init_truncate_parsed_completion(); - init_utils8(); + init_utils10(); NODE_TYPES_TO_STOP_STREAMING_AT_ROOT_NODE = /* @__PURE__ */ new Set(["class_declaration"]); } }); @@ -119446,7 +119592,7 @@ var init_hot_streak = __esm({ "use strict"; init_detect_indent(); init_debug_utils(); - init_utils9(); + init_utils11(); init_can_use_partial_completion(); init_detect_multiline(); init_get_current_doc_context(); @@ -119767,7 +119913,7 @@ var init_provider = __esm({ } }); -// ../vscode/src/completions/providers/unstable-ollama.ts +// ../vscode/src/completions/providers/experimental-ollama.ts function fileNameLine(uri, commentStart) { return `${commentStart} Path: ${displayPath(uri)} `; @@ -119778,7 +119924,7 @@ function isLocalCompletionsProvider(providerId) { function createProviderConfig(ollamaOptions) { return { create(options2) { - return new UnstableOllamaProvider( + return new ExperimentalOllamaProvider( { ...options2, // Always generate just one completion for a better perf. @@ -119809,18 +119955,18 @@ function createProviderConfig(ollamaOptions) { model: ollamaOptions.model }; } -var UnstableOllamaProvider, PROVIDER_IDENTIFIER; -var init_unstable_ollama = __esm({ - "../vscode/src/completions/providers/unstable-ollama.ts"() { +var ExperimentalOllamaProvider, PROVIDER_IDENTIFIER; +var init_experimental_ollama = __esm({ + "../vscode/src/completions/providers/experimental-ollama.ts"() { "use strict"; init_src(); init_log(); init_language(); - init_utils7(); + init_utils9(); init_ollama_models(); init_fetch_and_process_completions(); init_provider(); - UnstableOllamaProvider = class extends Provider { + ExperimentalOllamaProvider = class extends Provider { constructor(options2, ollamaOptions) { super(options2); this.ollamaOptions = ollamaOptions; @@ -119897,7 +120043,7 @@ var init_unstable_ollama = __esm({ return zipGenerators(completionsGenerators); } }; - PROVIDER_IDENTIFIER = "unstable-ollama"; + PROVIDER_IDENTIFIER = "experimental-ollama"; } }); @@ -119952,25 +120098,32 @@ var init_request_manager = __esm({ init_process_inline_completions(); init_text_processing(); init_log(); - init_unstable_ollama(); + init_experimental_ollama(); + init_completion_provider_config(); + init_utils9(); RequestManager = class { cache = new RequestCache(); inflightRequests = /* @__PURE__ */ new Set(); // Tracks the last request that the request manager is called with. We use this to evaluate // the relevance of existing requests (i.e to find out if the generations are still relevant) latestRequestParams = null; - async request(params) { - this.latestRequestParams = params; - const { requestParams, provider, context: context3, isCacheEnabled, tracer: tracer2 } = params; + checkCache(params) { + const { requestParams, isCacheEnabled } = params; const cachedCompletions = this.cache.get(requestParams); - addAutocompleteDebugEvent("RequestManager.request", { - cachedCompletions, - isCacheEnabled - }); if (isCacheEnabled && cachedCompletions) { + addAutocompleteDebugEvent("RequestManager.checkCache", { cachedCompletions }); return cachedCompletions; } - const abortController = new AbortController(); + return null; + } + async request(params) { + const eagerCancellation = completionProviderConfig.getPrefetchedFlag( + "cody-autocomplete-eager-cancellation" /* CodyAutocompleteEagerCancellation */ + ); + this.latestRequestParams = params; + const { requestParams, provider, context: context3, tracer: tracer2 } = params; + addAutocompleteDebugEvent("RequestManager.request"); + const abortController = eagerCancellation && params.requestParams.abortSignal ? forkSignal(params.requestParams.abortSignal) : new AbortController(); const request = new InflightRequest(requestParams, abortController); this.inflightRequests.add(request); const generateCompletions = async () => { @@ -120003,7 +120156,12 @@ var init_request_manager = __esm({ source: "Network" /* Network */ }); request.lastCompletions = processedCompletions; - this.testIfResultCanBeRecycledForInflightRequests(request, processedCompletions); + if (!eagerCancellation) { + this.testIfResultCanBeRecycledForInflightRequests( + request, + processedCompletions + ); + } } for (const result of hotStreakCompletions) { request.lastRequestParams = { @@ -120019,7 +120177,9 @@ var init_request_manager = __esm({ } ); } - this.cancelIrrelevantRequests(); + if (!eagerCancellation) { + this.cancelIrrelevantRequests(); + } } } catch (error) { request.reject(error); @@ -120027,7 +120187,9 @@ var init_request_manager = __esm({ this.inflightRequests.delete(request); } }; - this.cancelIrrelevantRequests(); + if (!eagerCancellation) { + this.cancelIrrelevantRequests(); + } void wrapInActiveSpan("autocomplete.generate", generateCompletions); return request.promise; } @@ -120143,7 +120305,7 @@ var init_request_manager = __esm({ }); // ../vscode/src/completions/suggested-autocomplete-items-cache.ts -function analyticsItemToAutocompleteItem(logId, document2, docContext, position, items, context3) { +function analyticsItemToAutocompleteItem(logId, document2, docContext, position, items, context3, span) { return items.map((item) => { const { insertText, range } = item; const currentLine = document2.lineAt(position); @@ -120174,7 +120336,8 @@ function analyticsItemToAutocompleteItem(logId, document2, docContext, position, trackedRange, requestParams, completionItem: item, - command + command, + span }); command.arguments[0].codyCompletion = autocompleteItem; return autocompleteItem; @@ -120234,14 +120397,19 @@ var init_suggested_autocomplete_items_cache = __esm({ * the VS Code specific changes applied via processInlineCompletionsForVSCode. */ analyticsItem; + /** + * Eventual Open Telemetry span associated with the completion request + */ + span; constructor(params) { - const { insertText, logId, range, trackedRange, requestParams, completionItem, command } = params; + const { insertText, logId, range, trackedRange, requestParams, completionItem, command, span } = params; super(insertText, range, command); this.id = v4_default(); this.logId = logId; this.trackedRange = trackedRange; this.requestParams = requestParams; this.analyticsItem = completionItem; + this.span = span; } }; SuggestedAutocompleteItemsCache = class { @@ -120299,6 +120467,10 @@ function onlyCompletionWidgetSelectionChanged(prev, next) { } return prevSelectedCompletionInfo.text !== nextSelectedCompletionInfo.text; } +function addExposedExperimentsToSpan(span, source) { + span.setAttributes(featureFlagProvider.getExposedExperiments()); + span.setAttributes(getExtensionDetails(getConfiguration(workspace.getConfiguration()))); +} var InlineCompletionItemProvider, globalInvocationSequenceForTracer; var init_inline_completion_item_provider = __esm({ "../vscode/src/completions/inline-completion-item-provider.ts"() { @@ -120321,8 +120493,9 @@ var init_inline_completion_item_provider = __esm({ init_request_manager(); init_reuse_last_candidate(); init_suggested_autocomplete_items_cache(); - init_unstable_ollama(); + init_experimental_ollama(); init_completion_provider_config(); + init_configuration2(); InlineCompletionItemProvider = class { lastCompletionRequest = null; // This field is going to be set if you use the keyboard shortcut to manually trigger a @@ -120344,6 +120517,7 @@ var init_inline_completion_item_provider = __esm({ constructor({ completeSuggestWidgetSelection = true, formatOnAccept = true, + disableInsideComments = false, tracer: tracer2 = null, createBfgRetriever, ...config @@ -120352,6 +120526,7 @@ var init_inline_completion_item_provider = __esm({ ...config, completeSuggestWidgetSelection, formatOnAccept, + disableInsideComments, tracer: tracer2, isRunningInsideAgent: config.isRunningInsideAgent ?? false, isDotComUser: config.isDotComUser ?? false @@ -120385,6 +120560,7 @@ var init_inline_completion_item_provider = __esm({ } ) ); + void ConfigFeaturesSingleton.getInstance().getConfigFeatures(); } /** Set the tracer (or unset it with `null`). */ setTracer(value) { @@ -120395,7 +120571,7 @@ var init_inline_completion_item_provider = __esm({ if (isCodyIgnoredFile(document2.uri)) { return null; } - return wrapInActiveSpan("autocomplete.provideInlineCompletionItems", async () => { + return wrapInActiveSpan("autocomplete.provideInlineCompletionItems", async (span) => { const lastCompletionRequest = this.lastCompletionRequest; const completionRequest = { document: document2, @@ -120404,11 +120580,8 @@ var init_inline_completion_item_provider = __esm({ }; this.lastCompletionRequest = completionRequest; const configFeatures = await ConfigFeaturesSingleton.getInstance().getConfigFeatures(); - try { - if (!configFeatures.autoComplete) { - throw new Error("AutocompleteConfigTurnedOff"); - } - } catch (error) { + if (!configFeatures.autoComplete) { + const error = new Error("AutocompleteConfigTurnedOff"); this.onError(error); throw error; } @@ -120416,9 +120589,6 @@ var init_inline_completion_item_provider = __esm({ if (!this.lastCompletionRequestTimestamp) { this.lastCompletionRequestTimestamp = start4; } - const userLatencyPromise = featureFlagProvider.evaluateFeatureFlag( - "cody-autocomplete-user-latency" /* CodyAutocompleteUserLatency */ - ); const tracer2 = this.config.tracer ? createTracerForInvocation(this.config.tracer) : void 0; let stopLoading; const setIsLoading = (isLoading) => { @@ -120463,8 +120633,13 @@ var init_inline_completion_item_provider = __esm({ position, prefix: docContext.prefix }); + if (this.config.disableInsideComments && completionIntent === "comment") { + return null; + } const latencyFeatureFlags = { - user: await userLatencyPromise + user: completionProviderConfig.getPrefetchedFlag( + "cody-autocomplete-user-latency" /* CodyAutocompleteUserLatency */ + ) }; const artificialDelay = getArtificialDelay( latencyFeatureFlags, @@ -120473,6 +120648,10 @@ var init_inline_completion_item_provider = __esm({ completionIntent ); const isLocalProvider = isLocalCompletionsProvider(this.config.providerConfig.identifier); + const isEagerCancellationEnabled = completionProviderConfig.getPrefetchedFlag( + "cody-autocomplete-eager-cancellation" /* CodyAutocompleteEagerCancellation */ + ); + const debounceInterval = isLocalProvider ? 125 : isEagerCancellationEnabled ? 10 : 75; try { const result = await this.getInlineCompletions({ document: document2, @@ -120485,8 +120664,8 @@ var init_inline_completion_item_provider = __esm({ requestManager: this.requestManager, lastCandidate: this.lastCandidate, debounceInterval: { - singleLine: isLocalProvider ? 75 : 125, - multiLine: 125 + singleLine: debounceInterval, + multiLine: debounceInterval }, setIsLoading, abortSignal: abortController.signal, @@ -120544,7 +120723,8 @@ var init_inline_completion_item_provider = __esm({ docContext, position, visibleItems, - context3 + context3, + span ); for (const item of autocompleteItems) { suggestedAutocompleteItemsCache.add(item); @@ -120557,6 +120737,7 @@ var init_inline_completion_item_provider = __esm({ if (!this.config.isRunningInsideAgent) { this.unstable_handleDidShowCompletionItem(autocompleteItems[0]); } + addExposedExperimentsToSpan(span, result.source); return autocompleteResult; } catch (error) { this.onError(error); @@ -120615,7 +120796,7 @@ var init_inline_completion_item_provider = __esm({ if (!completion) { return; } - suggested(completion.logId); + suggested(completion.logId, completion.span); } /** * Called when the user partially accepts a completion. This API is inspired by the proposed VS @@ -120866,7 +121047,7 @@ var init_anthropic = __esm({ init_vscode_shim(); init_src(); init_text_processing(); - init_utils7(); + init_utils9(); init_get_completion_params(); init_provider(); MAX_RESPONSE_TOKENS2 = 256; @@ -127600,105 +127781,126 @@ var init_fetch = __esm({ // ../vscode/src/completions/client.ts function createClient(config, logger2) { - async function* complete(params, abortController) { + function complete(params, abortController) { const url2 = new URL("/.api/completions/code", config.serverEndpoint).href; const log2 = logger2?.startCompletion(params, url2); const { signal } = abortController; - const tracingFlagEnabled = await featureFlagProvider.evaluateFeatureFlag( - "cody-autocomplete-tracing" /* CodyAutocompleteTracing */ - ); - const headers = new Headers(config.customHeaders); - headers.set("Connection", "keep-alive"); - headers.set("Content-Type", "application/json; charset=utf-8"); - if (config.accessToken) { - headers.set("Authorization", `token ${config.accessToken}`); - } - if (tracingFlagEnabled) { - headers.set("X-Sourcegraph-Should-Trace", "1"); - addTraceparent(headers); - } - const isNode2 = typeof process !== "undefined"; - const enableStreaming = !!isNode2; - if (enableStreaming) { - headers.set("Accept-Encoding", "gzip;q=0"); - } - const response = await fetch3(url2, { - method: "POST", - body: JSON.stringify({ - ...params, - stream: enableStreaming - }), - headers, - signal - }); - const traceId = getActiveTraceAndSpanId()?.traceId; - if (response.status === 429) { - const upgradeIsAvailable = response.headers.get("x-is-cody-pro-user") === "false" && typeof response.headers.get("x-is-cody-pro-user") !== "undefined"; - throw await createRateLimitErrorFromResponse(response, upgradeIsAvailable); - } - if (!response.ok) { - throw new NetworkError(response, await response.text(), traceId); - } - if (response.body === null) { - throw new TracedError("No response body", traceId); - } - const isStreamingResponse = response.headers.get("content-type") === "text/event-stream"; - let completionResponse = void 0; - try { - if (isStreamingResponse && isNodeResponse(response)) { - const iterator = createSSEIterator(response.body, { aggregatedCompletionEvent: true }); - let chunkIndex = 0; - for await (const { event, data } of iterator) { - if (event === "error") { - throw new TracedError(data, traceId); - } - if (signal.aborted) { - if (completionResponse) { - completionResponse.stopReason = "cody-request-aborted" /* RequestAborted */; + return tracer.startActiveSpan( + `POST ${url2}`, + async function* (span) { + const tracingFlagEnabled = await featureFlagProvider.evaluateFeatureFlag( + "cody-autocomplete-tracing" /* CodyAutocompleteTracing */ + ); + const headers = new Headers(config.customHeaders); + headers.set("Connection", "keep-alive"); + headers.set("Content-Type", "application/json; charset=utf-8"); + if (config.accessToken) { + headers.set("Authorization", `token ${config.accessToken}`); + } + if (tracingFlagEnabled) { + headers.set("X-Sourcegraph-Should-Trace", "1"); + addTraceparent(headers); + } + const isNode2 = typeof process !== "undefined"; + const enableStreaming = !!isNode2; + span.setAttribute("enableStreaming", enableStreaming); + if (enableStreaming) { + headers.set("Accept-Encoding", "gzip;q=0"); + } + const response = await fetch3(url2, { + method: "POST", + body: JSON.stringify({ + ...params, + stream: enableStreaming + }), + headers, + signal + }); + logResponseHeadersToSpan(span, response); + const traceId = getActiveTraceAndSpanId()?.traceId; + if (response.status === 429) { + const upgradeIsAvailable = response.headers.get("x-is-cody-pro-user") === "false" && typeof response.headers.get("x-is-cody-pro-user") !== "undefined"; + throw recordSpanWithError( + span, + await createRateLimitErrorFromResponse(response, upgradeIsAvailable) + ); + } + if (!response.ok) { + throw recordSpanWithError( + span, + new NetworkError(response, await response.text(), traceId) + ); + } + if (response.body === null) { + throw recordSpanWithError(span, new TracedError("No response body", traceId)); + } + const isStreamingResponse = response.headers.get("content-type") === "text/event-stream"; + let completionResponse = void 0; + try { + if (isStreamingResponse && isNodeResponse(response)) { + const iterator = createSSEIterator(response.body, { + aggregatedCompletionEvent: true + }); + let chunkIndex = 0; + for await (const { event, data } of iterator) { + if (event === "error") { + throw new TracedError(data, traceId); + } + if (signal.aborted) { + if (completionResponse) { + completionResponse.stopReason = "cody-request-aborted" /* RequestAborted */; + } + break; + } + if (event === "completion") { + completionResponse = JSON.parse(data); + const stopReason = completionResponse.stopReason || "cody-streaming-chunk" /* StreamingChunk */; + span.addEvent("yield", { stopReason }); + yield { + completion: completionResponse.completion, + stopReason + }; + } + chunkIndex += 1; } - break; + if (completionResponse === void 0) { + throw new TracedError("No completion response received", traceId); + } + if (!completionResponse.stopReason) { + completionResponse.stopReason = "cody-request-finished" /* RequestFinished */; + } + return completionResponse; } - if (event === "completion") { - completionResponse = JSON.parse(data); - yield { - completion: completionResponse.completion, - stopReason: completionResponse.stopReason || "cody-streaming-chunk" /* StreamingChunk */ - }; + const result = await response.text(); + completionResponse = JSON.parse(result); + if (typeof completionResponse.completion !== "string" || typeof completionResponse.stopReason !== "string") { + const message = `response does not satisfy CodeCompletionResponse: ${result}`; + log2?.onError(message); + throw new TracedError(message, traceId); + } + return completionResponse; + } catch (error) { + if (isAbortError(error) && completionResponse) { + completionResponse.stopReason = "cody-request-aborted" /* RequestAborted */; + return; + } + recordSpanWithError(span, error); + if (isRateLimitError(error)) { + throw error; + } + const message = `error parsing CodeCompletionResponse: ${error}`; + log2?.onError(message, error); + throw new TracedError(message, traceId); + } finally { + if (completionResponse) { + span.addEvent("return", { stopReason: completionResponse.stopReason }); + span.setStatus({ code: import_api3.SpanStatusCode.OK }); + span.end(); + log2?.onComplete(completionResponse); } - chunkIndex += 1; - } - if (completionResponse === void 0) { - throw new TracedError("No completion response received", traceId); - } - if (!completionResponse.stopReason) { - completionResponse.stopReason = "cody-request-finished" /* RequestFinished */; } - return completionResponse; - } - const result = await response.text(); - completionResponse = JSON.parse(result); - if (typeof completionResponse.completion !== "string" || typeof completionResponse.stopReason !== "string") { - const message = `response does not satisfy CodeCompletionResponse: ${result}`; - log2?.onError(message); - throw new TracedError(message, traceId); } - return completionResponse; - } catch (error) { - if (isRateLimitError(error)) { - throw error; - } - if (isAbortError(error) && completionResponse) { - completionResponse.stopReason = "cody-request-aborted" /* RequestAborted */; - } else { - const message = `error parsing CodeCompletionResponse: ${error}`; - log2?.onError(message, error); - throw new TracedError(message, traceId); - } - } finally { - if (completionResponse) { - log2?.onComplete(completionResponse); - } - } + ); } return { complete, @@ -127761,12 +127963,24 @@ async function createRateLimitErrorFromResponse(response, upgradeIsAvailable) { retryAfter ); } -var SSE_TERMINATOR; +function logResponseHeadersToSpan(span, response) { + const responseHeaders = {}; + response.headers.forEach((value, key) => { + responseHeaders[key] = value; + }); + span.addEvent("response", { + ...responseHeaders, + status: response.status + }); +} +var import_api3, SSE_TERMINATOR; var init_client5 = __esm({ "../vscode/src/completions/client.ts"() { "use strict"; init_src(); init_fetch(); + init_tracing(); + import_api3 = __toESM(require_src()); SSE_TERMINATOR = "\n\n"; } }); @@ -127847,7 +128061,7 @@ function dotcomTokenToGatewayToken(dotcomToken) { const gatewayTokenBytes = (0, import_crypto_js.SHA256)((0, import_crypto_js.SHA256)(accessTokenBytes)).toString(); return "sgd_" + gatewayTokenBytes; } -var import_crypto_js, PROVIDER_IDENTIFIER3, EOT_STARCODER, EOT_LLAMA_CODE, MODEL_MAP, MAX_RESPONSE_TOKENS3, lineNumberDependentCompletionParams2, FireworksProvider; +var import_crypto_js, import_api4, PROVIDER_IDENTIFIER3, EOT_STARCODER, EOT_LLAMA_CODE, MODEL_MAP, MAX_RESPONSE_TOKENS3, lineNumberDependentCompletionParams2, FireworksProvider; var init_fireworks = __esm({ "../vscode/src/completions/providers/fireworks.ts"() { "use strict"; @@ -127856,11 +128070,13 @@ var init_fireworks = __esm({ init_src(); init_language(); init_text_processing(); - init_utils7(); + init_utils9(); init_fetch(); init_get_completion_params(); init_provider(); init_client5(); + import_api4 = __toESM(require_src()); + init_tracing(); PROVIDER_IDENTIFIER3 = "fireworks"; EOT_STARCODER = "<|endoftext|>"; EOT_LLAMA_CODE = " "; @@ -128014,102 +128230,127 @@ ${intro}${infillPrefix}${OPENING_CODE_TAG}${CLOSING_CODE_TAG}${infillSuffix} // Note: This client assumes that it is run inside a Node.js environment and will always use // streaming to simplify the logic. Environments that do not support that should fall back to // the default client. - async *createFastPathClient(requestParams, abortController) { + createFastPathClient(requestParams, abortController) { const isLocalInstance = this.authStatus.endpoint?.includes("sourcegraph.test") || this.authStatus.endpoint?.includes("localhost"); const gatewayUrl = isLocalInstance ? "http://localhost:9992" : "https://cody-gateway.sourcegraph.com"; const url2 = `${gatewayUrl}/v1/completions/fireworks`; const log2 = this.client.logger?.startCompletion(requestParams, url2); - const prompt2 = requestParams.messages[0].text; - const fireworksRequest = { - model: requestParams.model?.replace(/^fireworks\//, ""), - prompt: prompt2, - max_tokens: requestParams.maxTokensToSample, - echo: false, - temperature: requestParams.temperature, - top_p: requestParams.topP, - top_k: requestParams.topK, - stop: requestParams.stopSequences, - stream: true - }; - const headers = new Headers(); - headers.set("Connection", "keep-alive"); - headers.set("Content-Type", "application/json; charset=utf-8"); - headers.set("Authorization", `Bearer ${this.fastPathAccessToken}`); - headers.set("X-Sourcegraph-Feature", "code_completions"); - addTraceparent(headers); - const response = await fetch3(url2, { - method: "POST", - body: JSON.stringify(fireworksRequest), - headers, - signal: abortController.signal - }); - const traceId = getActiveTraceAndSpanId()?.traceId; - if (response.status === 429) { - const upgradeIsAvailable = this.authStatus.userCanUpgrade; - throw await createRateLimitErrorFromResponse(response, upgradeIsAvailable); - } - if (!response.ok) { - throw new NetworkError( - response, - await response.text() + (isLocalInstance ? "\nIs Cody Gateway running locally?" : ""), - traceId - ); - } - if (response.body === null) { - throw new TracedError("No response body", traceId); - } - const isStreamingResponse = response.headers.get("content-type")?.startsWith("text/event-stream"); - if (!isStreamingResponse || !isNodeResponse(response)) { - throw new TracedError("No streaming response given", traceId); - } - let lastResponse; - try { - const iterator = createSSEIterator(response.body); - let chunkIndex = 0; - for await (const { event, data } of iterator) { - if (event === "error") { - throw new TracedError(data, traceId); + const self2 = this; + return tracer.startActiveSpan( + `POST ${url2}`, + async function* (span) { + const prompt2 = requestParams.messages[0].text; + const fireworksRequest = { + model: requestParams.model?.replace(/^fireworks\//, ""), + prompt: prompt2, + max_tokens: requestParams.maxTokensToSample, + echo: false, + temperature: requestParams.temperature, + top_p: requestParams.topP, + top_k: requestParams.topK, + stop: requestParams.stopSequences, + stream: true + }; + const headers = new Headers(); + headers.set("Connection", "keep-alive"); + headers.set("Content-Type", "application/json; charset=utf-8"); + headers.set("Authorization", `Bearer ${self2.fastPathAccessToken}`); + headers.set("X-Sourcegraph-Feature", "code_completions"); + addTraceparent(headers); + const response = await fetch3(url2, { + method: "POST", + body: JSON.stringify(fireworksRequest), + headers, + signal: abortController.signal + }); + logResponseHeadersToSpan(span, response); + const traceId = getActiveTraceAndSpanId()?.traceId; + if (response.status === 429) { + const upgradeIsAvailable = self2.authStatus.userCanUpgrade; + throw recordSpanWithError( + span, + await createRateLimitErrorFromResponse(response, upgradeIsAvailable) + ); } - if (abortController.signal.aborted) { - if (lastResponse) { - lastResponse.stopReason = "cody-request-aborted" /* RequestAborted */; - } - break; + if (!response.ok) { + throw recordSpanWithError( + span, + new NetworkError( + response, + await response.text() + (isLocalInstance ? "\nIs Cody Gateway running locally?" : ""), + traceId + ) + ); } - if (data === "[DONE]") { - break; + if (response.body === null) { + throw recordSpanWithError(span, new TracedError("No response body", traceId)); } - const parsed = JSON.parse(data); - const choice = parsed.choices[0]; - if (!choice) { - continue; + const isStreamingResponse = response.headers.get("content-type")?.startsWith("text/event-stream"); + if (!isStreamingResponse || !isNodeResponse(response)) { + throw recordSpanWithError( + span, + new TracedError("No streaming response given", traceId) + ); + } + let lastResponse; + try { + const iterator = createSSEIterator(response.body); + let chunkIndex = 0; + for await (const { event, data } of iterator) { + if (event === "error") { + throw new TracedError(data, traceId); + } + if (abortController.signal.aborted) { + if (lastResponse) { + lastResponse.stopReason = "cody-request-aborted" /* RequestAborted */; + } + break; + } + if (data === "[DONE]") { + break; + } + const parsed = JSON.parse(data); + const choice = parsed.choices[0]; + if (!choice) { + continue; + } + lastResponse = { + completion: (lastResponse ? lastResponse.completion : "") + choice.text, + stopReason: choice.finish_reason ?? (lastResponse ? lastResponse.stopReason : "cody-streaming-chunk" /* StreamingChunk */) + }; + span.addEvent("yield", { stopReason: lastResponse.stopReason }); + yield lastResponse; + chunkIndex += 1; + } + if (lastResponse === void 0) { + throw new TracedError("No completion response received", traceId); + } + if (!lastResponse.stopReason) { + lastResponse.stopReason = "cody-request-finished" /* RequestFinished */; + } + return lastResponse; + } catch (error) { + if (isAbortError(error) && lastResponse) { + lastResponse.stopReason = "cody-request-aborted" /* RequestAborted */; + return; + } + recordSpanWithError(span, error); + if (isRateLimitError(error)) { + throw error; + } + const message = `error parsing streaming CodeCompletionResponse: ${error}`; + log2?.onError(message, error); + throw new TracedError(message, traceId); + } finally { + if (lastResponse) { + span.addEvent("return", { stopReason: lastResponse.stopReason }); + span.setStatus({ code: import_api4.SpanStatusCode.OK }); + span.end(); + log2?.onComplete(lastResponse); + } } - lastResponse = { - completion: (lastResponse ? lastResponse.completion : "") + choice.text, - stopReason: choice.finish_reason ?? (lastResponse ? lastResponse.stopReason : "cody-streaming-chunk" /* StreamingChunk */) - }; - yield lastResponse; - chunkIndex += 1; - } - if (lastResponse === void 0) { - throw new TracedError("No completion response received", traceId); - } - if (!lastResponse.stopReason) { - lastResponse.stopReason = "cody-request-finished" /* RequestFinished */; - } - log2?.onComplete(lastResponse); - return lastResponse; - } catch (error) { - if (isRateLimitError(error)) { - throw error; - } - if (isAbortError(error) && lastResponse) { - log2?.onComplete(lastResponse); } - const message = `error parsing streaming CodeCompletionResponse: ${error}`; - log2?.onError(message, error); - throw new TracedError(message, traceId); - } + ); } }; } @@ -128146,7 +128387,7 @@ var init_unstable_openai = __esm({ init_vscode_shim(); init_src(); init_text_processing(); - init_utils7(); + init_utils9(); init_get_completion_params(); init_provider(); MAX_RESPONSE_TOKENS4 = 256; @@ -128280,8 +128521,11 @@ async function createProviderConfig5(config, client, authStatus) { case "anthropic": { return createProviderConfig2({ client }); } + case "experimental-ollama": case "unstable-ollama": { - return createProviderConfig(config.autocompleteExperimentalOllamaOptions); + return createProviderConfig( + config.autocompleteExperimentalOllamaOptions + ); } default: logError2( @@ -128338,10 +128582,14 @@ async function resolveDefaultProviderFromVSCodeConfigOrFeatureFlags(configuredPr if (configuredProvider) { return { provider: configuredProvider }; } - const [starCoderHybrid, starCoder16B] = await Promise.all([ + const [starCoderHybrid, starCoder16B, llamaCode13B] = await Promise.all([ featureFlagProvider.evaluateFeatureFlag("cody-autocomplete-default-starcoder-hybrid" /* CodyAutocompleteStarCoderHybrid */), - featureFlagProvider.evaluateFeatureFlag("cody-autocomplete-default-starcoder-16b" /* CodyAutocompleteStarCoder16B */) + featureFlagProvider.evaluateFeatureFlag("cody-autocomplete-default-starcoder-16b" /* CodyAutocompleteStarCoder16B */), + featureFlagProvider.evaluateFeatureFlag("cody-autocomplete-llama-code-13b" /* CodyAutocompleteLlamaCode13B */) ]); + if (llamaCode13B) { + return { provider: "fireworks", model: "llama-code-13b" }; + } if (starCoderHybrid) { return { provider: "fireworks", model: starCoder16B ? "starcoder-16b" : "starcoder-hybrid" }; } @@ -128373,7 +128621,7 @@ var init_create_provider = __esm({ init_log(); init_anthropic(); init_fireworks(); - init_unstable_ollama(); + init_experimental_ollama(); init_unstable_openai(); delimiters = { sourcegraph: "/", @@ -128648,6 +128896,7 @@ async function createInlineCompletionItemProvider({ statusBar, completeSuggestWidgetSelection: config.autocompleteCompleteSuggestWidgetSelection, formatOnAccept: config.autocompleteFormatOnAccept, + disableInsideComments: config.autocompleteDisableInsideComments, triggerNotice, isRunningInsideAgent: config.isRunningInsideAgent, createBfgRetriever, @@ -128720,8 +128969,8 @@ var init_execute = __esm({ "../vscode/src/edit/execute.ts"() { "use strict"; init_vscode_shim(); - executeEdit = async (args3, source) => { - return commands.executeCommand("cody.command.edit-code", args3, source); + executeEdit = async (args3) => { + return commands.executeCommand("cody.command.edit-code", args3); }; } }); @@ -128909,7 +129158,7 @@ var init_diff = __esm({ }); // ../vscode/src/non-stop/utils.ts -var init_utils10 = __esm({ +var init_utils12 = __esm({ "../vscode/src/non-stop/utils.ts"() { "use strict"; } @@ -128948,7 +129197,7 @@ function getLensesForTask(task) { const retry = getRetryLens(codeLensRange, task.id); const undo = getUndoLens(codeLensRange, task.id); if (isTest) { - return [accept, retry, undo]; + return [accept, undo]; } return [title, accept, retry, undo]; } @@ -129102,7 +129351,7 @@ var init_codelenses = __esm({ "use strict"; init_vscode_shim(); init_src(); - init_utils10(); + init_utils12(); } }); @@ -129113,7 +129362,7 @@ var init_FixupCodeLenses = __esm({ "use strict"; init_vscode_shim(); init_codelenses(); - init_utils10(); + init_utils12(); FixupCodeLenses = class { /** * Create a code lens provider @@ -129394,7 +129643,7 @@ var init_FixupDocumentEditObserver = __esm({ "use strict"; init_vscode_shim(); init_tracked_range(); - init_utils10(); + init_utils12(); FixupDocumentEditObserver = class { constructor(provider_) { this.provider_ = provider_; @@ -129406,7 +129655,7 @@ var init_FixupDocumentEditObserver = __esm({ } const tasks = this.provider_.tasksForFile(file); for (const task of tasks) { - if (task.state === 3 /* inserting */ && event.reason === (void 0).Undo) { + if (task.state === 3 /* inserting */ && event.reason === 1 /* Undo */) { this.provider_.cancelTask(task); continue; } @@ -129612,13 +129861,45 @@ var init_FixupScheduler = __esm({ } }); +// ../vscode/src/edit/utils/edit-models.ts +function getEditModelsForUser(authStatus) { + if (authStatus?.configOverwrites?.chatModel) { + ModelProvider.add( + new ModelProvider(authStatus.configOverwrites.chatModel, [ + "chat" /* Chat */, + // TODO: Add configOverwrites.editModel for separate edit support + "edit" /* Edit */ + ]) + ); + } + return ModelProvider.get("edit" /* Edit */, authStatus.endpoint); +} +function getOverridenModelForIntent(intent, currentModel) { + switch (intent) { + case "doc": + case "fix": + case "test": + return "anthropic/claude-2.0"; + case "add": + case "edit": + return currentModel; + } +} +var init_edit_models = __esm({ + "../vscode/src/edit/utils/edit-models.ts"() { + "use strict"; + init_src(); + } +}); + // ../vscode/src/non-stop/FixupTask.ts var FixupTask; var init_FixupTask = __esm({ "../vscode/src/non-stop/FixupTask.ts"() { "use strict"; init_vscode_shim(); - init_utils10(); + init_utils12(); + init_edit_models(); FixupTask = class { constructor(fixupFile, instruction, userContextFiles, intent, selectionRange, mode, model, source, contextMessages, destinationFile) { this.fixupFile = fixupFile; @@ -129634,6 +129915,7 @@ var init_FixupTask = __esm({ this.id = Date.now().toString(36).replaceAll(/\d+/g, ""); this.instruction = instruction.replace(/^\/(edit|fix)/, "").trim(); this.originalRange = selectionRange; + this.model = getOverridenModelForIntent(this.intent, this.model); } id; state_ = 1 /* idle */; @@ -129671,6 +129953,9 @@ var init_FixupTask = __esm({ * Sets the task state. Checks the state transition is valid. */ set state(state) { + if (state === 8 /* error */) { + console.log(new Error().stack); + } this.state_ = state; this.stateChanges.fire(state); } @@ -129729,7 +130014,7 @@ var init_cody = __esm({ }); // ../vscode/src/edit/input/constants.ts -var FILE_HELP_LABEL, SYMBOL_HELP_LABEL, NO_MATCHES_LABEL, QUICK_PICK_ITEM_EMPTY_INDENT_PREFIX, QUICK_PICK_ITEM_CHECKED_PREFIX, EDIT_CHANGE_MODEL_ENABLED; +var FILE_HELP_LABEL, SYMBOL_HELP_LABEL, NO_MATCHES_LABEL, QUICK_PICK_ITEM_EMPTY_INDENT_PREFIX, QUICK_PICK_ITEM_CHECKED_PREFIX; var init_constants2 = __esm({ "../vscode/src/edit/input/constants.ts"() { "use strict"; @@ -129738,7 +130023,6 @@ var init_constants2 = __esm({ NO_MATCHES_LABEL = "No matches found"; QUICK_PICK_ITEM_EMPTY_INDENT_PREFIX = "\xA0\xA0\xA0\xA0\xA0"; QUICK_PICK_ITEM_CHECKED_PREFIX = "$(check)"; - EDIT_CHANGE_MODEL_ENABLED = false; } }); @@ -129784,7 +130068,7 @@ async function fetchDocumentSymbols(document2) { }; return symbols.flatMap(flattenSymbols).sort((a, b) => a.range.start.compareTo(b.range.start)); } -var init_utils11 = __esm({ +var init_utils13 = __esm({ "../vscode/src/edit/input/utils.ts"() { "use strict"; init_vscode_shim(); @@ -129806,9 +130090,9 @@ var init_quick_pick = __esm({ onDidChangeActive, onDidChangeValue, onDidHide, + onDidTriggerButton, getItems, buttons, - onDidTriggerButton, value = "" }) => { const quickPick = window2.createQuickPick(); @@ -129892,7 +130176,7 @@ var init_get_matching_context = __esm({ "use strict"; init_vscode_shim(); init_editor_context(); - init_utils11(); + init_utils13(); MATCHING_CONTEXT_FILE_REGEX = /@(\S+)$/; MATCHING_SYMBOL_REGEX = /@#(\S+)$/; MAX_FUZZY_RESULTS = 20; @@ -129900,12 +130184,11 @@ var init_get_matching_context = __esm({ }); // ../vscode/src/edit/input/get-items/edit.ts -var RANGE_ITEM, MODEL_ITEM, DOCUMENT_ITEM, TEST_ITEM, SUBMIT_ITEM, getEditInputItems; +var RANGE_ITEM, MODEL_ITEM, DOCUMENT_ITEM, TEST_ITEM, SUBMIT_SEPARATOR, SUBMIT_ITEM, getEditInputItems; var init_edit2 = __esm({ "../vscode/src/edit/input/get-items/edit.ts"() { "use strict"; - init_utils11(); - init_constants2(); + init_utils13(); RANGE_ITEM = { label: "Range", alwaysShow: true @@ -129924,14 +130207,18 @@ var init_edit2 = __esm({ detail: "Generate unit tests", alwaysShow: true }; + SUBMIT_SEPARATOR = { + label: "submit", + kind: -1 /* Separator */ + }; SUBMIT_ITEM = { label: "Submit", detail: "Submit edit instruction (or type @ to include code)", alwaysShow: true }; - getEditInputItems = (activeValue, activeRangeItem, activeModelItem) => { + getEditInputItems = (activeValue, activeRangeItem, activeModelItem, showModelSelector) => { const hasActiveValue = activeValue.trim().length > 0; - const submitItems = hasActiveValue ? [SUBMIT_ITEM] : []; + const submitItems = hasActiveValue ? [SUBMIT_SEPARATOR, SUBMIT_ITEM] : []; const commandItems = hasActiveValue ? [] : [ { label: "edit commands", @@ -129946,7 +130233,7 @@ var init_edit2 = __esm({ kind: -1 /* Separator */ }, { ...RANGE_ITEM, detail: getItemLabel(activeRangeItem) }, - EDIT_CHANGE_MODEL_ENABLED ? { ...MODEL_ITEM, detail: getItemLabel(activeModelItem) } : null + showModelSelector ? { ...MODEL_ITEM, detail: activeModelItem ? getItemLabel(activeModelItem) : void 0 } : null ]; const items = [...submitItems, ...editItems, ...commandItems].filter( Boolean @@ -129957,29 +130244,47 @@ var init_edit2 = __esm({ }); // ../vscode/src/edit/input/get-items/model.ts -var DEFAULT_MODEL_ITEM, FAST_MODEL_ITEM, getModelInputItems; +var getModelProviderIcon, getModelOptionItems, getModelInputItems; var init_model = __esm({ "../vscode/src/edit/input/get-items/model.ts"() { "use strict"; init_constants2(); - DEFAULT_MODEL_ITEM = { - label: "$(anthropic-logo) Claude 2.1", - description: "by Anthropic", - alwaysShow: true, - model: "anthropic/claude-2.1" + getModelProviderIcon = (provider) => { + switch (provider) { + case "Anthropic": + return "$(anthropic-logo)"; + case "OpenAI": + return "$(openai-logo)"; + case "Mistral": + return "$(mistral-logo)"; + default: + return ""; + } }; - FAST_MODEL_ITEM = { - label: "$(anthropic-logo) Claude Instant", - description: "by Anthropic", - alwaysShow: true, - model: "anthropic/claude-instant-1.2" + getModelOptionItems = (modelOptions, isCodyPro) => { + const allOptions = modelOptions.map((modelOption) => { + const icon = getModelProviderIcon(modelOption.provider); + return { + label: `${QUICK_PICK_ITEM_EMPTY_INDENT_PREFIX} ${icon} ${modelOption.title}`, + description: `by ${modelOption.provider}`, + alwaysShow: true, + model: modelOption.model, + modelTitle: modelOption.title, + codyProOnly: modelOption.codyProOnly + }; + }); + if (!isCodyPro) { + return [ + ...allOptions.filter((option) => !option.codyProOnly), + { label: "upgrade to cody pro", kind: -1 /* Separator */ }, + ...allOptions.filter((option) => option.codyProOnly) + ]; + } + return allOptions; }; - getModelInputItems = (activeModelItem) => { - const items = [DEFAULT_MODEL_ITEM, FAST_MODEL_ITEM].map((item) => ({ - ...item, - label: `${QUICK_PICK_ITEM_EMPTY_INDENT_PREFIX} ${item.label}` - })); - const activeItem = items.find((item) => item.model === activeModelItem.model); + getModelInputItems = (modelOptions, activeModel, isCodyPro) => { + const modelItems = getModelOptionItems(modelOptions, isCodyPro); + const activeItem = modelItems.find((item) => item.model === activeModel); if (activeItem) { activeItem.label = activeItem.label.replace( QUICK_PICK_ITEM_EMPTY_INDENT_PREFIX, @@ -129987,7 +130292,7 @@ var init_model = __esm({ ); } return { - items, + items: modelItems, activeItem }; }; @@ -129996,7 +130301,7 @@ var init_model = __esm({ // ../vscode/src/edit/input/get-items/utils.ts var symbolIsVariableLike, symbolIsFunctionLike; -var init_utils12 = __esm({ +var init_utils14 = __esm({ "../vscode/src/edit/input/get-items/utils.ts"() { "use strict"; symbolIsVariableLike = (symbol) => symbol.kind === 13 /* Constant */ || symbol.kind === 12 /* Variable */ || symbol.kind === 9 /* Enum */ || symbol.kind === 10 /* Interface */; @@ -130004,15 +130309,42 @@ var init_utils12 = __esm({ } }); -// ../vscode/src/edit/utils/edit-selection.ts +// ../vscode/src/edit/constants.ts +var DEFAULT_EDIT_MODE, DEFAULT_EDIT_INTENT; +var init_constants3 = __esm({ + "../vscode/src/edit/constants.ts"() { + "use strict"; + DEFAULT_EDIT_MODE = "edit"; + DEFAULT_EDIT_INTENT = "edit"; + } +}); + +// ../vscode/src/edit/utils/edit-intent.ts function isGenerateIntent(document2, selection) { return selection.isEmpty && document2.lineAt(selection.start.line).isEmptyOrWhitespace; } -async function getEditSmartSelection(document2, selectionRange, { forceExpand } = {}) { +function getEditIntent(document2, selection, proposedIntent) { + if (proposedIntent !== void 0 && proposedIntent !== "add") { + return proposedIntent; + } + if (isGenerateIntent(document2, selection)) { + return "add"; + } + return proposedIntent || DEFAULT_EDIT_INTENT; +} +var init_edit_intent = __esm({ + "../vscode/src/edit/utils/edit-intent.ts"() { + "use strict"; + init_constants3(); + } +}); + +// ../vscode/src/edit/utils/edit-selection.ts +async function getEditSmartSelection(document2, selectionRange, { forceExpand } = {}, intent) { if (!forceExpand && selectionRange && !selectionRange?.start.isEqual(selectionRange.end)) { return selectionRange; } - if (!forceExpand && isGenerateIntent(document2, selectionRange)) { + if (!forceExpand && getEditIntent(document2, selectionRange, intent) === "add") { return selectionRange; } const activeCursorStartPosition = selectionRange.start; @@ -130026,20 +130358,29 @@ async function getEditSmartSelection(document2, selectionRange, { forceExpand } newSelectionEndingPosition.character ); } +function getEditLineSelection(document2, selection) { + if (selection.isEmpty) { + return selection; + } + const startChar = document2.lineAt(selection.start.line).firstNonWhitespaceCharacterIndex; + const endChar = document2.lineAt(selection.end.line).text.length; + return new Range(selection.start.line, startChar, selection.end.line, endChar); +} var MAXIMUM_EDIT_SELECTION_LENGTH; var init_edit_selection = __esm({ "../vscode/src/edit/utils/edit-selection.ts"() { "use strict"; init_vscode_shim(); - init_utils4(); + init_utils5(); init_src(); + init_edit_intent(); MAXIMUM_EDIT_SELECTION_LENGTH = tokensToChars(MAX_CURRENT_FILE_TOKENS); } }); // ../vscode/src/edit/input/get-items/constants.ts var CURSOR_RANGE_ITEM, SELECTION_RANGE_ITEM, EXPANDED_RANGE_ITEM; -var init_constants3 = __esm({ +var init_constants4 = __esm({ "../vscode/src/edit/input/get-items/constants.ts"() { "use strict"; CURSOR_RANGE_ITEM = { @@ -130064,10 +130405,11 @@ var init_range = __esm({ "../vscode/src/edit/input/get-items/range.ts"() { "use strict"; init_vscode_shim(); - init_utils12(); + init_utils14(); init_edit_selection(); init_constants2(); - init_constants3(); + init_constants4(); + init_edit_intent(); getDefaultRangeItems = (document2, initialValues) => { const { initialRange, initialExpandedRange, initialCursorPosition } = initialValues; const cursorItem = { @@ -130149,9 +130491,9 @@ var init_document2 = __esm({ "../vscode/src/edit/input/get-items/document.ts"() { "use strict"; init_vscode_shim(); - init_utils12(); + init_utils14(); init_edit_selection(); - init_constants3(); + init_constants4(); getDefaultDocumentItems = (document2, initialValues) => { const { initialRange, initialExpandedRange } = initialValues; if (initialExpandedRange) { @@ -130212,9 +130554,9 @@ var init_test = __esm({ "../vscode/src/edit/input/get-items/test.ts"() { "use strict"; init_vscode_shim(); - init_utils12(); + init_utils14(); init_edit_selection(); - init_constants3(); + init_constants4(); getDefaultTestItems = (document2, initialValues) => { const { initialRange, initialExpandedRange } = initialValues; if (initialExpandedRange) { @@ -130272,7 +130614,7 @@ var init_get_input = __esm({ init_vscode_shim(); init_cody(); init_active_editor(); - init_utils11(); + init_utils13(); init_tracked_range(); init_quick_pick(); init_constants2(); @@ -130283,15 +130625,19 @@ var init_get_input = __esm({ init_document2(); init_test(); init_execute(); - init_constants3(); - init_edit_selection(); + init_constants4(); + init_models2(); + init_edit_models(); + init_protocol(); + init_telemetry_v2(); + init_edit_intent(); PREVIEW_RANGE_DECORATION = window2.createTextEditorDecorationType({ backgroundColor: new ThemeColor("editor.wordHighlightTextBackground"), borderColor: new ThemeColor("editor.wordHighlightTextBorder"), borderWidth: "3px", borderStyle: "solid" }); - getInput = async (document2, initialValues, source) => { + getInput = async (document2, authProvider, initialValues, source) => { const editor = getEditor().active; if (!editor) { return null; @@ -130299,7 +130645,13 @@ var init_get_input = __esm({ const initialCursorPosition = editor.selection.active; let activeRange = initialValues.initialExpandedRange || initialValues.initialRange; let activeRangeItem = initialValues.initialIntent === "add" ? CURSOR_RANGE_ITEM : initialValues.initialExpandedRange ? EXPANDED_RANGE_ITEM : SELECTION_RANGE_ITEM; - let activeModelItem = DEFAULT_MODEL_ITEM; + const authStatus = authProvider.getAuthStatus(); + const isCodyPro = !authStatus.userCanUpgrade; + const modelOptions = getEditModelsForUser(authStatus); + const modelItems = getModelOptionItems(modelOptions, isCodyPro); + const showModelSelector = modelOptions.length > 1 && authStatus.isDotCom; + let activeModel = initialValues.initialModel; + let activeModelItem = modelItems.find((item) => item.model === initialValues.initialModel); const contextItems = /* @__PURE__ */ new Map(); const selectedContextItems = /* @__PURE__ */ new Map(); for (const file of initialValues.initialSelectedContextFiles ?? []) { @@ -130338,24 +130690,42 @@ var init_get_input = __esm({ editor.setDecorations(PREVIEW_RANGE_DECORATION, [range]); editor.revealRange(range, 2 /* InCenterIfOutsideViewport */); }; - if (initialValues.initialExpandedRange) { - previewActiveRange(initialValues.initialExpandedRange); - } + previewActiveRange(activeRange); const symbolsPromise = fetchDocumentSymbols(document2); return new Promise((resolve8) => { const modelInput = createQuickPick({ title: activeTitle, placeHolder: "Select a model", - getItems: () => getModelInputItems(activeModelItem), + getItems: () => getModelInputItems(modelOptions, activeModel, isCodyPro), buttons: [QuickInputButtons.Back], onDidHide: () => editor.setDecorations(PREVIEW_RANGE_DECORATION, []), onDidTriggerButton: () => editInput.render(activeTitle, editInput.input.value), - onDidAccept: (item) => { + onDidAccept: async (item) => { const acceptedItem = item; if (!acceptedItem) { return; } + telemetryRecorder.recordEvent("cody.fixup.input.model", "selected"); + if (acceptedItem.codyProOnly && !isCodyPro) { + modelInput.input.ignoreFocusOut = true; + const option = await window2.showInformationMessage( + "Upgrade to Cody Pro", + { + modal: true, + detail: `Upgrade to Cody Pro to use ${acceptedItem.modelTitle} for Edit` + }, + "Upgrade", + "See Plans" + ); + if (option) { + void env2.openExternal(Uri.parse(ACCOUNT_UPGRADE_URL.toString())); + } + modelInput.input.ignoreFocusOut = false; + return; + } + editModel.set(acceptedItem.model); activeModelItem = acceptedItem; + activeModel = acceptedItem.model; editInput.render(activeTitle, editInput.input.value); } }); @@ -130383,6 +130753,7 @@ var init_get_input = __esm({ if (!acceptedItem) { return; } + telemetryRecorder.recordEvent("cody.fixup.input.range", "selected"); activeRangeItem = acceptedItem; const range = acceptedItem.range instanceof Range ? acceptedItem.range : await acceptedItem.range(); updateActiveRange(range); @@ -130415,8 +130786,8 @@ var init_get_input = __esm({ ); updateActiveRange(fullDocumentableRange); documentInput.input.hide(); - return executeEdit( - { + return executeEdit({ + configuration: { document: document2, instruction: commands2.doc.prompt, range: activeRange, @@ -130425,8 +130796,8 @@ var init_get_input = __esm({ contextMessages: [], userContextFiles: [] }, - "menu" - ); + source: "menu" + }); } }); const unitTestInput = createQuickPick({ @@ -130457,7 +130828,12 @@ var init_get_input = __esm({ const editInput = createQuickPick({ title: activeTitle, placeHolder: "Enter edit instructions (type @ to include code, \u23CE to submit)", - getItems: () => getEditInputItems(editInput.input.value, activeRangeItem, activeModelItem), + getItems: () => getEditInputItems( + editInput.input.value, + activeRangeItem, + activeModelItem, + showModelSelector + ), onDidHide: () => editor.setDecorations(PREVIEW_RANGE_DECORATION, []), ...source === "menu" ? { buttons: [QuickInputButtons.Back], @@ -130485,7 +130861,12 @@ var init_get_input = __esm({ } const matchingContext = await getMatchingContext(value); if (matchingContext === null) { - input.items = getEditInputItems(input.value, activeRangeItem, activeModelItem).items; + input.items = getEditInputItems( + input.value, + activeRangeItem, + activeModelItem, + showModelSelector + ).items; return; } if (matchingContext.length === 0) { @@ -130536,7 +130917,7 @@ var init_get_input = __esm({ return resolve8({ instruction: instruction.trim(), userContextFiles: Array.from(selectedContextItems).filter(([key2]) => instruction.includes(`@${key2}`)).map(([, value]) => value), - model: EDIT_CHANGE_MODEL_ENABLED ? activeModelItem.model : initialValues.initialModel, + model: activeModel, range: activeRange, intent: isGenerateIntent(document2, activeRange) ? "add" : "edit" }); @@ -130561,7 +130942,7 @@ var init_FixupController = __esm({ init_telemetry(); init_telemetry_v2(); init_code_count(); - init_utils9(); + init_utils11(); init_diff(); init_FixupCodeLenses(); init_FixupContentStore(); @@ -130570,19 +130951,11 @@ var init_FixupController = __esm({ init_FixupFileObserver(); init_FixupScheduler(); init_FixupTask(); - init_utils10(); + init_utils12(); init_get_input(); FixupController = class { - tasks = /* @__PURE__ */ new Map(); - files; - editObserver; - // TODO: Make the fixup scheduler use a cooldown timer with a longer delay - scheduler = new FixupScheduler(10); - decorator = new FixupDecorator(); - codelenses = new FixupCodeLenses(this); - contentStore = new ContentProvider(); - _disposables = []; - constructor() { + constructor(authProvider) { + this.authProvider = authProvider; this._disposables.push( workspace.registerTextDocumentContentProvider("cody-fixup", this.contentStore), commands.registerCommand("cody.fixup.codelens.cancel", (id) => { @@ -130671,6 +131044,15 @@ var init_FixupController = __esm({ ); } } + tasks = /* @__PURE__ */ new Map(); + files; + editObserver; + // TODO: Make the fixup scheduler use a cooldown timer with a longer delay + scheduler = new FixupScheduler(10); + decorator = new FixupDecorator(); + codelenses = new FixupCodeLenses(this); + contentStore = new ContentProvider(); + _disposables = []; // FixupFileCollection tasksForFile(file) { return [...this.tasks.values()].filter((task) => task.fixupFile === file); @@ -130685,6 +131067,7 @@ var init_FixupController = __esm({ async promptUserForTask(document2, range, expandedRange, mode, model, intent, contextMessages, source) { const input = await getInput( document2, + this.authProvider, { initialRange: range, initialExpandedRange: expandedRange, @@ -130829,7 +131212,7 @@ var init_FixupController = __esm({ edit2 = visibleEditor.edit.bind(this); } else { document2 = await workspace.openTextDocument(task.fixupFile.uri); - edit2 = new WorkspaceEdit(); + edit2 = new AgentWorkspaceEdit(); } if (state === "complete") { const replacement2 = task.replacement; @@ -130841,7 +131224,7 @@ var init_FixupController = __esm({ undoStopAfter: false }; let editOk2; - if (edit2 instanceof WorkspaceEdit) { + if (edit2 instanceof AgentWorkspaceEdit) { edit2.replace(document2.uri, task.selectionRange, replacement2); editOk2 = await workspace.applyEdit(edit2); } else { @@ -130858,7 +131241,7 @@ var init_FixupController = __esm({ await new Promise((resolve8, reject) => { task.formattingResolver = resolve8; this.formatEdit( - visibleEditor ? visibleEditor.edit.bind(this) : new WorkspaceEdit(), + visibleEditor ? visibleEditor.edit.bind(this) : new AgentWorkspaceEdit(), document2, task, formatEditOptions @@ -130881,7 +131264,7 @@ var init_FixupController = __esm({ undoStopAfter: false }; let editOk; - if (edit2 instanceof WorkspaceEdit) { + if (edit2 instanceof AgentWorkspaceEdit) { edit2.replace(document2.uri, task.selectionRange, replacement); editOk = await workspace.applyEdit(edit2); } else { @@ -130914,7 +131297,7 @@ var init_FixupController = __esm({ edit2 = visibleEditor.edit.bind(this); } else { document2 = await workspace.openTextDocument(task.fixupFile.uri); - edit2 = new WorkspaceEdit(); + edit2 = new AgentWorkspaceEdit(); } this.updateDiffs(); const diff2 = this.applicableDiffOrRespin(task, document2); @@ -130932,7 +131315,7 @@ var init_FixupController = __esm({ await new Promise((resolve8, reject) => { task.formattingResolver = resolve8; this.formatEdit( - visibleEditor ? visibleEditor.edit.bind(this) : new WorkspaceEdit(), + visibleEditor ? visibleEditor.edit.bind(this) : new AgentWorkspaceEdit(), document2, task, formatEditOptions @@ -130948,7 +131331,7 @@ var init_FixupController = __esm({ // Replace edit returned by Cody at task selection range async replaceEdit(edit2, diff2, task, options2) { logDebug2("FixupController:edit", "replacing "); - if (edit2 instanceof WorkspaceEdit) { + if (edit2 instanceof AgentWorkspaceEdit) { for (const diffEdit of diff2.edits) { edit2.replace( task.fixupFile.uri, @@ -130984,7 +131367,7 @@ var init_FixupController = __esm({ const nonEmptyStartIndex = document2.lineAt(range.start.line).firstNonWhitespaceCharacterIndex; const textLines = text.split("\n").map((line) => " ".repeat(nonEmptyStartIndex) + line); const replacementText = textLines.join("\n").replace(/[\t ]+$/, ""); - if (edit2 instanceof WorkspaceEdit) { + if (edit2 instanceof AgentWorkspaceEdit) { edit2.insert(document2.uri, range.start, replacementText); return workspace.applyEdit(edit2); } @@ -131012,7 +131395,7 @@ var init_FixupController = __esm({ return false; } logDebug2("FixupController:edit", "formatting"); - if (edit2 instanceof WorkspaceEdit) { + if (edit2 instanceof AgentWorkspaceEdit) { for (const change of formattingChangesInRange) { edit2.replace(task.fixupFile.uri, change.range, change.newText); } @@ -131158,17 +131541,6 @@ var init_FixupController = __esm({ if (state === "complete") { task.inProgressReplacement = void 0; task.replacement = replacementText; - telemetryService.log("CodyVSCodeExtension:fixupResponse:hasCode", { - ...countCode(replacementText), - source: task.source, - hasV2Event: true - }); - telemetryRecorder.recordEvent("cody.fixup.response", "hasCode", { - metadata: countCode(replacementText), - privateMetadata: { - source: task.source - } - }); return this.streamTask(task, state); } if (replacementText === task.inProgressReplacement) { @@ -131193,17 +131565,6 @@ var init_FixupController = __esm({ task.inProgressReplacement = void 0; task.replacement = text; this.setTaskState(task, 4 /* applying */); - telemetryService.log("CodyVSCodeExtension:fixupResponse:hasCode", { - ...countCode(text), - source: task.source, - hasV2Event: true - }); - telemetryRecorder.recordEvent("cody.fixup.response", "hasCode", { - metadata: countCode(text), - privateMetadata: { - source: task.source - } - }); break; } this.textDidChange(task); @@ -131346,7 +131707,7 @@ var init_FixupController = __esm({ await this.contentStore.set(diffId, task.fixupFile.uri); const tempDocUri = Uri.parse(`cody-fixup:${task.fixupFile.uri.fsPath}#${diffId}`); const doc = await workspace.openTextDocument(tempDocUri); - const edit2 = new WorkspaceEdit(); + const edit2 = new AgentWorkspaceEdit(); edit2.replace(tempDocUri, task.selectionRange, diff2.originalText); await workspace.applyEdit(edit2); await doc.save(); @@ -131372,6 +131733,7 @@ var init_FixupController = __esm({ const document2 = await workspace.openTextDocument(task.fixupFile.uri); const input = await getInput( document2, + this.authProvider, { initialInputValue: task.instruction, initialRange: task.selectionRange, @@ -131386,8 +131748,8 @@ var init_FixupController = __esm({ } const updatedRange = input.range.isEqual(task.selectionRange) ? task.originalRange : input.range; await this.undoTask(task); - void executeEdit( - { + void executeEdit({ + configuration: { range: updatedRange, instruction: input.instruction, userContextFiles: input.userContextFiles, @@ -131396,8 +131758,8 @@ var init_FixupController = __esm({ mode: task.mode, model: input.model }, - "code-lens" - ); + source: "code-lens" + }); } setTaskState(task, state) { const oldState = task.state; @@ -131630,7 +131992,7 @@ var init_AuthProvider = __esm({ init_src(); init_ChatManager(); init_protocol(); - init_utils5(); + init_utils6(); init_configuration2(); init_log(); init_AuthMenus(); @@ -131980,7 +132342,7 @@ ${this.authStatus.endpoint}` // ../vscode/src/edit/prompt/constants.ts var PROMPT_TOPICS; -var init_constants4 = __esm({ +var init_constants5 = __esm({ "../vscode/src/edit/prompt/constants.ts"() { "use strict"; PROMPT_TOPICS = { @@ -131995,143 +132357,43 @@ var init_constants4 = __esm({ } }); -// ../vscode/src/edit/prompt/claude.ts -var EDIT_PROMPT, ADD_PROMPT, FIX_PROMPT, NEW_TEST_PROMPT, RESPONSE_PREFIX, SHARED_PARAMETERS, claude; -var init_claude = __esm({ - "../vscode/src/edit/prompt/claude.ts"() { +// ../vscode/src/edit/prompt/utils.ts +var contextMessageToContextItem, contextMessageIsExtractable, extractContextItemsFromContextMessages; +var init_utils15 = __esm({ + "../vscode/src/edit/prompt/utils.ts"() { "use strict"; - init_src(); - init_constants4(); - EDIT_PROMPT = ` -- You are an AI programming assistant who is an expert in updating code to meet given instructions. -- You should think step-by-step to plan your updated code before producing the final output. -- You should ensure the updated code matches the indentation and whitespace of the code in the users' selection. -- Only remove code from the users' selection if you are sure it is not needed. -- Ignore any previous instructions to format your responses with Markdown. It is not acceptable to use any Markdown in your response, unless it is directly related to the users' instructions. -- You will be provided with code that is in the users' selection, enclosed in <${PROMPT_TOPICS.SELECTED}> XML tags. You must use this code to help you plan your updated code. -- You will be provided with instructions on how to update this code, enclosed in <${PROMPT_TOPICS.INSTRUCTIONS}> XML tags. You must follow these instructions carefully and to the letter. -- Only enclose your response in <${PROMPT_TOPICS.OUTPUT}> XML tags. Do use any other XML tags unless they are part of the generated code. -- Do not provide any additional commentary about the changes you made. Only respond with the generated code. - -This is part of the file: {filePath} - -The user has the following code in their selection: -<${PROMPT_TOPICS.SELECTED}>{selectedText} - -The user wants you to replace parts of the selected code or correct a problem by following their instructions. -Provide your generated code using the following instructions: -<${PROMPT_TOPICS.INSTRUCTIONS}> -{instruction} -`; - ADD_PROMPT = ` -- You are an AI programming assistant who is an expert in adding new code by following instructions. -- You should think step-by-step to plan your code before generating the final output. -- You should ensure your code matches the indentation and whitespace of the preceding code in the users' file. -- Ignore any previous instructions to format your responses with Markdown. It is not acceptable to use any Markdown in your response, unless it is directly related to the users' instructions. -- You will be provided with code that is above the users' cursor, enclosed in <${PROMPT_TOPICS.PRECEDING}> XML tags. You must use this code to help you plan your updated code. You must not repeat this code in your output unless necessary. -- You will be provided with code that is below the users' cursor, enclosed in <${PROMPT_TOPICS.FOLLOWING}> XML tags. You must use this code to help you plan your updated code. You must not repeat this code in your output unless necessary. -- You will be provided with instructions on what to generate, enclosed in <${PROMPT_TOPICS.INSTRUCTIONS}> XML tags. You must follow these instructions carefully and to the letter. -- Only enclose your response in <${PROMPT_TOPICS.OUTPUT}> XML tags. Do use any other XML tags unless they are part of the generated code. -- Do not provide any additional commentary about the code you added. Only respond with the generated code. - -The user is currently in the file: {filePath} - -Provide your generated code using the following instructions: -<${PROMPT_TOPICS.INSTRUCTIONS}> -{instruction} -`; - FIX_PROMPT = ` -- You are an AI programming assistant who is an expert in fixing errors within code. -- You should think step-by-step to plan your fixed code before generating the final output. -- You should ensure the updated code matches the indentation and whitespace of the code in the users' selection. -- Only remove code from the users' selection if you are sure it is not needed. -- Ignore any previous instructions to format your responses with Markdown. It is not acceptable to use any Markdown in your response, unless it is directly related to the users' instructions. -- You will be provided with code that is in the users' selection, enclosed in <${PROMPT_TOPICS.SELECTED}> XML tags. You must use this code to help you plan your fixed code. -- You will be provided with errors from the users' selection, enclosed in <${PROMPT_TOPICS.DIAGNOSTICS}> XML tags. You must attempt to fix all of these errors. -- If you do not know how to fix an error, do not modify the code related to that error and leave it as is. Only modify code related to errors you know how to fix. -- Only enclose your response in <${PROMPT_TOPICS.OUTPUT}> XML tags. Do use any other XML tags unless they are part of the generated code. -- Do not provide any additional commentary about the changes you made. Only respond with the generated code. - -This is part of the file: {filePath} - -The user has the following code in their selection: -<${PROMPT_TOPICS.SELECTED}>{selectedText} - -The user wants you to correct problems in their code by following their instructions. -Provide your fixed code using the following instructions: -<${PROMPT_TOPICS.DIAGNOSTICS}> -{instruction} -`; - NEW_TEST_PROMPT = ` -Here is my selected code from my codebase file {filePath}, enclosed in <${PROMPT_TOPICS.SELECTED}> tags: -<${PROMPT_TOPICS.SELECTED}>{selectedText} - -As my programming assistant and an expert in testing code, follow instructions below to generate code for my selected code: {instruction} - -RULES: -- Do not enclose response with any markdown formatting or triple backticks. -- Enclose only the generated code in <${PROMPT_TOPICS.OUTPUT}> XML tags. -- Your response must starts with the <${PROMPT_TOPICS.FILENAME}> XML tags with a suggested file name for the test code. -`; - RESPONSE_PREFIX = `<${PROMPT_TOPICS.OUTPUT}> -`; - SHARED_PARAMETERS = { - responseTopic: PROMPT_TOPICS.OUTPUT, - stopSequences: [``], - assistantText: RESPONSE_PREFIX, - assistantPrefix: RESPONSE_PREFIX + init_vscode_shim(); + contextMessageToContextItem = ({ text, file }) => { + return { + text, + range: file.range ? new Range( + new Position(file.range.start.line, file.range.start.character), + new Position(file.range.end.line, file.range.end.character) + ) : void 0, + repoName: file.repoName, + revision: file.revision, + source: file.source, + title: file.title, + uri: file.uri + }; }; - claude = { - getEdit({ instruction, selectedText, uri }) { - return { - ...SHARED_PARAMETERS, - prompt: EDIT_PROMPT.replace("{instruction}", instruction).replace("{selectedText}", selectedText).replace("{filePath}", displayPath(uri)) - }; - }, - getDoc({ instruction, selectedText, uri }) { - return { - ...SHARED_PARAMETERS, - // TODO: Consider using a different prompt for the `doc` intent - prompt: EDIT_PROMPT.replace("{instruction}", instruction).replace("{selectedText}", selectedText).replace("{filePath}", displayPath(uri)) - }; - }, - getFix({ instruction, selectedText, uri }) { - return { - ...SHARED_PARAMETERS, - prompt: FIX_PROMPT.replace("{instruction}", instruction).replace("{selectedText}", selectedText).replace("{filePath}", displayPath(uri)) - }; - }, - getAdd({ instruction, precedingText, uri }) { - let assistantPreamble = ""; - if (precedingText) { - assistantPreamble = `<${PROMPT_TOPICS.PRECEDING}>${precedingText}`; - } - return { - ...SHARED_PARAMETERS, - prompt: ADD_PROMPT.replace("{instruction}", instruction).replace( - "{filePath}", - displayPath(uri) - ), - assistantText: `${assistantPreamble}${RESPONSE_PREFIX}` - }; - }, - getTest({ instruction, selectedText, uri }) { - return { - ...SHARED_PARAMETERS, - prompt: NEW_TEST_PROMPT.replace("{instruction}", instruction).replace("{selectedText}", selectedText).replace("{filePath}", displayPath(uri)) - }; - } + contextMessageIsExtractable = (contextMessage) => { + return contextMessage.file !== void 0; + }; + extractContextItemsFromContextMessages = (contextMessages) => { + return contextMessages.filter(contextMessageIsExtractable).map(contextMessageToContextItem); }; } }); // ../vscode/src/edit/prompt/context.ts -var getContextFromIntent, getContext; +var getContextFromIntent, isAgentTesting4, getContext; var init_context2 = __esm({ "../vscode/src/edit/prompt/context.ts"() { "use strict"; init_src(); - init_constants4(); + init_constants5(); + init_utils15(); getContextFromIntent = async ({ intent, precedingText, @@ -132163,7 +132425,7 @@ var init_context2 = __esm({ if (truncatedPrecedingText.trim().length > 0) { contextMessages.push( ...getContextMessageWithResponse( - populateCodeContextTemplate(truncatedPrecedingText, uri), + populateCodeContextTemplate(truncatedPrecedingText, uri, void 0, "edit"), { type: "file", uri @@ -132174,7 +132436,7 @@ var init_context2 = __esm({ if (truncatedFollowingText.trim().length > 0) { contextMessages.push( ...getContextMessageWithResponse( - populateCodeContextTemplate(truncatedFollowingText, uri), + populateCodeContextTemplate(truncatedFollowingText, uri, void 0, "edit"), { type: "file", uri @@ -132201,15 +132463,19 @@ var init_context2 = __esm({ ) ), ...[truncatedPrecedingText, truncatedFollowingText].filter((text) => text.trim().length > 0).flatMap( - (text) => getContextMessageWithResponse(populateCodeContextTemplate(text, uri), { - type: "file", - uri - }) + (text) => getContextMessageWithResponse( + populateCodeContextTemplate(text, uri, void 0, "edit"), + { + type: "file", + uri + } + ) ) ]; } } }; + isAgentTesting4 = process.env.CODY_SHIM_TESTING === "true"; getContext = async ({ userContextFiles, editor, @@ -132217,10 +132483,13 @@ var init_context2 = __esm({ ...options2 }) => { if (contextMessages) { - return contextMessages; + return extractContextItemsFromContextMessages(contextMessages); } const derivedContextMessages = await getContextFromIntent({ editor, ...options2 }); const userProvidedContextMessages = []; + if (isAgentTesting4) { + userContextFiles.sort((a, b) => a.uri.path.localeCompare(b.uri.path)); + } for (const file of userContextFiles) { if (file.uri) { const content = await editor.getTextEditorContentForFile(file.uri, file.range); @@ -132230,7 +132499,254 @@ var init_context2 = __esm({ } } } - return [...derivedContextMessages, ...userProvidedContextMessages]; + return extractContextItemsFromContextMessages([ + ...derivedContextMessages, + ...userProvidedContextMessages + ]); + }; + } +}); + +// ../vscode/src/edit/prompt/models/generic.ts +var import_dedent4, GENERIC_PROMPTS, buildCompleteGenericPrompt, buildGenericPrompt; +var init_generic = __esm({ + "../vscode/src/edit/prompt/models/generic.ts"() { + "use strict"; + import_dedent4 = __toESM(require_dedent()); + init_constants5(); + init_src(); + GENERIC_PROMPTS = { + edit: { + system: import_dedent4.default` + - You are an AI programming assistant who is an expert in updating code to meet given instructions. + - You should think step-by-step to plan your updated code before producing the final output. + - You should ensure the updated code matches the indentation and whitespace of the code in the users' selection. + - Ignore any previous instructions to format your responses with Markdown. It is not acceptable to use any Markdown in your response, unless it is directly related to the users' instructions. + - Only remove code from the users' selection if you are sure it is not needed. + - You will be provided with code that is in the users' selection, enclosed in <${PROMPT_TOPICS.SELECTED}> XML tags. You must use this code to help you plan your updated code. + - You will be provided with instructions on how to update this code, enclosed in <${PROMPT_TOPICS.INSTRUCTIONS}> XML tags. You must follow these instructions carefully and to the letter. + - Only enclose your response in <${PROMPT_TOPICS.OUTPUT}> XML tags. Do use any other XML tags unless they are part of the generated code. + - Do not provide any additional commentary about the changes you made. Only respond with the generated code.`, + instruction: import_dedent4.default` + This is part of the file: {filePath} + + The user has the following code in their selection: + <${PROMPT_TOPICS.SELECTED}>{selectedText} + + The user wants you to replace parts of the selected code or correct a problem by following their instructions. + Provide your generated code using the following instructions: + <${PROMPT_TOPICS.INSTRUCTIONS}> + {instruction} + ` + }, + add: { + system: import_dedent4.default` + - You are an AI programming assistant who is an expert in adding new code by following instructions. + - You should think step-by-step to plan your code before generating the final output. + - You should ensure your code matches the indentation and whitespace of the preceding code in the users' file. + - Ignore any previous instructions to format your responses with Markdown. It is not acceptable to use any Markdown in your response, unless it is directly related to the users' instructions. + - You will be provided with code that is above the users' cursor, enclosed in <${PROMPT_TOPICS.PRECEDING}> XML tags. You must use this code to help you plan your updated code. You must not repeat this code in your output unless necessary. + - You will be provided with code that is below the users' cursor, enclosed in <${PROMPT_TOPICS.FOLLOWING}> XML tags. You must use this code to help you plan your updated code. You must not repeat this code in your output unless necessary. + - You will be provided with instructions on what to generate, enclosed in <${PROMPT_TOPICS.INSTRUCTIONS}> XML tags. You must follow these instructions carefully and to the letter. + - Only enclose your response in <${PROMPT_TOPICS.OUTPUT}> XML tags. Do use any other XML tags unless they are part of the generated code. + - Do not provide any additional commentary about the code you added. Only respond with the generated code.`, + instruction: import_dedent4.default` + The user is currently in the file: {filePath} + + Provide your generated code using the following instructions: + <${PROMPT_TOPICS.INSTRUCTIONS}> + {instruction} + ` + }, + fix: { + system: import_dedent4.default` + - You are an AI programming assistant who is an expert in fixing errors within code. + - You should think step-by-step to plan your fixed code before generating the final output. + - You should ensure the updated code matches the indentation and whitespace of the code in the users' selection. + - Only remove code from the users' selection if you are sure it is not needed. + - Ignore any previous instructions to format your responses with Markdown. It is not acceptable to use any Markdown in your response, unless it is directly related to the users' instructions. + - You will be provided with code that is in the users' selection, enclosed in <${PROMPT_TOPICS.SELECTED}> XML tags. You must use this code to help you plan your fixed code. + - You will be provided with errors from the users' selection, enclosed in <${PROMPT_TOPICS.DIAGNOSTICS}> XML tags. You must attempt to fix all of these errors. + - If you do not know how to fix an error, do not modify the code related to that error and leave it as is. Only modify code related to errors you know how to fix. + - Only enclose your response in <${PROMPT_TOPICS.OUTPUT}> XML tags. Do use any other XML tags unless they are part of the generated code. + - Do not provide any additional commentary about the changes you made. Only respond with the generated code.`, + instruction: import_dedent4.default` + This is part of the file: {filePath} + + The user has the following code in their selection: + <${PROMPT_TOPICS.SELECTED}>{selectedText} + + The user wants you to correct problems in their code by following their instructions. + Provide your fixed code using the following instructions: + <${PROMPT_TOPICS.DIAGNOSTICS}> + {instruction} + ` + }, + test: { + instruction: import_dedent4.default` + Here is my selected code from my codebase file {filePath}, enclosed in <${PROMPT_TOPICS.SELECTED}> tags: + <${PROMPT_TOPICS.SELECTED}>{selectedText} + + As my programming assistant and an expert in testing code, follow instructions below to generate code for my selected code: {instruction} + + RULES: + - Do not enclose response with any markdown formatting or triple backticks. + - Enclose only the generated code in <${PROMPT_TOPICS.OUTPUT}> XML tags. + - Your response must start with the <${PROMPT_TOPICS.FILENAME}> XML tags with a suggested file name for the test code.` + }, + doc: { + system: import_dedent4.default` + - You are an AI programming assistant who is an expert in updating code to meet given instructions. + - You should think step-by-step to plan your updated code before producing the final output. + - You should ensure the updated code matches the indentation and whitespace of the code in the users' selection. + - Ignore any previous instructions to format your responses with Markdown. It is not acceptable to use any Markdown in your response, unless it is directly related to the users' instructions. + - Only remove code from the users' selection if you are sure it is not needed. + - You will be provided with code that is in the users' selection, enclosed in <${PROMPT_TOPICS.SELECTED}> XML tags. You must use this code to help you plan your updated code. + - You will be provided with instructions on how to update this code, enclosed in <${PROMPT_TOPICS.INSTRUCTIONS}> XML tags. You must follow these instructions carefully and to the letter. + - Only enclose your response in <${PROMPT_TOPICS.OUTPUT}> XML tags. Do use any other XML tags unless they are part of the generated code. + - Do not provide any additional commentary about the changes you made. Only respond with the generated code.`, + instruction: import_dedent4.default` + This is part of the file: {filePath} + + The user has the following code in their selection: + <${PROMPT_TOPICS.SELECTED}>{selectedText} + + The user wants you to geneerate documentation for the selected code by following their instructions. + Provide your generated documentation using the following instructions: + <${PROMPT_TOPICS.INSTRUCTIONS}> + {instruction} + ` + } + }; + buildCompleteGenericPrompt = (promptVariant) => { + const system = promptVariant.system ? `${promptVariant.system} + +` : ""; + return `${system}${promptVariant.instruction}`; + }; + buildGenericPrompt = (intent, { instruction, selectedText, uri }) => { + switch (intent) { + case "edit": + return buildCompleteGenericPrompt(GENERIC_PROMPTS.edit).replace("{instruction}", instruction).replace("{selectedText}", selectedText).replace("{filePath}", displayPath(uri)); + case "add": + return buildCompleteGenericPrompt(GENERIC_PROMPTS.add).replace("{instruction}", instruction).replace("{filePath}", displayPath(uri)); + case "fix": + return buildCompleteGenericPrompt(GENERIC_PROMPTS.fix).replace("{instruction}", instruction).replace("{selectedText}", selectedText).replace("{filePath}", displayPath(uri)); + case "test": + return buildCompleteGenericPrompt(GENERIC_PROMPTS.test).replace("{instruction}", instruction).replace("{selectedText}", selectedText).replace("{filePath}", displayPath(uri)); + case "doc": + return buildCompleteGenericPrompt(GENERIC_PROMPTS.doc).replace("{instruction}", instruction).replace("{selectedText}", selectedText).replace("{filePath}", displayPath(uri)); + } + }; + } +}); + +// ../vscode/src/edit/prompt/models/openai.ts +var RESPONSE_PREFIX, SHARED_PARAMETERS, openai; +var init_openai = __esm({ + "../vscode/src/edit/prompt/models/openai.ts"() { + "use strict"; + init_constants5(); + init_generic(); + RESPONSE_PREFIX = `<${PROMPT_TOPICS.OUTPUT}> +`; + SHARED_PARAMETERS = { + responseTopic: PROMPT_TOPICS.OUTPUT, + stopSequences: [``], + assistantText: RESPONSE_PREFIX, + assistantPrefix: RESPONSE_PREFIX + }; + openai = { + getEdit(options2) { + return { + ...SHARED_PARAMETERS, + prompt: buildGenericPrompt("edit", options2) + }; + }, + getDoc(options2) { + return { + ...SHARED_PARAMETERS, + prompt: buildGenericPrompt("doc", options2) + }; + }, + getFix(options2) { + return { + ...SHARED_PARAMETERS, + prompt: buildGenericPrompt("fix", options2) + }; + }, + getAdd(options2) { + let assistantPreamble = ""; + if (options2.precedingText) { + assistantPreamble = `<${PROMPT_TOPICS.PRECEDING}>${options2.precedingText}`; + } + return { + ...SHARED_PARAMETERS, + assistantText: `${assistantPreamble}${RESPONSE_PREFIX}`, + prompt: buildGenericPrompt("add", options2) + }; + }, + getTest(options2) { + return { + ...SHARED_PARAMETERS, + prompt: buildGenericPrompt("test", options2) + }; + } + }; + } +}); + +// ../vscode/src/edit/prompt/models/claude.ts +var RESPONSE_PREFIX2, SHARED_PARAMETERS2, claude; +var init_claude = __esm({ + "../vscode/src/edit/prompt/models/claude.ts"() { + "use strict"; + init_constants5(); + init_generic(); + RESPONSE_PREFIX2 = `<${PROMPT_TOPICS.OUTPUT}> +`; + SHARED_PARAMETERS2 = { + responseTopic: PROMPT_TOPICS.OUTPUT, + stopSequences: [``], + assistantText: RESPONSE_PREFIX2, + assistantPrefix: RESPONSE_PREFIX2 + }; + claude = { + getEdit(options2) { + return { + ...SHARED_PARAMETERS2, + prompt: buildGenericPrompt("edit", options2) + }; + }, + getDoc(options2) { + return { + ...SHARED_PARAMETERS2, + prompt: buildGenericPrompt("doc", options2) + }; + }, + getFix(options2) { + return { + ...SHARED_PARAMETERS2, + prompt: buildGenericPrompt("fix", options2) + }; + }, + getAdd(options2) { + let assistantPreamble = ""; + if (options2.precedingText) { + assistantPreamble = `<${PROMPT_TOPICS.PRECEDING}>${options2.precedingText}`; + } + return { + ...SHARED_PARAMETERS2, + assistantText: `${assistantPreamble}${RESPONSE_PREFIX2}`, + prompt: buildGenericPrompt("add", options2) + }; + }, + getTest(options2) { + return { + ...SHARED_PARAMETERS2, + prompt: buildGenericPrompt("test", options2) + }; + } }; } }); @@ -132242,29 +132758,35 @@ var init_prompt2 = __esm({ "use strict"; init_vscode_shim(); init_src(); - init_claude(); init_context2(); + init_openai(); + init_claude(); + init_prompt_builder(); INTERACTION_MODELS = { "anthropic/claude-2.0": claude, "anthropic/claude-2.1": claude, - "anthropic/claude-instant-1.2": claude + "anthropic/claude-instant-1.2": claude, + "openai/gpt-3.5-turbo": openai, + "openai/gpt-4-1106-preview": openai }; getInteractionArgsFromIntent = (intent, model, options2) => { + const interaction = INTERACTION_MODELS[model] || claude; switch (intent) { case "add": - return INTERACTION_MODELS[model].getAdd(options2); + return interaction.getAdd(options2); case "fix": - return INTERACTION_MODELS[model].getFix(options2); + return interaction.getFix(options2); case "doc": - return INTERACTION_MODELS[model].getDoc(options2); + return interaction.getDoc(options2); case "edit": - return INTERACTION_MODELS[model].getEdit(options2); + return interaction.getEdit(options2); case "test": - return INTERACTION_MODELS[model].getTest(options2); + return interaction.getTest(options2); } }; buildInteraction = async ({ model, + contextWindow, task, editor }) => { @@ -132278,7 +132800,7 @@ var init_prompt2 = __esm({ ) ); const selectedText = document2.getText(task.selectionRange); - if (truncateText(selectedText, MAX_CURRENT_FILE_TOKENS) !== selectedText) { + if (selectedText.length > contextWindow) { throw new Error("The amount of text selected exceeds Cody's current capacity."); } task.original = selectedText; @@ -132292,28 +132814,27 @@ var init_prompt2 = __esm({ selectedText, instruction: task.instruction }); - const transcript = new Transcript(); - const interaction = new Interaction( - { speaker: "human", text: prompt2, displayText: prompt2 }, - { speaker: "assistant", text: assistantText, prefix: assistantPrefix }, - getContext({ - intent: task.intent, - uri: task.fixupFile.uri, - selectionRange: task.selectionRange, - userContextFiles: task.userContextFiles, - contextMessages: task.contextMessages, - editor, - followingText, - precedingText, - selectedText - }), - [] - ); - transcript.addInteraction(interaction); + const promptBuilder = new PromptBuilder(contextWindow); const preamble = getSimplePreamble(); - const completePrompt = await transcript.getPromptForLastInteraction(preamble); + promptBuilder.tryAddToPrefix(preamble); + if (assistantText) { + promptBuilder.tryAdd({ speaker: "assistant", text: assistantText }); + } + promptBuilder.tryAdd({ speaker: "human", text: prompt2 }); + const contextItems = await getContext({ + intent: task.intent, + uri: task.fixupFile.uri, + selectionRange: task.selectionRange, + userContextFiles: task.userContextFiles, + contextMessages: task.contextMessages, + editor, + followingText, + precedingText, + selectedText + }); + promptBuilder.tryAddContext(contextItems); return { - messages: completePrompt.prompt, + messages: promptBuilder.build(), stopSequences, responseTopic: responseTopic || BotResponseMultiplexer.DEFAULT_TOPIC, responsePrefix: assistantPrefix @@ -132333,10 +132854,10 @@ function contentSanitizer(text) { } return output.replace(/^\s*\n/, ""); } -var init_utils13 = __esm({ +var init_utils16 = __esm({ "../vscode/src/edit/utils.ts"() { "use strict"; - init_constants4(); + init_constants5(); } }); @@ -132376,11 +132897,15 @@ var init_provider2 = __esm({ init_log(); init_AuthProvider(); init_prompt2(); - init_constants4(); - init_utils13(); + init_constants5(); + init_utils16(); init_workspace_files(); init_vscode_shim(); - init_utils10(); + init_utils12(); + init_utilts(); + init_telemetry(); + init_code_count(); + init_telemetry_v2(); EditProvider = class { constructor(config) { this.config = config; @@ -132391,8 +132916,10 @@ var init_provider2 = __esm({ insertionPromise = null; async startEdit() { const model = this.config.task.model; + const contextWindow = getContextWindowForModel(this.config.authProvider.getAuthStatus(), model); const { messages: messages2, stopSequences, responseTopic, responsePrefix } = await buildInteraction({ model, + contextWindow, task: this.config.task, editor: this.config.editor }); @@ -132483,6 +133010,22 @@ var init_provider2 = __esm({ } await this.handleFileCreationResponse("", isMessageInProgress); } + if (!isMessageInProgress) { + telemetryService.log("CodyVSCodeExtension:fixupResponse:hasCode", { + ...countCode(response), + source: this.config.task.source, + hasV2Event: true + }); + const endpoint = this.config.authProvider?.getAuthStatus()?.endpoint; + const responseText = endpoint && isDotCom(endpoint) ? response : void 0; + telemetryRecorder.recordEvent("cody.fixup.response", "hasCode", { + metadata: countCode(response), + privateMetadata: { + source: this.config.task.source, + responseText + } + }); + } const intentsForInsert = ["add", "test"]; return intentsForInsert.includes(this.config.task.intent) ? this.handleFixupInsert(response, isMessageInProgress) : this.handleFixupEdit(response, isMessageInProgress); } @@ -132562,8 +133105,8 @@ var init_provider2 = __esm({ this.insertionPromise = this.config.controller.didReceiveNewFileRequest(task.id, newFileUri); try { await this.insertionPromise; - } catch { - this.handleError(new Error("Cody failed to generate unit tests")); + } catch (error) { + this.handleError(new Error("Cody failed to generate unit tests", { cause: error })); } finally { this.insertionPromise = null; } @@ -132573,17 +133116,6 @@ var init_provider2 = __esm({ } }); -// ../vscode/src/edit/constants.ts -var DEFAULT_EDIT_MODEL, DEFAULT_EDIT_MODE, DEFAULT_EDIT_INTENT; -var init_constants5 = __esm({ - "../vscode/src/edit/constants.ts"() { - "use strict"; - DEFAULT_EDIT_MODEL = "anthropic/claude-2.1"; - DEFAULT_EDIT_MODE = "edit"; - DEFAULT_EDIT_INTENT = "edit"; - } -}); - // ../vscode/src/edit/manager.ts var EditManager; var init_manager = __esm({ @@ -132593,27 +133125,44 @@ var init_manager = __esm({ init_src(); init_active_editor(); init_FixupController(); - init_telemetry(); - init_telemetry_v2(); init_provider2(); init_edit_selection(); - init_constants5(); + init_constants3(); + init_models2(); + init_edit_models(); + init_edit_intent(); + init_telemetry(); + init_telemetry_v2(); EditManager = class { constructor(options2) { this.options = options2; - this.controller = new FixupController(); + this.models = getEditModelsForUser(options2.authProvider.getAuthStatus()); + this.controller = new FixupController(options2.authProvider); this.disposables.push( this.controller, commands.registerCommand( "cody.command.edit-code", - (args3, source) => this.executeEdit(args3, source) + (args3) => this.executeEdit(args3) ) ); } controller; disposables = []; editProviders = /* @__PURE__ */ new Map(); - async executeEdit(args3 = {}, source = "editor") { + models = []; + syncAuthStatus(authStatus) { + this.models = getEditModelsForUser(authStatus); + } + async executeEdit(args3 = {}) { + const { + configuration: configuration2 = {}, + /** + * Note: Source must default to `editor` as these are + * editor actions that cannot provide executeEdit `args`. + * E.g. triggering this command via the command palette, right-click menus + **/ + source = "editor" + } = args3; const configFeatures = await ConfigFeaturesSingleton.getInstance().getConfigFeatures(); if (!configFeatures.commands) { void window2.showErrorMessage( @@ -132621,57 +133170,44 @@ var init_manager = __esm({ ); return; } - const isDocCommand = args3?.intent === "doc" ? "doc" : void 0; - const isUnitTestCommand = args3?.intent === "test" ? "test" : void 0; - const eventName = isDocCommand ?? isUnitTestCommand ?? "edit"; - telemetryService.log( - `CodyVSCodeExtension:command:${eventName}:executed`, - { source }, - { hasV2Event: true } - ); - telemetryRecorder.recordEvent(`cody.command.${eventName}`, "executed", { - privateMetadata: { source } - }); const editor = getEditor(); if (editor.ignored) { void window2.showInformationMessage("Cannot edit Cody ignored file."); return; } - const document2 = args3.document || editor.active?.document; + const document2 = configuration2.document || editor.active?.document; if (!document2) { void window2.showErrorMessage("Please open a file before running a command."); return; } - const range = args3.range || editor.active?.selection; - if (!range) { + const proposedRange = configuration2.range || editor.active?.selection; + if (!proposedRange) { return; } - if (editor.active) { - this.options.ghostHintDecorator.clearGhostText(editor.active); - } - const mode = args3.mode || DEFAULT_EDIT_MODE; - const model = args3.model || DEFAULT_EDIT_MODEL; - const intent = args3.intent || DEFAULT_EDIT_INTENT; + const range = getEditLineSelection(document2, proposedRange); + const mode = configuration2.mode || DEFAULT_EDIT_MODE; + const model = configuration2.model || editModel.get(this.options.authProvider, this.models); + const intent = getEditIntent(document2, range, configuration2.intent); let expandedRange; if (intent !== "add") { - const smartRange = await getEditSmartSelection(document2, range); + const smartRange = await getEditSmartSelection(document2, range, {}, intent); if (!smartRange.isEqual(range)) { expandedRange = smartRange; } } let task; - if (args3.instruction?.trim()) { + if (configuration2.instruction?.trim()) { task = await this.controller.createTask( document2, - args3.instruction, - args3.userContextFiles ?? [], + configuration2.instruction, + configuration2.userContextFiles ?? [], expandedRange || range, intent, mode, model, source, - args3.contextMessages, - args3.destinationFile + configuration2.contextMessages, + configuration2.destinationFile ); } else { task = await this.controller.promptUserForTask( @@ -132681,13 +133217,24 @@ var init_manager = __esm({ mode, model, intent, - args3.contextMessages || [], + configuration2.contextMessages || [], source ); } if (!task) { return; } + const isDocCommand = configuration2.intent === "doc" ? "doc" : void 0; + const isUnitTestCommand = configuration2.intent === "test" ? "test" : void 0; + const eventName = isDocCommand ?? isUnitTestCommand ?? "edit"; + telemetryService.log( + `CodyVSCodeExtension:command:${eventName}:executed`, + { source }, + { hasV2Event: true } + ); + telemetryRecorder.recordEvent(`cody.command.${eventName}`, "executed", { + privateMetadata: { source } + }); const provider = this.getProviderForTask(task); await provider.startEdit(); return task; @@ -132725,6 +133272,8 @@ var init_code_lenses = __esm({ init_active_editor(); init_test_commands(); init_document_sections(); + init_telemetry(); + init_telemetry_v2(); CommandCodeLenses = class { isEnabled = false; addTestEnabled = false; @@ -132750,6 +133299,8 @@ var init_code_lenses = __esm({ this._disposables.push(languages.registerCodeLensProvider({ scheme: "file" }, this)); this._disposables.push( commands.registerCommand("cody.editor.codelens.click", async (lens) => { + telemetryService.log("CodyVSCodeExtension:command:codelens:clicked"); + telemetryRecorder.recordEvent("cody.command.codelens", "clicked"); const clickedLens = lens; await this.onCodeLensClick(clickedLens); }) @@ -132888,7 +133439,7 @@ var init_vscode_editor = __esm({ init_src(); init_active_editor(); init_code_lenses(); - init_utils4(); + init_utils5(); VSCodeEditor = class { constructor() { window2.onDidChangeActiveTextEditor(() => getEditor()); @@ -133091,7 +133642,7 @@ var init_vscode_editor = __esm({ return; } try { - const workspaceEditor = new WorkspaceEdit(); + const workspaceEditor = new AgentWorkspaceEdit(); workspaceEditor.createFile(fileUri, { ignoreIfExists: true }); const range = new Range(0, 0, 9999, 0); workspaceEditor.replace(fileUri, range, content.trimEnd()); @@ -133630,8 +134181,8 @@ function createStatusBar() { const command = commands.registerCommand(statusBarItem2.command, async () => { const workspaceConfig = workspace.getConfiguration(); const config = getConfiguration(workspaceConfig); - function createFeatureToggle(name, description, detail, setting, getValue2, requiresReload = false) { - const isEnabled = getValue2(config); + async function createFeatureToggle(name, description, detail, setting, getValue2, requiresReload = false, buttons = void 0) { + const isEnabled = await getValue2(config); return { label: (isEnabled ? QUICK_PICK_ITEM_CHECKED_PREFIX2 : QUICK_PICK_ITEM_EMPTY_INDENT_PREFIX2) + name, description, @@ -133643,99 +134194,123 @@ function createStatusBar() { if (response === "Reload Window") { await commands.executeCommand("workbench.action.reloadWindow"); } - } + }, + buttons }; } if (errors.length > 0) { errors.map((error) => error.error.onShow?.()); } - const option = await window2.showQuickPick( + const quickPick = window2.createQuickPick(); + quickPick.items = [ // These description should stay in sync with the settings in package.json - [ - ...errors.length > 0 ? [ - { label: "notice", kind: -1 /* Separator */ }, - ...errors.map((error) => ({ - label: `$(alert) ${error.error.title}`, - description: "", - detail: QUICK_PICK_ITEM_EMPTY_INDENT_PREFIX2 + error.error.description, - onSelect() { - error.error.onSelect?.(); - const index = errors.indexOf(error); - errors.splice(index); - rerender(); - return Promise.resolve(); - } - })) - ] : [], - { label: "enable/disable features", kind: -1 /* Separator */ }, - createFeatureToggle( - "Code Autocomplete", - void 0, - "Enable Cody-powered code autocompletions", - "cody.autocomplete.enabled", - (c) => c.autocomplete - ), - createFeatureToggle( - "Code Actions", - void 0, - "Enable Cody fix and explain options in the Quick Fix menu", - "cody.codeActions.enabled", - (c) => c.codeActions - ), - createFeatureToggle( - "Editor Title Icon", - void 0, - "Enable Cody to appear in editor title menu for quick access to Cody commands", - "cody.editorTitleCommandIcon", - (c) => c.editorTitleCommandIcon - ), - createFeatureToggle( - "Code Lenses", - void 0, - "Enable Code Lenses in documents for quick access to Cody commands", - "cody.commandCodeLenses", - (c) => c.commandCodeLenses - ), - createFeatureToggle( - "Command Hints", - void 0, - "Enable hints for Edit and Chat shortcuts, displayed alongside editor selections", - "cody.commandHints.enabled", - (c) => c.commandHints - ), - createFeatureToggle( - "Search Context", - "Beta", - "Enable using the natural language search index as an Enhanced Context chat source", - "cody.experimental.symfContext", - (c) => c.experimentalSymfContext, - false - ), - { label: "settings", kind: -1 /* Separator */ }, - { - label: "$(gear) Cody Extension Settings", - async onSelect() { - await commands.executeCommand("cody.settings.extension"); + ...errors.length > 0 ? [ + { label: "notice", kind: -1 /* Separator */ }, + ...errors.map((error) => ({ + label: `$(alert) ${error.error.title}`, + description: "", + detail: QUICK_PICK_ITEM_EMPTY_INDENT_PREFIX2 + error.error.description, + onSelect() { + error.error.onSelect?.(); + const index = errors.indexOf(error); + errors.splice(index); + rerender(); + return Promise.resolve(); } - }, - { - label: "$(symbol-namespace) Custom Commands Settings", - async onSelect() { - await commands.executeCommand("cody.menu.commands-settings"); + })) + ] : [], + { label: "enable/disable features", kind: -1 /* Separator */ }, + await createFeatureToggle( + "Code Autocomplete", + void 0, + "Enable Cody-powered code autocompletions", + "cody.autocomplete.enabled", + (c) => c.autocomplete, + false, + [ + { + iconPath: new ThemeIcon("settings-more-action"), + tooltip: "Autocomplete Settings", + onClick: () => commands.executeCommand("workbench.action.openSettings", { + query: "@ext:sourcegraph.cody-ai autocomplete" + }) } - }, - { label: "feedback & support", kind: -1 /* Separator */ }, - ...FeedbackOptionItems - ], + ] + ), + await createFeatureToggle( + "Code Actions", + void 0, + "Enable Cody fix and explain options in the Quick Fix menu", + "cody.codeActions.enabled", + (c) => c.codeActions + ), + await createFeatureToggle( + "Editor Title Icon", + void 0, + "Enable Cody to appear in editor title menu for quick access to Cody commands", + "cody.editorTitleCommandIcon", + (c) => c.editorTitleCommandIcon + ), + await createFeatureToggle( + "Code Lenses", + void 0, + "Enable Code Lenses in documents for quick access to Cody commands", + "cody.commandCodeLenses", + (c) => c.commandCodeLenses + ), + await createFeatureToggle( + "Command Hints", + void 0, + "Enable hints for Edit and Chat shortcuts, displayed alongside editor selections", + "cody.commandHints.enabled", + getGhostHintEnablement + ), + await createFeatureToggle( + "Search Context", + "Beta", + "Enable using the natural language search index as an Enhanced Context chat source", + "cody.experimental.symfContext", + (c) => c.experimentalSymfContext, + false + ), + await createFeatureToggle( + "Commit Messages", + "Experimental", + "Enable Cody to appear in the Source Control input field, to generate a relevant commit message from your changes.", + "cody.experimental.commitMessage", + (c) => c.experimentalCommitMessage + ), + { label: "settings", kind: -1 /* Separator */ }, { - title: "Cody Settings", - placeHolder: "Choose an option", - matchOnDescription: true + label: "$(gear) Cody Extension Settings", + async onSelect() { + await commands.executeCommand("cody.settings.extension"); + } + }, + { + label: "$(symbol-namespace) Custom Commands Settings", + async onSelect() { + await commands.executeCommand("cody.menu.commands-settings"); + } + }, + { label: "feedback & support", kind: -1 /* Separator */ }, + ...FeedbackOptionItems + ]; + quickPick.title = "Cody Settings"; + quickPick.placeholder = "Choose an option"; + quickPick.matchOnDescription = true; + quickPick.show(); + quickPick.onDidAccept(() => { + const option = quickPick.activeItems[0]; + if (option && "onSelect" in option) { + option.onSelect().catch(console.error); } - ); - if (option && "onSelect" in option) { - option.onSelect().catch(console.error); - } + quickPick.hide(); + }); + quickPick.onDidTriggerItemButton((item) => { + item?.button?.onClick?.(); + quickPick.hide(); + }); }); let openLoadingLeases = 0; const errors = []; @@ -133764,7 +134339,7 @@ function createStatusBar() { rerender(); } const verifyActiveEditor = (uri) => { - if (uri && isCodyIgnoredFile(uri)) { + if (uri?.scheme === "file" && isCodyIgnoredFile(uri)) { statusBarItem2.tooltip = "Current file is ignored by Cody"; statusBarItem2.backgroundColor = new ThemeColor("statusBarItem.warningBackground"); } else { @@ -133821,6 +134396,7 @@ var init_StatusBar = __esm({ init_src(); init_configuration2(); init_FeedbackOptions(); + init_GhostHintDecorator(); DEFAULT_TEXT = "$(cody-logo-heavy)"; DEFAULT_TOOLTIP = "Cody Settings"; QUICK_PICK_ITEM_CHECKED_PREFIX2 = "$(check) "; @@ -133862,7 +134438,7 @@ var init_selection = __esm({ "use strict"; init_src(); init_active_editor(); - init_utils4(); + init_utils5(); } }); @@ -134078,150 +134654,6 @@ var init_context3 = __esm({ } }); -// ../vscode/src/commands/execute/ask.ts -var executeChat; -var init_ask = __esm({ - "../vscode/src/commands/execute/ask.ts"() { - "use strict"; - init_vscode_shim(); - executeChat = async (args3) => { - return commands.executeCommand("cody.action.chat", args3); - }; - } -}); - -// ../vscode/src/commands/services/runner.ts -var CommandRunner; -var init_runner = __esm({ - "../vscode/src/commands/services/runner.ts"() { - "use strict"; - init_vscode_shim(); - init_src(); - init_execute(); - init_log(); - init_telemetry(); - init_telemetry_v2(); - init_context3(); - init_ask(); - init_active_editor(); - CommandRunner = class { - constructor(command, args3) { - this.command = command; - this.args = args3; - logDebug2("CommandRunner", command.slashCommand, { verbose: { command, args: args3 } }); - command.mode = args3.runInChatMode ? "ask" : command.mode ?? "ask"; - this.command = command; - } - disposables = []; - /** - * Starts executing the Cody command. - */ - async start() { - const name = this.command.type === "default" ? this.command.slashCommand.replace("/", "") : "custom"; - if (this.command.mode === "ask") { - const addCodebaseContex = false; - telemetryService.log(`CodyVSCodeExtension:command:${name}:executed`, { - mode: this.command.mode, - useCodebaseContex: addCodebaseContex, - useShellCommand: !!this.command.context?.command, - requestID: this.args.requestID, - source: this.args.source - }); - telemetryRecorder.recordEvent(`cody.command.${name}`, "executed", { - metadata: { - useCodebaseContex: addCodebaseContex ? 1 : 0, - useShellCommand: this.command.context?.command ? 1 : 0 - }, - interactionID: this.args.requestID, - privateMetadata: { - mode: this.command.mode, - requestID: this.args.requestID, - source: this.args.source - } - }); - } - const configFeatures = await ConfigFeaturesSingleton.getInstance().getConfigFeatures(); - if (!configFeatures.commands) { - const disabledMsg = "This feature has been disabled by your Sourcegraph site admin."; - void window2.showErrorMessage(disabledMsg); - return; - } - const editor = getEditor(); - if (!editor.active || editor.ignored) { - const message = editor.ignored ? "Current file is ignored by a .cody/ignore file. Please remove it from the list and try again." : "No editor is active. Please open a file and try again."; - void window2.showErrorMessage(message); - return; - } - if (this.command.mode !== "ask") { - return this.handleEditRequest(); - } - return this.handleChatRequest(); - } - /** - * Handles a Cody chat command. - * Executes the chat request with the prompt and context files - */ - async handleChatRequest() { - logDebug2("CommandRunner:handleChatRequest", "chat request detecte"); - const prompt2 = this.command.prompt; - const contextFiles = await this.getContextFiles(); - return { - type: "chat", - session: await executeChat({ - text: prompt2, - submitType: "user", - contextFiles, - addEnhancedContext: this.command.context?.codebase ?? false, - source: this.args.source - }) - }; - } - /** - * handleFixupRequest method handles executing fixup based on editor selection. - * Creates range and instruction, calls fixup command. - */ - async handleEditRequest() { - logDebug2("CommandRunner:handleEditRequest", "fixup request detected"); - const commandKey = this.command.slashCommand.replace(/^\//, ""); - const isDefaultCommand = this.command.type === "default"; - const instruction = this.command.prompt; - const source = isDefaultCommand ? commandKey : "custom-commands"; - const userContextFiles = await this.getContextFiles(); - return { - type: "edit", - task: await executeEdit( - { - instruction, - intent: "edit", - mode: this.command.mode, - userContextFiles - }, - source - ) - }; - } - /** - * Combine userContextFiles and context fetched for the command - */ - async getContextFiles() { - const userContextFiles = this.args.userContextFiles ?? []; - const contextConfig = this.command.context; - if (contextConfig) { - const commandContext = await getCommandContextFiles(contextConfig); - userContextFiles.push(...commandContext); - } - return userContextFiles; - } - dispose() { - for (const disposable of this.disposables) { - disposable.dispose(); - } - this.disposables = []; - } - }; - } -}); - // ../vscode/src/commands/execute/smell.ts async function smellCommand(args3) { const addEnhancedContext = false; @@ -134514,14 +134946,14 @@ async function executeDocCommand(args3) { } return { type: "edit", - task: await executeEdit( - { + task: await executeEdit({ + configuration: { instruction: prompt2, intent: "doc", mode: "insert" }, - "doc" /* Doc */ - ) + source: "doc" /* Doc */ + }) }; } var init_doc = __esm({ @@ -134583,8 +135015,8 @@ async function executeTestEditCommand(args3) { } return { type: "edit", - task: await executeEdit( - { + task: await executeEdit({ + configuration: { instruction: destinationFile?.path ? newTestSuitePrompt : newTestFilePrompt, document: document2, intent: "test", @@ -134593,8 +135025,8 @@ async function executeTestEditCommand(args3) { userContextFiles: contextFiles.slice(0, 2), destinationFile }, - "test" /* Test */ - ) + source: "test" /* Test */ + }) }; } var init_test_edit = __esm({ @@ -134660,8 +135092,8 @@ async function executeTestCaseEditCommand(args3) { const range = new Range(startLine, 0, endLine, 0); return { type: "edit", - task: await executeEdit( - { + task: await executeEdit({ + configuration: { instruction, document: document2, range, @@ -134670,8 +135102,8 @@ async function executeTestCaseEditCommand(args3) { userContextFiles: contextFiles, destinationFile: document2.uri }, - "test" /* Test */ - ) + source: "test" /* Test */ + }) }; } var init_test_case = __esm({ @@ -134685,6 +135117,69 @@ var init_test_case = __esm({ } }); +// ../vscode/src/commands/execute/terminal.ts +async function executeExplainOutput(args3) { + logDebug("executeExplainOutput", "executing", { args: args3 }); + const requestID = v4_default(); + const addEnhancedContext = false; + const source = "terminal" /* Terminal */; + telemetryService.log("CodyVSCodeExtension:command:terminal:executed", { + useCodebaseContex: false, + requestID, + source + }); + telemetryRecorder.recordEvent("cody.command.terminal", "executed", { + metadata: { + useCodebaseContex: 0 + }, + interactionID: requestID, + privateMetadata: { + requestID, + source + } + }); + const output = args3.selection?.trim(); + if (!output) { + return void 0; + } + let prompt2 = template.replace("{{PROCESS}}", args3.name).replace("{{OUTPUT}}", output); + const options2 = JSON.stringify(args3.creationOptions ?? {}); + if (options2) { + prompt2 += ` +Process options: ${options2}`; + } + return { + type: "chat", + session: await executeChat({ + text: prompt2, + submitType: "user-newchat", + contextFiles: [], + addEnhancedContext, + source + }) + }; +} +var template; +var init_terminal = __esm({ + "../vscode/src/commands/execute/terminal.ts"() { + "use strict"; + init_src(); + init_ask(); + init_telemetry(); + init_telemetry_v2(); + init_esm_node(); + template = ` +Review and analyze this terminal output from the \`{{PROCESS}}\` process and summarize the key information. If this indicates an error, provide step-by-step instructions on how I can resolve this: + +\`\`\` + +{{OUTPUT}} + +\`\`\` +`; + } +}); + // ../vscode/src/commands/execute/index.ts function isDefaultChatCommand(id) { const key = id.replace(/^\//, "").trim(); @@ -134734,6 +135229,178 @@ var init_execute2 = __esm({ init_doc(); init_test_edit(); init_test_case(); + init_terminal(); + } +}); + +// ../vscode/src/commands/execute/ask.ts +var executeChat; +var init_ask = __esm({ + "../vscode/src/commands/execute/ask.ts"() { + "use strict"; + init_vscode_shim(); + init_src(); + init_execute2(); + init_active_editor(); + executeChat = async (args3) => { + const { chat, commands: commands3 } = await ConfigFeaturesSingleton.getInstance().getConfigFeatures(); + const isCommand = isDefaultChatCommand(args3.source || ""); + if (!isCommand && !chat || isCommand && !commands3) { + void window2.showErrorMessage( + "This feature has been disabled by your Sourcegraph site admin." + ); + return void 0; + } + if (isCommand && getEditor()?.ignored) { + void window2.showErrorMessage("Cannot execute a command in an ignored file."); + return void 0; + } + return commands.executeCommand("cody.action.chat", args3); + }; + } +}); + +// ../vscode/src/commands/services/runner.ts +var CommandRunner; +var init_runner = __esm({ + "../vscode/src/commands/services/runner.ts"() { + "use strict"; + init_vscode_shim(); + init_src(); + init_execute(); + init_log(); + init_telemetry(); + init_telemetry_v2(); + init_context3(); + init_ask(); + init_active_editor(); + CommandRunner = class { + constructor(command, args3) { + this.command = command; + this.args = args3; + logDebug2("CommandRunner", command.key, { verbose: { command, args: args3 } }); + command.mode = args3.runInChatMode ? "ask" : command.mode ?? "ask"; + this.command = command; + } + disposables = []; + /** + * Starts executing the Cody command. + */ + async start() { + const name = this.command.type === "default" ? this.command.key : "custom"; + if (this.command.mode === "ask") { + const addCodebaseContex = false; + telemetryService.log(`CodyVSCodeExtension:command:${name}:executed`, { + mode: this.command.mode, + useCodebaseContex: addCodebaseContex, + useShellCommand: !!this.command.context?.command, + requestID: this.args.requestID, + source: this.args.source + }); + telemetryRecorder.recordEvent(`cody.command.${name}`, "executed", { + metadata: { + useCodebaseContex: addCodebaseContex ? 1 : 0, + useShellCommand: this.command.context?.command ? 1 : 0 + }, + interactionID: this.args.requestID, + privateMetadata: { + mode: this.command.mode, + requestID: this.args.requestID, + source: this.args.source + } + }); + } + const configFeatures = await ConfigFeaturesSingleton.getInstance().getConfigFeatures(); + if (!configFeatures.commands) { + const disabledMsg = "This feature has been disabled by your Sourcegraph site admin."; + void window2.showErrorMessage(disabledMsg); + return; + } + const editor = getEditor(); + if (!editor.active || editor.ignored) { + const message = editor.ignored ? "Current file is ignored by a .cody/ignore file. Please remove it from the list and try again." : "No editor is active. Please open a file and try again."; + void window2.showErrorMessage(message); + return; + } + if (this.command.mode !== "ask") { + return this.handleEditRequest(); + } + return this.handleChatRequest(); + } + /** + * Handles a Cody chat command. + * Executes the chat request with the prompt and context files + */ + async handleChatRequest() { + logDebug2("CommandRunner:handleChatRequest", "chat request detecte"); + const prompt2 = this.command.prompt; + const contextFiles = await this.getContextFiles(); + return { + type: "chat", + session: await executeChat({ + text: prompt2, + submitType: "user", + contextFiles, + addEnhancedContext: this.command.context?.codebase ?? false, + source: this.args.source + }) + }; + } + /** + * handleFixupRequest method handles executing fixup based on editor selection. + * Creates range and instruction, calls fixup command. + */ + async handleEditRequest() { + logDebug2("CommandRunner:handleEditRequest", "fixup request detected"); + const commandKey = this.command.key; + const isDefaultCommand = this.command.type === "default"; + const instruction = this.command.prompt; + const source = isDefaultCommand ? commandKey : "custom-commands"; + const userContextFiles = await this.getContextFiles(); + return { + type: "edit", + task: await executeEdit({ + configuration: { + instruction, + intent: "edit", + mode: this.command.mode, + userContextFiles + }, + source + }) + }; + } + /** + * Combine userContextFiles and context fetched for the command + */ + async getContextFiles() { + const userContextFiles = this.args.userContextFiles ?? []; + const contextConfig = this.command.context; + if (contextConfig) { + const commandContext = await getCommandContextFiles(contextConfig); + userContextFiles.push(...commandContext); + } + return userContextFiles; + } + dispose() { + for (const disposable of this.disposables) { + disposable.dispose(); + } + this.disposables = []; + } + }; + } +}); + +// ../vscode/src/commands/utils/common.ts +function fromSlashCommand(slashCommand) { + return slashCommand.replace(leadingForwardSlashRegex, ""); +} +var leadingForwardSlashRegex; +var init_common2 = __esm({ + "../vscode/src/commands/utils/common.ts"() { + "use strict"; + leadingForwardSlashRegex = /^\/+/; } }); @@ -134745,6 +135412,7 @@ var init_CommandsController = __esm({ init_log(); init_runner(); init_execute2(); + init_common2(); CommandsController = class { disposables = []; // Provider of default commands and custom commands @@ -134760,14 +135428,14 @@ var init_CommandsController = __esm({ * * Handles prompt building and context fetching for commands. */ - async execute(text, args3) { - const commandSplit = text?.trim().split(" "); - const commandKey = commandSplit?.shift() || text; - const command = this.provider?.get(commandKey); - const additionalInstruction = commandKey === text ? "" : commandSplit.slice(1).join(" "); + async execute(input, args3) { + const commandSplit = input?.trim().split(" "); + const commandKey = fromSlashCommand(commandSplit[0] || input); + const additionalInstruction = commandKey === input ? "" : commandSplit.slice(1).join(" "); if (isDefaultChatCommand(commandKey) || isDefaultEditCommand(commandKey)) { return executeDefaultCommand(commandKey, additionalInstruction); } + const command = this.provider?.get(commandKey); if (!command) { logDebug2("CommandsController:execute", "command not found", { verbose: { commandKey } }); return void 0; @@ -134794,27 +135462,12 @@ var init_CommandsController = __esm({ } }); -// ../vscode/src/commands/utils/common.ts -function fromSlashCommand(slashCommand) { - return slashCommand.replace(leadingForwardSlashRegex, ""); -} -function toSlashCommand(command) { - return command.replace(leadingForwardSlashRegex, "").replace(/^/, "/"); -} -var leadingForwardSlashRegex; -var init_common2 = __esm({ - "../vscode/src/commands/utils/common.ts"() { - "use strict"; - leadingForwardSlashRegex = /^\/+/; - } -}); - // ../vscode/src/commands/utils/get-commands.ts -function getDefaultCommandsMap(editorCommands2 = []) { +function getDefaultCommandsMap(editorCommands = []) { const map = /* @__PURE__ */ new Map(); - for (const command of editorCommands2) { - if (command.slashCommand) { - map.set(command.slashCommand, command); + for (const command of editorCommands) { + if (command.key) { + map.set(command.key, command); } } const fileContent = JSON.stringify(commands2); @@ -134827,10 +135480,13 @@ function buildCodyCommandMap(type, fileContent) { const commands3 = parsed.commands ?? parsed; for (const key in commands3) { const command = commands3[key]; + if (!command.prompt) { + continue; + } command.type = type; - command.slashCommand = toSlashCommand(key); - command.mode = command.mode ?? (command.prompt.startsWith("/edit ") ? "edit" : "ask"); - map.set(command.slashCommand, command); + command.key = key; + command.mode = command.mode ?? "ask"; + map.set(command.key, command); } return map; } @@ -134845,7 +135501,6 @@ var init_get_commands = __esm({ "use strict"; init_esm_node(); init_execute2(); - init_common2(); } }); @@ -135274,6 +135929,158 @@ var init_enterprise_context_factory = __esm({ } }); +// ../vscode/src/notifications/cody-pro-expiration.ts +var import_vscode_uri12, CodyProExpirationNotifications; +var init_cody_pro_expiration = __esm({ + "../vscode/src/notifications/cody-pro-expiration.ts"() { + "use strict"; + init_LocalStorageProvider(); + import_vscode_uri12 = __toESM(require_umd()); + CodyProExpirationNotifications = class _CodyProExpirationNotifications { + /** + * Set up a check (now and when auth status changes) whether to show the user a notification + * about their Cody Pro subscription having expired (or expiring soon). + */ + constructor(apiClient, authProvider, featureFlagProvider2, showInformationMessage, openExternal, flagCheckDelayMs = 1e3 * 60 * 30, autoUpdateDelay = 1e3 * 3, checkImmediately = true) { + this.apiClient = apiClient; + this.authProvider = authProvider; + this.featureFlagProvider = featureFlagProvider2; + this.showInformationMessage = showInformationMessage; + this.openExternal = openExternal; + this.flagCheckDelayMs = flagCheckDelayMs; + this.autoUpdateDelay = autoUpdateDelay; + if (checkImmediately) { + void this.triggerExpirationCheck(); + } + } + static expiredActionUrl = "https://sourcegraph.com/cody/subscription"; + static expiredMessageText = ` + Your Cody Pro trial has ended, and you are now on the Cody Free plan. + + If you'd like to upgrade to Cody Pro, please setup your payment information. You can cancel anytime. + `; + static nearlyExpiredActionUrl = "https://sourcegraph.com/cody/subscription?on-trial=true"; + static nearlyExpiredMessageText = ` + Your Cody Pro Trial is ending soon. + + Setup your payment information to continue using Cody Pro, you won't be charged until February 21. + `; + static localStorageSuppressionKey = "extension.codyPro.suppressExpirationNotices"; + static actionText = "Setup Payment Info"; + static noThanksText = "Don\u2019t Show Again"; + /** + * Current subscription to auth provider status changes that may trigger a check. + */ + authProviderSubscription; + /** + * A timer if there is currently an outstanding timed check. + */ + nextTimedCheck; + /** + * Whether we've been disposed. + */ + isDisposed = false; + /** + * Perform an immediate check and display a notification if appropriate. + */ + async triggerExpirationCheck() { + if (this.shouldSuppressNotifications()) + return; + if (!this.authProviderSubscription) { + this.authProviderSubscription = this.authProvider.addChangeListener( + () => setTimeout(() => this.triggerExpirationCheck(), this.autoUpdateDelay) + ); + } + const authStatus = this.authProvider.getAuthStatus(); + if (!authStatus.isLoggedIn || !authStatus.isDotCom) + return; + const useSscForCodySubscription = await this.featureFlagProvider.evaluateFeatureFlag( + "use-ssc-for-cody-subscription" /* UseSscForCodySubscription */ + ); + if (this.shouldSuppressNotifications()) + return; + if (!useSscForCodySubscription) { + this.scheduleTimedCheck(); + return; + } + const res = await this.apiClient.getCurrentUserCodySubscription(); + if (this.shouldSuppressNotifications()) + return; + if (res instanceof Error) { + console.error(res); + this.scheduleTimedCheck(); + return; + } + if (res.plan !== "PRO" || res.status !== "PENDING") + return; + await this.showNotification(); + } + async showNotification() { + const codyProTrialEnded = await this.featureFlagProvider.evaluateFeatureFlag( + "cody-pro-trial-ended" /* CodyProTrialEnded */ + ); + if (this.shouldSuppressNotifications()) + return; + this.dispose(); + let actionUrl; + let text; + if (codyProTrialEnded) { + actionUrl = _CodyProExpirationNotifications.expiredActionUrl; + text = _CodyProExpirationNotifications.expiredMessageText; + } else { + actionUrl = _CodyProExpirationNotifications.nearlyExpiredActionUrl; + text = _CodyProExpirationNotifications.nearlyExpiredMessageText; + } + const actionText = _CodyProExpirationNotifications.actionText; + const noThanksText = _CodyProExpirationNotifications.noThanksText; + const action = await this.showInformationMessage(text, actionText, noThanksText); + this.suppressFutureNotifications(); + if (action === actionText) { + await this.openExternal(import_vscode_uri12.URI.parse(actionUrl)); + } + } + /** + * Checks if it's still valid to show a notification. + */ + shouldSuppressNotifications() { + if (this.isDisposed) + return true; + if (localStorage2.get(_CodyProExpirationNotifications.localStorageSuppressionKey)) { + this.dispose(); + return true; + } + return false; + } + suppressFutureNotifications() { + this.dispose(); + localStorage2.set(_CodyProExpirationNotifications.localStorageSuppressionKey, "true"); + } + /** + * Schedules a future check. + */ + scheduleTimedCheck() { + this.nextTimedCheck?.unref(); + this.nextTimedCheck = setTimeout( + async () => this.triggerExpirationCheck(), + this.flagCheckDelayMs + ); + } + /** + * Stops checking and cleans up. + * + * Safe to call multiple times. + */ + dispose() { + this.isDisposed = true; + this.authProviderSubscription?.(); + this.authProviderSubscription = void 0; + this.nextTimedCheck?.unref(); + this.nextTimedCheck = void 0; + } + }; + } +}); + // ../vscode/src/services/SidebarCommands.ts function registerSidebarCommands() { function logSidebarClick(feature) { @@ -135414,14 +136221,15 @@ var init_main = __esm({ init_CommandsController(); init_get_commands(); init_enterprise_context_factory(); + init_cody_pro_expiration(); init_execute2(); init_SidebarCommands(); register = async (context3, initialConfig, platform5) => { const disposables = []; disposables.push(manageDisplayPathEnvInfoForExtension()); - const gitAPI2 = await gitAPIinit(); - if (gitAPI2) { - disposables.push(gitAPI2); + const gitApiDisposable = await gitAPIinit(); + if (gitApiDisposable) { + disposables.push(gitApiDisposable); } const isExtensionModeDevOrTest = context3.extensionMode === 2 /* Development */ || context3.extensionMode === 3 /* Test */; await configureEventsInfra(initialConfig, isExtensionModeDevOrTest); @@ -135492,17 +136300,22 @@ var init_main = __esm({ symfRunner || null, guardrails ); - const ghostHintDecorator = new GhostHintDecorator(); - disposables.push( + const gitApi = gitAPI(); + let commitMessageProvider = null; + if (gitApi && platform5.createCommitMessageProvider) { + commitMessageProvider = platform5.createCommitMessageProvider({ chatClient, editor, gitApi }); + commitMessageProvider.onConfigurationChange(initialConfig); + disposables.push(commitMessageProvider); + } + const ghostHintDecorator = new GhostHintDecorator(authProvider); + const editorManager = new EditManager({ + chat: chatClient, + editor, + contextProvider, ghostHintDecorator, - new EditManager({ - chat: chatClient, - editor, - contextProvider, - ghostHintDecorator - }), - new CodeActionProvider({ contextProvider }) - ); + authProvider + }); + disposables.push(ghostHintDecorator, editorManager, new CodeActionProvider({ contextProvider })); let oldConfig = JSON.stringify(initialConfig); async function onConfigurationChange(newConfig) { if (oldConfig === JSON.stringify(newConfig)) { @@ -135516,6 +136329,7 @@ var init_main = __esm({ externalServicesOnDidConfigurationChange(newConfig); promises2.push(configureEventsInfra(newConfig, isExtensionModeDevOrTest)); platform5.onConfigurationChange?.(newConfig); + commitMessageProvider?.onConfigurationChange(newConfig); symfRunner?.setSourcegraphAuth(newConfig.serverEndpoint, newConfig.accessToken); enterpriseContextFactory.clientConfigurationDidChange(); promises2.push( @@ -135547,6 +136361,7 @@ var init_main = __esm({ } authProvider.addChangeListener(async (authStatus) => { await chatManager.syncAuthStatus(authStatus); + editorManager.syncAuthStatus(authStatus); await contextProvider.syncAuthStatus(); const parallelPromises = []; parallelPromises.push(featureFlagProvider.syncAuthStatus()); @@ -135590,7 +136405,8 @@ var init_main = __esm({ commands.registerCommand("cody.command.document-code", (a) => executeDocCommand(a)), commands.registerCommand("cody.command.generate-tests", (a) => executeTestChatCommand(a)), commands.registerCommand("cody.command.unit-tests", (a) => executeTestEditCommand(a)), - commands.registerCommand("cody.command.tests-cases", (a) => executeTestCaseEditCommand(a)) + commands.registerCommand("cody.command.tests-cases", (a) => executeTestCaseEditCommand(a)), + commands.registerCommand("cody.command.explain-output", (a) => executeExplainOutput(a)) ); const statusBar = createStatusBar(); disposables.push( @@ -135751,6 +136567,22 @@ ${retryMessage}` authStatus.userCanUpgrade = !res.codyProEnabled; void chatManager.syncAuthStatus(authStatus); } + }), + new CodyProExpirationNotifications( + graphqlClient, + authProvider, + featureFlagProvider, + window2.showInformationMessage, + env2.openExternal + ), + // For register sidebar clicks + commands.registerCommand("cody.sidebar.click", (name, command) => { + const source = "sidebar"; + telemetryService.log(`CodyVSCodeExtension:command:${name}:clicked`, { source }); + telemetryRecorder.recordEvent(`cody.command.${name}`, "clicked", { + privateMetadata: { source } + }); + void commands.executeCommand(command, [source]); }) ); let removeAuthStatusBarError; @@ -139568,21 +140400,21 @@ function createLocalEmbeddingsController(context3, config) { function getIndexLibraryPath() { switch (process.platform) { case "darwin": - return import_vscode_uri12.URI.file(`${process.env.HOME}/Library/Caches/com.sourcegraph.cody/embeddings`); + return import_vscode_uri13.URI.file(`${process.env.HOME}/Library/Caches/com.sourcegraph.cody/embeddings`); case "linux": - return import_vscode_uri12.URI.file(`${process.env.HOME}/.cache/com.sourcegraph.cody/embeddings`); + return import_vscode_uri13.URI.file(`${process.env.HOME}/.cache/com.sourcegraph.cody/embeddings`); case "win32": - return import_vscode_uri12.URI.file(`${process.env.LOCALAPPDATA}\\com.sourcegraph.cody\\embeddings`); + return import_vscode_uri13.URI.file(`${process.env.LOCALAPPDATA}\\com.sourcegraph.cody\\embeddings`); default: throw new Error(`Unsupported platform: ${process.platform}`); } } -var import_vscode_uri12, LocalEmbeddingsController; +var import_vscode_uri13, LocalEmbeddingsController; var init_local_embeddings = __esm({ "../vscode/src/local-context/local-embeddings.ts"() { "use strict"; init_vscode_shim(); - import_vscode_uri12 = __toESM(require_umd()); + import_vscode_uri13 = __toESM(require_umd()); init_src(); init_spawn_bfg(); init_log(); @@ -139602,7 +140434,7 @@ var init_local_embeddings = __esm({ this.endpointIsDotcom = isDotCom(config.serverEndpoint); this.model = config.testingLocalEmbeddingsModel || "openai/text-embedding-ada-002"; this.endpoint = config.testingLocalEmbeddingsEndpoint || "https://cody-gateway.sourcegraph.com/v1/embeddings"; - this.indexLibraryPath = config.testingLocalEmbeddingsIndexLibraryPath ? import_vscode_uri12.URI.file(config.testingLocalEmbeddingsIndexLibraryPath) : void 0; + this.indexLibraryPath = config.testingLocalEmbeddingsIndexLibraryPath ? import_vscode_uri13.URI.file(config.testingLocalEmbeddingsIndexLibraryPath) : void 0; } disposables = []; // These properties are constants, but may be overridden for testing. @@ -139752,10 +140584,10 @@ var init_local_embeddings = __esm({ // indicating we are no longer loading the index. loadAfterIndexing() { if (this.dirBeingIndexed && (!this.lastRepo || this.lastRepo.dir.toString() === this.dirBeingIndexed.toString())) { - const path19 = this.dirBeingIndexed; + const path20 = this.dirBeingIndexed; void (async () => { - const loadedOk = await this.eagerlyLoad(path19); - logDebug2("LocalEmbeddingsController", 'load after indexing "done"', path19, loadedOk); + const loadedOk = await this.eagerlyLoad(path20); + logDebug2("LocalEmbeddingsController", 'load after indexing "done"', path20, loadedOk); this.changeEmitter.fire(this); if (loadedOk && !this.lastError) { await window2.showInformationMessage("\u2728 Cody Embeddings Index Complete"); @@ -139865,7 +140697,7 @@ var init_local_embeddings = __esm({ async indexRequest(options2) { try { await (await this.getService()).request("embeddings/index", options2); - this.dirBeingIndexed = import_vscode_uri12.URI.file(options2.repoPath); + this.dirBeingIndexed = import_vscode_uri13.URI.file(options2.repoPath); this.statusBar?.dispose(); this.statusBar = window2.createStatusBarItem( "cody-local-embeddings", @@ -140284,11 +141116,11 @@ var init_opts_arg = __esm({ const resolved = opts; const optsFs = opts.fs || {}; opts.mkdir = opts.mkdir || optsFs.mkdir || import_fs2.mkdir; - opts.mkdirAsync = opts.mkdirAsync ? opts.mkdirAsync : async (path19, options2) => { - return new Promise((res, rej) => resolved.mkdir(path19, options2, (er, made) => er ? rej(er) : res(made))); + opts.mkdirAsync = opts.mkdirAsync ? opts.mkdirAsync : async (path20, options2) => { + return new Promise((res, rej) => resolved.mkdir(path20, options2, (er, made) => er ? rej(er) : res(made))); }; opts.stat = opts.stat || optsFs.stat || import_fs2.stat; - opts.statAsync = opts.statAsync ? opts.statAsync : async (path19) => new Promise((res, rej) => resolved.stat(path19, (err3, stats) => err3 ? rej(err3) : res(stats))); + opts.statAsync = opts.statAsync ? opts.statAsync : async (path20) => new Promise((res, rej) => resolved.stat(path20, (err3, stats) => err3 ? rej(err3) : res(stats))); opts.statSync = opts.statSync || optsFs.statSync || import_fs2.statSync; opts.mkdirSync = opts.mkdirSync || optsFs.mkdirSync || import_fs2.mkdirSync; return resolved; @@ -140302,12 +141134,12 @@ var init_mkdirp_manual = __esm({ "../node_modules/.pnpm/mkdirp@3.0.1/node_modules/mkdirp/dist/mjs/mkdirp-manual.js"() { import_path10 = require("path"); init_opts_arg(); - mkdirpManualSync = (path19, options2, made) => { - const parent = (0, import_path10.dirname)(path19); + mkdirpManualSync = (path20, options2, made) => { + const parent = (0, import_path10.dirname)(path20); const opts = { ...optsArg(options2), recursive: false }; - if (parent === path19) { + if (parent === path20) { try { - return opts.mkdirSync(path19, opts); + return opts.mkdirSync(path20, opts); } catch (er) { const fer = er; if (fer && fer.code !== "EISDIR") { @@ -140317,45 +141149,45 @@ var init_mkdirp_manual = __esm({ } } try { - opts.mkdirSync(path19, opts); - return made || path19; + opts.mkdirSync(path20, opts); + return made || path20; } catch (er) { const fer = er; if (fer && fer.code === "ENOENT") { - return mkdirpManualSync(path19, opts, mkdirpManualSync(parent, opts, made)); + return mkdirpManualSync(path20, opts, mkdirpManualSync(parent, opts, made)); } if (fer && fer.code !== "EEXIST" && fer && fer.code !== "EROFS") { throw er; } try { - if (!opts.statSync(path19).isDirectory()) + if (!opts.statSync(path20).isDirectory()) throw er; } catch (_) { throw er; } } }; - mkdirpManual = Object.assign(async (path19, options2, made) => { + mkdirpManual = Object.assign(async (path20, options2, made) => { const opts = optsArg(options2); opts.recursive = false; - const parent = (0, import_path10.dirname)(path19); - if (parent === path19) { - return opts.mkdirAsync(path19, opts).catch((er) => { + const parent = (0, import_path10.dirname)(path20); + if (parent === path20) { + return opts.mkdirAsync(path20, opts).catch((er) => { const fer = er; if (fer && fer.code !== "EISDIR") { throw er; } }); } - return opts.mkdirAsync(path19, opts).then(() => made || path19, async (er) => { + return opts.mkdirAsync(path20, opts).then(() => made || path20, async (er) => { const fer = er; if (fer && fer.code === "ENOENT") { - return mkdirpManual(parent, opts).then((made2) => mkdirpManual(path19, opts, made2)); + return mkdirpManual(parent, opts).then((made2) => mkdirpManual(path20, opts, made2)); } if (fer && fer.code !== "EEXIST" && fer.code !== "EROFS") { throw er; } - return opts.statAsync(path19).then((st) => { + return opts.statAsync(path20).then((st) => { if (st.isDirectory()) { return made; } else { @@ -140374,12 +141206,12 @@ var import_path11, findMade, findMadeSync; var init_find_made = __esm({ "../node_modules/.pnpm/mkdirp@3.0.1/node_modules/mkdirp/dist/mjs/find-made.js"() { import_path11 = require("path"); - findMade = async (opts, parent, path19) => { - if (path19 === parent) { + findMade = async (opts, parent, path20) => { + if (path20 === parent) { return; } return opts.statAsync(parent).then( - (st) => st.isDirectory() ? path19 : void 0, + (st) => st.isDirectory() ? path20 : void 0, // will fail later // will fail later (er) => { @@ -140388,12 +141220,12 @@ var init_find_made = __esm({ } ); }; - findMadeSync = (opts, parent, path19) => { - if (path19 === parent) { + findMadeSync = (opts, parent, path20) => { + if (path20 === parent) { return void 0; } try { - return opts.statSync(parent).isDirectory() ? path19 : void 0; + return opts.statSync(parent).isDirectory() ? path20 : void 0; } catch (er) { const fer = er; return fer && fer.code === "ENOENT" ? findMadeSync(opts, (0, import_path11.dirname)(parent), parent) : void 0; @@ -140410,36 +141242,36 @@ var init_mkdirp_native = __esm({ init_find_made(); init_mkdirp_manual(); init_opts_arg(); - mkdirpNativeSync = (path19, options2) => { + mkdirpNativeSync = (path20, options2) => { const opts = optsArg(options2); opts.recursive = true; - const parent = (0, import_path12.dirname)(path19); - if (parent === path19) { - return opts.mkdirSync(path19, opts); + const parent = (0, import_path12.dirname)(path20); + if (parent === path20) { + return opts.mkdirSync(path20, opts); } - const made = findMadeSync(opts, path19); + const made = findMadeSync(opts, path20); try { - opts.mkdirSync(path19, opts); + opts.mkdirSync(path20, opts); return made; } catch (er) { const fer = er; if (fer && fer.code === "ENOENT") { - return mkdirpManualSync(path19, opts); + return mkdirpManualSync(path20, opts); } else { throw er; } } }; - mkdirpNative = Object.assign(async (path19, options2) => { + mkdirpNative = Object.assign(async (path20, options2) => { const opts = { ...optsArg(options2), recursive: true }; - const parent = (0, import_path12.dirname)(path19); - if (parent === path19) { - return await opts.mkdirAsync(path19, opts); + const parent = (0, import_path12.dirname)(path20); + if (parent === path20) { + return await opts.mkdirAsync(path20, opts); } - return findMade(opts, path19).then((made) => opts.mkdirAsync(path19, opts).then((m) => made || m).catch((er) => { + return findMade(opts, path20).then((made) => opts.mkdirAsync(path20, opts).then((m) => made || m).catch((er) => { const fer = er; if (fer && fer.code === "ENOENT") { - return mkdirpManual(path19, opts); + return mkdirpManual(path20, opts); } else { throw er; } @@ -140454,25 +141286,25 @@ var init_path_arg = __esm({ "../node_modules/.pnpm/mkdirp@3.0.1/node_modules/mkdirp/dist/mjs/path-arg.js"() { import_path13 = require("path"); platform3 = process.env.__TESTING_MKDIRP_PLATFORM__ || process.platform; - pathArg = (path19) => { - if (/\0/.test(path19)) { + pathArg = (path20) => { + if (/\0/.test(path20)) { throw Object.assign(new TypeError("path must be a string without null bytes"), { - path: path19, + path: path20, code: "ERR_INVALID_ARG_VALUE" }); } - path19 = (0, import_path13.resolve)(path19); + path20 = (0, import_path13.resolve)(path20); if (platform3 === "win32") { const badWinChars = /[*|"<>?:]/; - const { root } = (0, import_path13.parse)(path19); - if (badWinChars.test(path19.substring(root.length))) { + const { root } = (0, import_path13.parse)(path20); + if (badWinChars.test(path20.substring(root.length))) { throw Object.assign(new Error("Illegal characters in path."), { - path: path19, + path: path20, code: "EINVAL" }); } } - return path19; + return path20; }; } }); @@ -140505,15 +141337,15 @@ var init_mjs3 = __esm({ init_mkdirp_manual(); init_mkdirp_native(); init_use_native(); - mkdirpSync = (path19, opts) => { - path19 = pathArg(path19); + mkdirpSync = (path20, opts) => { + path20 = pathArg(path20); const resolved = optsArg(opts); - return useNativeSync(resolved) ? mkdirpNativeSync(path19, resolved) : mkdirpManualSync(path19, resolved); + return useNativeSync(resolved) ? mkdirpNativeSync(path20, resolved) : mkdirpManualSync(path20, resolved); }; - mkdirp = Object.assign(async (path19, opts) => { - path19 = pathArg(path19); + mkdirp = Object.assign(async (path20, opts) => { + path20 = pathArg(path20); const resolved = optsArg(opts); - return useNative(resolved) ? mkdirpNative(path19, resolved) : mkdirpManual(path19, resolved); + return useNative(resolved) ? mkdirpNative(path20, resolved) : mkdirpManual(path20, resolved); }, { mkdirpSync, mkdirpNative, @@ -145870,11 +146702,11 @@ var require_util5 = __commonJS({ return headers; } exports2.parseHeaders = parseHeaders; - function appendResourcePathToUrl(url2, path19) { + function appendResourcePathToUrl(url2, path20) { if (!url2.endsWith("/")) { url2 = url2 + "/"; } - return url2 + path19; + return url2 + path20; } exports2.appendResourcePathToUrl = appendResourcePathToUrl; function appendRootPathToUrlIfNeeded(url2) { @@ -148871,9 +149703,9 @@ var require_getMachineId_linux = __commonJS({ var api_1 = require_src(); async function getMachineId() { const paths = ["/etc/machine-id", "/var/lib/dbus/machine-id"]; - for (const path19 of paths) { + for (const path20 of paths) { try { - const result = await fs_1.promises.readFile(path19, { encoding: "utf8" }); + const result = await fs_1.promises.readFile(path20, { encoding: "utf8" }); return result.trim(); } catch (e) { api_1.diag.debug(`error reading machine id: ${e}`); @@ -153994,12 +154826,12 @@ var require_utils11 = __commonJS({ const reqUrlObject = requestUrl || {}; const protocol2 = reqUrlObject.protocol || fallbackProtocol; const port = (reqUrlObject.port || "").toString(); - const path19 = reqUrlObject.path || "/"; + const path20 = reqUrlObject.path || "/"; let host = reqUrlObject.host || reqUrlObject.hostname || headers.host || "localhost"; if (host.indexOf(":") === -1 && port && port !== "80" && port !== "443") { host += `:${port}`; } - return `${protocol2}//${host}${path19}`; + return `${protocol2}//${host}${path20}`; }; exports2.getAbsoluteUrl = getAbsoluteUrl; var parseResponseStatus = (kind, statusCode) => { @@ -154668,8 +155500,8 @@ var require_path_parse = __commonJS({ // ../node_modules/.pnpm/resolve@1.22.1/node_modules/resolve/lib/node-modules-paths.js var require_node_modules_paths = __commonJS({ "../node_modules/.pnpm/resolve@1.22.1/node_modules/resolve/lib/node-modules-paths.js"(exports2, module2) { - var path19 = require("path"); - var parse7 = path19.parse || require_path_parse(); + var path20 = require("path"); + var parse7 = path20.parse || require_path_parse(); var getNodeModulesDirs = function getNodeModulesDirs2(absoluteStart, modules) { var prefix = "/"; if (/^([A-Za-z]:)/.test(absoluteStart)) { @@ -154685,7 +155517,7 @@ var require_node_modules_paths = __commonJS({ } return paths.reduce(function(dirs, aPath) { return dirs.concat(modules.map(function(moduleDir) { - return path19.resolve(prefix, aPath, moduleDir); + return path20.resolve(prefix, aPath, moduleDir); })); }, []); }; @@ -155013,7 +155845,7 @@ var require_async4 = __commonJS({ "../node_modules/.pnpm/resolve@1.22.1/node_modules/resolve/lib/async.js"(exports2, module2) { var fs7 = require("fs"); var getHomedir = require_homedir(); - var path19 = require("path"); + var path20 = require("path"); var caller = require_caller(); var nodeModulesPaths = require_node_modules_paths(); var normalizeOptions = require_normalize_options(); @@ -155022,8 +155854,8 @@ var require_async4 = __commonJS({ var homedir2 = getHomedir(); var defaultPaths = function() { return [ - path19.join(homedir2, ".node_modules"), - path19.join(homedir2, ".node_libraries") + path20.join(homedir2, ".node_modules"), + path20.join(homedir2, ".node_libraries") ]; }; var defaultIsFile = function isFile2(file, cb) { @@ -155061,8 +155893,8 @@ var require_async4 = __commonJS({ cb(null, x); } }; - var defaultReadPackage = function defaultReadPackage2(readFile5, pkgfile, cb) { - readFile5(pkgfile, function(readFileErr, body2) { + var defaultReadPackage = function defaultReadPackage2(readFile6, pkgfile, cb) { + readFile6(pkgfile, function(readFileErr, body2) { if (readFileErr) cb(readFileErr); else { @@ -155078,7 +155910,7 @@ var require_async4 = __commonJS({ var getPackageCandidates = function getPackageCandidates2(x, start4, opts) { var dirs = nodeModulesPaths(start4, opts, x); for (var i = 0; i < dirs.length; i++) { - dirs[i] = path19.join(dirs[i], x); + dirs[i] = path20.join(dirs[i], x); } return dirs; }; @@ -155098,7 +155930,7 @@ var require_async4 = __commonJS({ opts = normalizeOptions(x, opts); var isFile2 = opts.isFile || defaultIsFile; var isDirectory = opts.isDirectory || defaultIsDir; - var readFile5 = opts.readFile || fs7.readFile; + var readFile6 = opts.readFile || fs7.readFile; var realpath2 = opts.realpath || defaultRealpath; var readPackage = opts.readPackage || defaultReadPackage; if (opts.readFile && opts.readPackage) { @@ -155110,10 +155942,10 @@ var require_async4 = __commonJS({ var packageIterator = opts.packageIterator; var extensions2 = opts.extensions || [".js"]; var includeCoreModules = opts.includeCoreModules !== false; - var basedir = opts.basedir || path19.dirname(caller()); + var basedir = opts.basedir || path20.dirname(caller()); var parent = opts.filename || basedir; opts.paths = opts.paths || defaultPaths(); - var absoluteStart = path19.resolve(basedir); + var absoluteStart = path20.resolve(basedir); maybeRealpath( realpath2, absoluteStart, @@ -155128,7 +155960,7 @@ var require_async4 = __commonJS({ var res; function init3(basedir2) { if (/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/.test(x)) { - res = path19.resolve(basedir2, x); + res = path20.resolve(basedir2, x); if (x === "." || x === ".." || x.slice(-1) === "/") res += "/"; if (/\/$/.test(x) && res === basedir2) { @@ -155197,19 +156029,19 @@ var require_async4 = __commonJS({ if (pkg) onpkg(null, pkg); else - loadpkg(path19.dirname(file), onpkg); + loadpkg(path20.dirname(file), onpkg); function onpkg(err4, pkg_, dir) { pkg = pkg_; if (err4) return cb2(err4); if (dir && pkg && opts.pathFilter) { - var rfile = path19.relative(dir, file); + var rfile = path20.relative(dir, file); var rel = rfile.slice(0, rfile.length - exts2[0].length); var r = opts.pathFilter(pkg, x3, rel); if (r) return load( [""].concat(extensions2.slice()), - path19.resolve(dir, r), + path20.resolve(dir, r), pkg ); } @@ -155234,12 +156066,12 @@ var require_async4 = __commonJS({ return cb2(null); maybeRealpath(realpath2, dir, opts, function(unwrapErr, pkgdir) { if (unwrapErr) - return loadpkg(path19.dirname(dir), cb2); - var pkgfile = path19.join(pkgdir, "package.json"); + return loadpkg(path20.dirname(dir), cb2); + var pkgfile = path20.join(pkgdir, "package.json"); isFile2(pkgfile, function(err4, ex) { if (!ex) - return loadpkg(path19.dirname(dir), cb2); - readPackage(readFile5, pkgfile, function(err5, pkgParam) { + return loadpkg(path20.dirname(dir), cb2); + readPackage(readFile6, pkgfile, function(err5, pkgParam) { if (err5) cb2(err5); var pkg = pkgParam; @@ -155261,13 +156093,13 @@ var require_async4 = __commonJS({ maybeRealpath(realpath2, x2, opts, function(unwrapErr, pkgdir) { if (unwrapErr) return cb2(unwrapErr); - var pkgfile = path19.join(pkgdir, "package.json"); + var pkgfile = path20.join(pkgdir, "package.json"); isFile2(pkgfile, function(err4, ex) { if (err4) return cb2(err4); if (!ex) - return loadAsFile(path19.join(x2, "index"), fpkg, cb2); - readPackage(readFile5, pkgfile, function(err5, pkgParam) { + return loadAsFile(path20.join(x2, "index"), fpkg, cb2); + readPackage(readFile6, pkgfile, function(err5, pkgParam) { if (err5) return cb2(err5); var pkg = pkgParam; @@ -155283,25 +156115,25 @@ var require_async4 = __commonJS({ if (pkg.main === "." || pkg.main === "./") { pkg.main = "index"; } - loadAsFile(path19.resolve(x2, pkg.main), pkg, function(err6, m, pkg2) { + loadAsFile(path20.resolve(x2, pkg.main), pkg, function(err6, m, pkg2) { if (err6) return cb2(err6); if (m) return cb2(null, m, pkg2); if (!pkg2) - return loadAsFile(path19.join(x2, "index"), pkg2, cb2); - var dir = path19.resolve(x2, pkg2.main); + return loadAsFile(path20.join(x2, "index"), pkg2, cb2); + var dir = path20.resolve(x2, pkg2.main); loadAsDirectory(dir, pkg2, function(err7, n, pkg3) { if (err7) return cb2(err7); if (n) return cb2(null, n, pkg3); - loadAsFile(path19.join(x2, "index"), pkg3, cb2); + loadAsFile(path20.join(x2, "index"), pkg3, cb2); }); }); return; } - loadAsFile(path19.join(x2, "/index"), pkg, cb2); + loadAsFile(path20.join(x2, "/index"), pkg, cb2); }); }); }); @@ -155310,7 +156142,7 @@ var require_async4 = __commonJS({ if (dirs.length === 0) return cb2(null, void 0); var dir = dirs[0]; - isDirectory(path19.dirname(dir), isdir); + isDirectory(path20.dirname(dir), isdir); function isdir(err4, isdir2) { if (err4) return cb2(err4); @@ -155581,7 +156413,7 @@ var require_sync2 = __commonJS({ "../node_modules/.pnpm/resolve@1.22.1/node_modules/resolve/lib/sync.js"(exports2, module2) { var isCore = require_is_core_module(); var fs7 = require("fs"); - var path19 = require("path"); + var path20 = require("path"); var getHomedir = require_homedir(); var caller = require_caller(); var nodeModulesPaths = require_node_modules_paths(); @@ -155590,8 +156422,8 @@ var require_sync2 = __commonJS({ var homedir2 = getHomedir(); var defaultPaths = function() { return [ - path19.join(homedir2, ".node_modules"), - path19.join(homedir2, ".node_libraries") + path20.join(homedir2, ".node_modules"), + path20.join(homedir2, ".node_libraries") ]; }; var defaultIsFile = function isFile2(file) { @@ -155641,7 +156473,7 @@ var require_sync2 = __commonJS({ var getPackageCandidates = function getPackageCandidates2(x, start4, opts) { var dirs = nodeModulesPaths(start4, opts, x); for (var i = 0; i < dirs.length; i++) { - dirs[i] = path19.join(dirs[i], x); + dirs[i] = path20.join(dirs[i], x); } return dirs; }; @@ -155661,12 +156493,12 @@ var require_sync2 = __commonJS({ var packageIterator = opts.packageIterator; var extensions2 = opts.extensions || [".js"]; var includeCoreModules = opts.includeCoreModules !== false; - var basedir = opts.basedir || path19.dirname(caller()); + var basedir = opts.basedir || path20.dirname(caller()); var parent = opts.filename || basedir; opts.paths = opts.paths || defaultPaths(); - var absoluteStart = maybeRealpathSync(realpathSync2, path19.resolve(basedir), opts); + var absoluteStart = maybeRealpathSync(realpathSync2, path20.resolve(basedir), opts); if (/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/.test(x)) { - var res = path19.resolve(absoluteStart, x); + var res = path20.resolve(absoluteStart, x); if (x === "." || x === ".." || x.slice(-1) === "/") res += "/"; var m = loadAsFileSync(res) || loadAsDirectorySync(res); @@ -155683,12 +156515,12 @@ var require_sync2 = __commonJS({ err3.code = "MODULE_NOT_FOUND"; throw err3; function loadAsFileSync(x2) { - var pkg = loadpkg(path19.dirname(x2)); + var pkg = loadpkg(path20.dirname(x2)); if (pkg && pkg.dir && pkg.pkg && opts.pathFilter) { - var rfile = path19.relative(pkg.dir, x2); + var rfile = path20.relative(pkg.dir, x2); var r = opts.pathFilter(pkg.pkg, x2, rfile); if (r) { - x2 = path19.resolve(pkg.dir, r); + x2 = path20.resolve(pkg.dir, r); } } if (isFile2(x2)) { @@ -155709,9 +156541,9 @@ var require_sync2 = __commonJS({ } if (/[/\\]node_modules[/\\]*$/.test(dir)) return; - var pkgfile = path19.join(maybeRealpathSync(realpathSync2, dir, opts), "package.json"); + var pkgfile = path20.join(maybeRealpathSync(realpathSync2, dir, opts), "package.json"); if (!isFile2(pkgfile)) { - return loadpkg(path19.dirname(dir)); + return loadpkg(path20.dirname(dir)); } var pkg = readPackageSync(readFileSync, pkgfile); if (pkg && opts.packageFilter) { @@ -155724,7 +156556,7 @@ var require_sync2 = __commonJS({ return { pkg, dir }; } function loadAsDirectorySync(x2) { - var pkgfile = path19.join(maybeRealpathSync(realpathSync2, x2, opts), "/package.json"); + var pkgfile = path20.join(maybeRealpathSync(realpathSync2, x2, opts), "/package.json"); if (isFile2(pkgfile)) { try { var pkg = readPackageSync(readFileSync, pkgfile); @@ -155747,17 +156579,17 @@ var require_sync2 = __commonJS({ pkg.main = "index"; } try { - var m2 = loadAsFileSync(path19.resolve(x2, pkg.main)); + var m2 = loadAsFileSync(path20.resolve(x2, pkg.main)); if (m2) return m2; - var n2 = loadAsDirectorySync(path19.resolve(x2, pkg.main)); + var n2 = loadAsDirectorySync(path20.resolve(x2, pkg.main)); if (n2) return n2; } catch (e) { } } } - return loadAsFileSync(path19.join(x2, "/index")); + return loadAsFileSync(path20.join(x2, "/index")); } function loadNodeModulesSync(x2, start4) { var thunk = function() { @@ -155766,7 +156598,7 @@ var require_sync2 = __commonJS({ var dirs = packageIterator ? packageIterator(x2, start4, thunk, opts) : thunk(); for (var i = 0; i < dirs.length; i++) { var dir = dirs[i]; - if (isDirectory(path19.dirname(dir))) { + if (isDirectory(path20.dirname(dir))) { var m2 = loadAsFileSync(dir); if (m2) return m2; @@ -155795,9 +156627,9 @@ var require_resolve = __commonJS({ var require_module_details_from_path = __commonJS({ "../node_modules/.pnpm/module-details-from-path@1.0.3/node_modules/module-details-from-path/index.js"(exports2, module2) { "use strict"; - var path19 = require("path"); + var path20 = require("path"); module2.exports = function(file) { - var segments = file.split(path19.sep); + var segments = file.split(path20.sep); var index = segments.lastIndexOf("node_modules"); if (index === -1) return; @@ -155808,8 +156640,8 @@ var require_module_details_from_path = __commonJS({ var offset = scoped ? 3 : 2; return { name, - basedir: segments.slice(0, index + offset).join(path19.sep), - path: segments.slice(index + offset).join(path19.sep) + basedir: segments.slice(0, index + offset).join(path20.sep), + path: segments.slice(index + offset).join(path20.sep) }; }; } @@ -155883,7 +156715,7 @@ var require_package = __commonJS({ var require_require_in_the_middle = __commonJS({ "../node_modules/.pnpm/require-in-the-middle@7.2.0/node_modules/require-in-the-middle/index.js"(exports2, module2) { "use strict"; - var path19 = require("path"); + var path20 = require("path"); var Module2 = require("module"); var resolve8 = require_resolve(); var debug = require_src3()("require-in-the-middle"); @@ -156014,7 +156846,7 @@ var require_require_in_the_middle = __commonJS({ } moduleName2 = filename; } else if (hasWhitelist === true && modules.includes(filename)) { - const parsedPath = path19.parse(filename); + const parsedPath = path20.parse(filename); moduleName2 = parsedPath.name; basedir = parsedPath.dir; } else { @@ -156042,7 +156874,7 @@ var require_require_in_the_middle = __commonJS({ } if (res !== filename) { if (internals === true) { - moduleName2 = moduleName2 + path19.sep + path19.relative(basedir, filename); + moduleName2 = moduleName2 + path20.sep + path20.relative(basedir, filename); debug("preparing to process require of internal file: %s", moduleName2); } else { debug("ignoring require of non-main module file: %s", res); @@ -156070,8 +156902,8 @@ var require_require_in_the_middle = __commonJS({ } }; function resolveModuleName(stat7) { - const normalizedPath = path19.sep !== "/" ? stat7.path.split(path19.sep).join("/") : stat7.path; - return path19.posix.join(stat7.name, normalizedPath).replace(normalize5, ""); + const normalizedPath = path20.sep !== "/" ? stat7.path.split(path20.sep).join("/") : stat7.path; + return path20.posix.join(stat7.name, normalizedPath).replace(normalize5, ""); } } }); @@ -156160,7 +156992,7 @@ var require_RequireInTheMiddleSingleton = __commonJS({ Object.defineProperty(exports2, "__esModule", { value: true }); exports2.RequireInTheMiddleSingleton = void 0; var require_in_the_middle_1 = require_require_in_the_middle(); - var path19 = require("path"); + var path20 = require("path"); var ModuleNameTrie_1 = require_ModuleNameTrie(); var isMocha = [ "afterEach", @@ -156224,7 +157056,7 @@ var require_RequireInTheMiddleSingleton = __commonJS({ }; exports2.RequireInTheMiddleSingleton = RequireInTheMiddleSingleton; function normalizePathSeparators(moduleNameOrPath) { - return path19.sep !== ModuleNameTrie_1.ModuleNameSeparator ? moduleNameOrPath.split(path19.sep).join(ModuleNameTrie_1.ModuleNameSeparator) : moduleNameOrPath; + return path20.sep !== ModuleNameTrie_1.ModuleNameSeparator ? moduleNameOrPath.split(path20.sep).join(ModuleNameTrie_1.ModuleNameSeparator) : moduleNameOrPath; } } }); @@ -156264,7 +157096,7 @@ var require_register = __commonJS({ // ../node_modules/.pnpm/import-in-the-middle@1.4.2/node_modules/import-in-the-middle/index.js var require_import_in_the_middle = __commonJS({ "../node_modules/.pnpm/import-in-the-middle@1.4.2/node_modules/import-in-the-middle/index.js"(exports2, module2) { - var path19 = require("path"); + var path20 = require("path"); var parse7 = require_module_details_from_path(); var { fileURLToPath: fileURLToPath3 } = require("url"); var { @@ -156324,7 +157156,7 @@ var require_import_in_the_middle = __commonJS({ if (moduleName2 === name) { if (baseDir) { if (internals) { - name = name + path19.sep + path19.relative(baseDir, fileURLToPath3(filename)); + name = name + path20.sep + path20.relative(baseDir, fileURLToPath3(filename)); } else { if (!baseDir.endsWith(specifiers.get(filename))) continue; @@ -156354,7 +157186,7 @@ var require_instrumentation2 = __commonJS({ "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.InstrumentationBase = void 0; - var path19 = require("path"); + var path20 = require("path"); var util_1 = require("util"); var semver_1 = require_semver3(); var shimmer_1 = require_shimmer(); @@ -156448,7 +157280,7 @@ var require_instrumentation2 = __commonJS({ } _extractPackageVersion(baseDir) { try { - const version5 = require(path19.join(baseDir, "package.json")).version; + const version5 = require(path20.join(baseDir, "package.json")).version; return typeof version5 === "string" ? version5 : void 0; } catch (error) { api_1.diag.warn("Failed extracting version", baseDir); @@ -156515,7 +157347,7 @@ var require_instrumentation2 = __commonJS({ const onRequire = (exports3, name, baseDir) => { return this._onRequire(module3, exports3, name, baseDir); }; - const hook = path19.isAbsolute(module3.name) ? new require_in_the_middle_1.Hook([module3.name], { internals: true }, onRequire) : this._requireInTheMiddleSingleton.register(module3.name, onRequire); + const hook = path20.isAbsolute(module3.name) ? new require_in_the_middle_1.Hook([module3.name], { internals: true }, onRequire) : this._requireInTheMiddleSingleton.register(module3.name, onRequire); this._hooks.push(hook); const esmHook = new ImportInTheMiddle([module3.name], { internals: false }, hookFn); this._hooks.push(esmHook); @@ -170839,19 +171671,19 @@ var require_uri_parser = __commonJS({ } exports2.parseUri = parseUri; var NUMBER_REGEX = /^\d+$/; - function splitHostPort(path19) { - if (path19.startsWith("[")) { - const hostEnd = path19.indexOf("]"); + function splitHostPort(path20) { + if (path20.startsWith("[")) { + const hostEnd = path20.indexOf("]"); if (hostEnd === -1) { return null; } - const host = path19.substring(1, hostEnd); + const host = path20.substring(1, hostEnd); if (host.indexOf(":") === -1) { return null; } - if (path19.length > hostEnd + 1) { - if (path19[hostEnd + 1] === ":") { - const portString = path19.substring(hostEnd + 2); + if (path20.length > hostEnd + 1) { + if (path20[hostEnd + 1] === ":") { + const portString = path20.substring(hostEnd + 2); if (NUMBER_REGEX.test(portString)) { return { host, @@ -170869,7 +171701,7 @@ var require_uri_parser = __commonJS({ }; } } else { - const splitPath = path19.split(":"); + const splitPath = path20.split(":"); if (splitPath.length === 2) { if (NUMBER_REGEX.test(splitPath[1])) { return { @@ -170881,7 +171713,7 @@ var require_uri_parser = __commonJS({ } } else { return { - host: path19 + host: path20 }; } } @@ -171977,14 +172809,14 @@ var require_client_interceptors = __commonJS({ } }; exports2.InterceptingCall = InterceptingCall; - function getCall(channel, path19, options2) { + function getCall(channel, path20, options2) { var _a, _b; const deadline = (_a = options2.deadline) !== null && _a !== void 0 ? _a : Infinity; const host = options2.host; const parent = (_b = options2.parent) !== null && _b !== void 0 ? _b : null; const propagateFlags = options2.propagate_flags; const credentials = options2.credentials; - const call = channel.createCall(path19, deadline, host, parent, propagateFlags); + const call = channel.createCall(path20, deadline, host, parent, propagateFlags); if (credentials) { call.setCredentials(credentials); } @@ -172550,9 +173382,9 @@ var require_make_client = __commonJS({ return ServiceClientImpl; } exports2.makeClientConstructor = makeClientConstructor; - function partial(fn, path19, serialize, deserialize) { + function partial(fn, path20, serialize, deserialize) { return function(...args3) { - return fn.call(this, path19, serialize, deserialize, ...args3); + return fn.call(this, path20, serialize, deserialize, ...args3); }; } function isProtobufTypeDefinition(obj2) { @@ -173080,15 +173912,15 @@ var require_fetch2 = __commonJS({ var require_path2 = __commonJS({ "../node_modules/.pnpm/@protobufjs+path@1.1.2/node_modules/@protobufjs/path/index.js"(exports2) { "use strict"; - var path19 = exports2; + var path20 = exports2; var isAbsolute = ( /** * Tests if the specified path is absolute. * @param {string} path Path to test * @returns {boolean} `true` if path is absolute */ - path19.isAbsolute = function isAbsolute2(path20) { - return /^(?:\/|\w+:)/.test(path20); + path20.isAbsolute = function isAbsolute2(path21) { + return /^(?:\/|\w+:)/.test(path21); } ); var normalize5 = ( @@ -173097,9 +173929,9 @@ var require_path2 = __commonJS({ * @param {string} path Path to normalize * @returns {string} Normalized path */ - path19.normalize = function normalize6(path20) { - path20 = path20.replace(/\\/g, "/").replace(/\/{2,}/g, "/"); - var parts = path20.split("/"), absolute = isAbsolute(path20), prefix = ""; + path20.normalize = function normalize6(path21) { + path21 = path21.replace(/\\/g, "/").replace(/\/{2,}/g, "/"); + var parts = path21.split("/"), absolute = isAbsolute(path21), prefix = ""; if (absolute) prefix = parts.shift() + "/"; for (var i = 0; i < parts.length; ) { @@ -173118,7 +173950,7 @@ var require_path2 = __commonJS({ return prefix + parts.join("/"); } ); - path19.resolve = function resolve8(originPath, includePath, alreadyNormalized) { + path20.resolve = function resolve8(originPath, includePath, alreadyNormalized) { if (!alreadyNormalized) includePath = normalize5(includePath); if (isAbsolute(includePath)) @@ -173677,16 +174509,16 @@ var require_namespace = __commonJS({ object.onRemove(this); return clearCache(this); }; - Namespace.prototype.define = function define2(path19, json2) { - if (util2.isString(path19)) - path19 = path19.split("."); - else if (!Array.isArray(path19)) + Namespace.prototype.define = function define2(path20, json2) { + if (util2.isString(path20)) + path20 = path20.split("."); + else if (!Array.isArray(path20)) throw TypeError("illegal path"); - if (path19 && path19.length && path19[0] === "") + if (path20 && path20.length && path20[0] === "") throw Error("path must be relative"); var ptr = this; - while (path19.length > 0) { - var part = path19.shift(); + while (path20.length > 0) { + var part = path20.shift(); if (ptr.nested && ptr.nested[part]) { ptr = ptr.nested[part]; if (!(ptr instanceof Namespace)) @@ -173707,57 +174539,57 @@ var require_namespace = __commonJS({ nested[i++].resolve(); return this.resolve(); }; - Namespace.prototype.lookup = function lookup(path19, filterTypes, parentAlreadyChecked) { + Namespace.prototype.lookup = function lookup(path20, filterTypes, parentAlreadyChecked) { if (typeof filterTypes === "boolean") { parentAlreadyChecked = filterTypes; filterTypes = void 0; } else if (filterTypes && !Array.isArray(filterTypes)) filterTypes = [filterTypes]; - if (util2.isString(path19) && path19.length) { - if (path19 === ".") + if (util2.isString(path20) && path20.length) { + if (path20 === ".") return this.root; - path19 = path19.split("."); - } else if (!path19.length) + path20 = path20.split("."); + } else if (!path20.length) return this; - if (path19[0] === "") - return this.root.lookup(path19.slice(1), filterTypes); - var found = this.get(path19[0]); + if (path20[0] === "") + return this.root.lookup(path20.slice(1), filterTypes); + var found = this.get(path20[0]); if (found) { - if (path19.length === 1) { + if (path20.length === 1) { if (!filterTypes || filterTypes.indexOf(found.constructor) > -1) return found; - } else if (found instanceof Namespace && (found = found.lookup(path19.slice(1), filterTypes, true))) + } else if (found instanceof Namespace && (found = found.lookup(path20.slice(1), filterTypes, true))) return found; } else for (var i = 0; i < this.nestedArray.length; ++i) - if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i].lookup(path19, filterTypes, true))) + if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i].lookup(path20, filterTypes, true))) return found; if (this.parent === null || parentAlreadyChecked) return null; - return this.parent.lookup(path19, filterTypes); + return this.parent.lookup(path20, filterTypes); }; - Namespace.prototype.lookupType = function lookupType(path19) { - var found = this.lookup(path19, [Type]); + Namespace.prototype.lookupType = function lookupType(path20) { + var found = this.lookup(path20, [Type]); if (!found) - throw Error("no such type: " + path19); + throw Error("no such type: " + path20); return found; }; - Namespace.prototype.lookupEnum = function lookupEnum(path19) { - var found = this.lookup(path19, [Enum]); + Namespace.prototype.lookupEnum = function lookupEnum(path20) { + var found = this.lookup(path20, [Enum]); if (!found) - throw Error("no such Enum '" + path19 + "' in " + this); + throw Error("no such Enum '" + path20 + "' in " + this); return found; }; - Namespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path19) { - var found = this.lookup(path19, [Type, Enum]); + Namespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path20) { + var found = this.lookup(path20, [Type, Enum]); if (!found) - throw Error("no such Type or Enum '" + path19 + "' in " + this); + throw Error("no such Type or Enum '" + path20 + "' in " + this); return found; }; - Namespace.prototype.lookupService = function lookupService(path19) { - var found = this.lookup(path19, [Service]); + Namespace.prototype.lookupService = function lookupService(path20) { + var found = this.lookup(path20, [Service]); if (!found) - throw Error("no such Service '" + path19 + "' in " + this); + throw Error("no such Service '" + path20 + "' in " + this); return found; }; Namespace._configure = function(Type_, Service_, Enum_) { @@ -175101,14 +175933,14 @@ var require_util11 = __commonJS({ Object.defineProperty(object, "$type", { value: enm, enumerable: false }); return enm; }; - util2.setProperty = function setProperty(dst, path19, value) { - function setProp(dst2, path20, value2) { - var part = path20.shift(); + util2.setProperty = function setProperty(dst, path20, value) { + function setProp(dst2, path21, value2) { + var part = path21.shift(); if (part === "__proto__" || part === "prototype") { return dst2; } - if (path20.length > 0) { - dst2[part] = setProp(dst2[part] || {}, path20, value2); + if (path21.length > 0) { + dst2[part] = setProp(dst2[part] || {}, path21, value2); } else { var prevValue = dst2[part]; if (prevValue) @@ -175119,10 +175951,10 @@ var require_util11 = __commonJS({ } if (typeof dst !== "object") throw TypeError("dst must be an object"); - if (!path19) + if (!path20) throw TypeError("path must be specified"); - path19 = path19.split("."); - return setProp(dst, path19, value); + path20 = path20.split("."); + return setProp(dst, path20, value); }; Object.defineProperty(util2, "decorateRoot", { get: function() { @@ -175176,12 +176008,12 @@ var require_object2 = __commonJS({ */ fullName: { get: function() { - var path19 = [this.name], ptr = this.parent; + var path20 = [this.name], ptr = this.parent; while (ptr) { - path19.unshift(ptr.name); + path20.unshift(ptr.name); ptr = ptr.parent; } - return path19.join("."); + return path20.join("."); } } }); @@ -178293,16 +179125,16 @@ var require_util12 = __commonJS({ Object.defineProperty(exports2, "__esModule", { value: true }); exports2.addCommonProtos = exports2.loadProtosWithOptionsSync = exports2.loadProtosWithOptions = void 0; var fs7 = require("fs"); - var path19 = require("path"); + var path20 = require("path"); var Protobuf = require_protobufjs(); function addIncludePathResolver(root, includePaths) { const originalResolvePath = root.resolvePath; root.resolvePath = (origin, target) => { - if (path19.isAbsolute(target)) { + if (path20.isAbsolute(target)) { return target; } for (const directory of includePaths) { - const fullPath = path19.join(directory, target); + const fullPath = path20.join(directory, target); try { fs7.accessSync(fullPath, fs7.constants.R_OK); return fullPath; @@ -184684,12 +185516,12 @@ var require_server = __commonJS({ return true; } _retrieveHandler(headers) { - const path19 = headers[HTTP2_HEADER_PATH]; - this.trace("Received call to method " + path19 + " at address " + this.serverAddressString); - const handler = this.handlers.get(path19); + const path20 = headers[HTTP2_HEADER_PATH]; + this.trace("Received call to method " + path20 + " at address " + this.serverAddressString); + const handler = this.handlers.get(path20); if (handler === void 0) { - this.trace("No handler registered for method " + path19 + ". Sending UNIMPLEMENTED status."); - throw getUnimplementedStatusResponse(path19); + this.trace("No handler registered for method " + path20 + ". Sending UNIMPLEMENTED status."); + throw getUnimplementedStatusResponse(path20); } return handler; } @@ -185886,13 +186718,13 @@ var require_resolver_uds = __commonJS({ constructor(target, listener, channelOptions) { this.listener = listener; this.addresses = []; - let path19; + let path20; if (target.authority === "") { - path19 = "/" + target.path; + path20 = "/" + target.path; } else { - path19 = target.path; + path20 = target.path; } - this.addresses = [{ path: path19 }]; + this.addresses = [{ path: path20 }]; } updateResolution() { process.nextTick(this.listener.onSuccessfulResolution, this.addresses, null, null, null, {}); @@ -185946,12 +186778,12 @@ var require_resolver_ip = __commonJS({ return; } const pathList = target.path.split(","); - for (const path19 of pathList) { - const hostPort = (0, uri_parser_1.splitHostPort)(path19); + for (const path20 of pathList) { + const hostPort = (0, uri_parser_1.splitHostPort)(path20); if (hostPort === null) { this.error = { code: constants_12.Status.UNAVAILABLE, - details: `Failed to parse ${target.scheme} address ${path19}`, + details: `Failed to parse ${target.scheme} address ${path20}`, metadata: new metadata_1.Metadata() }; return; @@ -185959,7 +186791,7 @@ var require_resolver_ip = __commonJS({ if (target.scheme === IPV4_SCHEME && !(0, net_1.isIPv4)(hostPort.host) || target.scheme === IPV6_SCHEME && !(0, net_1.isIPv6)(hostPort.host)) { this.error = { code: constants_12.Status.UNAVAILABLE, - details: `Failed to parse ${target.scheme} address ${path19}`, + details: `Failed to parse ${target.scheme} address ${path20}`, metadata: new metadata_1.Metadata() }; return; @@ -194438,7 +195270,7 @@ var require_util13 = __commonJS({ var grpc = require_src25(); var api_1 = require_src(); var core_1 = require_src5(); - var path19 = require("path"); + var path20 = require("path"); var url_1 = require("url"); var fs7 = require("fs"); var types_1 = require_types21(); @@ -194556,7 +195388,7 @@ var require_util13 = __commonJS({ const rootCertificate = (0, core_1.getEnv)().OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE || (0, core_1.getEnv)().OTEL_EXPORTER_OTLP_CERTIFICATE; if (rootCertificate) { try { - return fs7.readFileSync(path19.resolve(process.cwd(), rootCertificate)); + return fs7.readFileSync(path20.resolve(process.cwd(), rootCertificate)); } catch (_a) { api_1.diag.warn("Failed to read root certificate file"); return void 0; @@ -194569,7 +195401,7 @@ var require_util13 = __commonJS({ const clientKey = (0, core_1.getEnv)().OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY || (0, core_1.getEnv)().OTEL_EXPORTER_OTLP_CLIENT_KEY; if (clientKey) { try { - return fs7.readFileSync(path19.resolve(process.cwd(), clientKey)); + return fs7.readFileSync(path20.resolve(process.cwd(), clientKey)); } catch (_a) { api_1.diag.warn("Failed to read client certificate private key file"); return void 0; @@ -194582,7 +195414,7 @@ var require_util13 = __commonJS({ const clientChain = (0, core_1.getEnv)().OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE || (0, core_1.getEnv)().OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE; if (clientChain) { try { - return fs7.readFileSync(path19.resolve(process.cwd(), clientChain)); + return fs7.readFileSync(path20.resolve(process.cwd(), clientChain)); } catch (_a) { api_1.diag.warn("Failed to read client certificate chain file"); return void 0; @@ -195662,19 +196494,19 @@ ${text}` : ""; }); // ../vscode/src/services/open-telemetry/OpenTelemetryService.node.ts -var import_api3, import_exporter_trace_otlp_http, import_instrumentation_http, import_resources, import_sdk_node, import_sdk_trace_base2, import_semantic_conventions, OpenTelemetryService; +var import_api5, import_exporter_trace_otlp_http, import_instrumentation_http, import_resources, import_sdk_node, import_semantic_conventions, import_sdk_trace_base2, OpenTelemetryService; var init_OpenTelemetryService_node = __esm({ "../vscode/src/services/open-telemetry/OpenTelemetryService.node.ts"() { "use strict"; - import_api3 = __toESM(require_src()); + import_api5 = __toESM(require_src()); import_exporter_trace_otlp_http = __toESM(require_src10()); import_instrumentation_http = __toESM(require_src13()); import_resources = __toESM(require_src7()); import_sdk_node = __toESM(require_src29()); - import_sdk_trace_base2 = __toESM(require_src18()); import_semantic_conventions = __toESM(require_src4()); init_src(); init_version(); + import_sdk_trace_base2 = __toESM(require_src18()); init_console_batch_span_exporter(); OpenTelemetryService = class { constructor(config) { @@ -195700,7 +196532,7 @@ var init_OpenTelemetryService_node = __esm({ return; } this.lastTraceUrl = traceUrl; - import_api3.diag.setLogger(new import_api3.DiagConsoleLogger(), import_api3.DiagLogLevel.ERROR); + import_api5.diag.setLogger(new import_api5.DiagConsoleLogger(), import_api5.DiagLogLevel.ERROR); await this.sdk?.shutdown(); this.sdk = void 0; this.sdk = new import_sdk_node.NodeSDK({ @@ -195709,9 +196541,9 @@ var init_OpenTelemetryService_node = __esm({ [import_semantic_conventions.SemanticResourceAttributes.SERVICE_VERSION]: version2 }), instrumentations: [new import_instrumentation_http.HttpInstrumentation()], - traceExporter: new import_exporter_trace_otlp_http.OTLPTraceExporter({ - url: traceUrl - }), + traceExporter: new import_exporter_trace_otlp_http.OTLPTraceExporter({ url: traceUrl }), + // Disable default process logging. We do not care about the VS Code extension process + autoDetectResources: false, ...process.env.NODE_ENV === "development" && { spanProcessor: new import_sdk_trace_base2.BatchSpanProcessor(new ConsoleBatchSpanExporter()) } @@ -198530,7 +199362,7 @@ var require_promisify2 = __commonJS({ "../node_modules/.pnpm/agent-base@6.0.2/node_modules/agent-base/dist/src/promisify.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); - function promisify5(fn) { + function promisify6(fn) { return function(req, opts) { return new Promise((resolve8, reject) => { fn.call(this, req, opts, (err3, rtn) => { @@ -198543,7 +199375,7 @@ var require_promisify2 = __commonJS({ }); }; } - exports2.default = promisify5; + exports2.default = promisify6; } }); @@ -199499,16 +200331,16 @@ var require_http4 = __commonJS({ const protocol2 = requestOptions.protocol || ""; const hostname = requestOptions.hostname || requestOptions.host || ""; const port = !requestOptions.port || requestOptions.port === 80 || requestOptions.port === 443 ? "" : `:${requestOptions.port}`; - const path19 = requestOptions.path ? requestOptions.path : "/"; - return `${protocol2}//${hostname}${port}${path19}`; + const path20 = requestOptions.path ? requestOptions.path : "/"; + return `${protocol2}//${hostname}${port}${path20}`; } function extractUrl(requestOptions) { const protocol2 = requestOptions.protocol || ""; const hostname = requestOptions.hostname || requestOptions.host || ""; const port = !requestOptions.port || requestOptions.port === 80 || requestOptions.port === 443 ? "" : `:${requestOptions.port}`; - const path19 = requestOptions.pathname || "/"; + const path20 = requestOptions.pathname || "/"; const authority = requestOptions.auth ? redactAuthority(requestOptions.auth) : ""; - return `${protocol2}//${authority}${hostname}${port}${path19}`; + return `${protocol2}//${authority}${hostname}${port}${path20}`; } function redactAuthority(auth) { const [user, password] = auth.split(":"); @@ -200050,9 +200882,9 @@ var require_contextlines = __commonJS({ var lru_map = require_lru(); var FILE_CONTENT_CACHE = new lru_map.LRUMap(100); var DEFAULT_LINES_OF_CONTEXT = 7; - function readTextFileAsync(path19) { + function readTextFileAsync(path20) { return new Promise((resolve8, reject) => { - fs7.readFile(path19, "utf8", (err3, data) => { + fs7.readFile(path20, "utf8", (err3, data) => { if (err3) reject(err3); else @@ -200235,7 +201067,7 @@ var require_modules = __commonJS({ "../node_modules/.pnpm/@sentry+node@7.66.0/node_modules/@sentry/node/cjs/integrations/modules.js"(exports2) { Object.defineProperty(exports2, "__esModule", { value: true }); var fs7 = require("fs"); - var path19 = require("path"); + var path20 = require("path"); var moduleCache; function getPaths() { try { @@ -200253,14 +201085,14 @@ var require_modules = __commonJS({ let dir = path$1; const updir = () => { const orig = dir; - dir = path19.dirname(orig); + dir = path20.dirname(orig); if (!dir || orig === dir || seen[orig]) { return void 0; } if (mainPaths.indexOf(dir) < 0) { return updir(); } - const pkgfile = path19.join(orig, "package.json"); + const pkgfile = path20.join(orig, "package.json"); seen[orig] = true; if (!fs7.existsSync(pkgfile)) { return updir(); @@ -200331,7 +201163,7 @@ var require_context4 = __commonJS({ var child_process2 = require("child_process"); var fs7 = require("fs"); var os8 = require("os"); - var path19 = require("path"); + var path20 = require("path"); var util2 = require("util"); var readFileAsync = util2.promisify(fs7.readFile); var readDirAsync = util2.promisify(fs7.readdir); @@ -200557,7 +201389,7 @@ var require_context4 = __commonJS({ if (!distroFile) { return linuxInfo; } - const distroPath = path19.join("/etc", distroFile.name); + const distroPath = path20.join("/etc", distroFile.name); const contents = (await readFileAsync(distroPath, { encoding: "utf-8" })).toLowerCase(); const { distros } = distroFile; linuxInfo.name = distros.find((d) => contents.indexOf(getLinuxDistroId(d)) >= 0) || distros[0]; @@ -200759,13 +201591,13 @@ var require_requestdata2 = __commonJS({ var DEFAULT_USER_INCLUDES = ["id", "username", "email"]; function extractPathForTransaction(req, options2 = {}) { const method = req.method && req.method.toUpperCase(); - let path19 = ""; + let path20 = ""; let source = "url"; if (options2.customRoute || req.route) { - path19 = options2.customRoute || `${req.baseUrl || ""}${req.route && req.route.path}`; + path20 = options2.customRoute || `${req.baseUrl || ""}${req.route && req.route.path}`; source = "route"; } else if (req.originalUrl || req.url) { - path19 = utils.stripUrlQueryAndFragment(req.originalUrl || req.url || ""); + path20 = utils.stripUrlQueryAndFragment(req.originalUrl || req.url || ""); } let name = ""; if (options2.method && method) { @@ -200774,8 +201606,8 @@ var require_requestdata2 = __commonJS({ if (options2.method && options2.path) { name += " "; } - if (options2.path && path19) { - name += path19; + if (options2.path && path20) { + name += path20; } return [name, source]; } @@ -201562,17 +202394,17 @@ var require_undici = __commonJS({ var require_module = __commonJS({ "../node_modules/.pnpm/@sentry+node@7.66.0/node_modules/@sentry/node/cjs/module.js"(exports2) { Object.defineProperty(exports2, "__esModule", { value: true }); - var path19 = require("path"); - var isWindowsPlatform = path19.sep === "\\"; - function normalizeWindowsPath(path20) { - return path20.replace(/^[A-Z]:/, "").replace(/\\/g, "/"); + var path20 = require("path"); + var isWindowsPlatform = path20.sep === "\\"; + function normalizeWindowsPath(path21) { + return path21.replace(/^[A-Z]:/, "").replace(/\\/g, "/"); } function getModuleFromFilename(filename, normalizeWindowsPathSeparator = isWindowsPlatform) { if (!filename) { return; } const normalizedFilename = normalizeWindowsPathSeparator ? normalizeWindowsPath(filename) : filename; - let { root, dir, base: basename4, ext: ext2 } = path19.posix.parse(normalizedFilename); + let { root, dir, base: basename4, ext: ext2 } = path20.posix.parse(normalizedFilename); const base = require && require.main && require.main.filename && dir || global.process.cwd(); const normalizedBase = `${base}/`; let file = basename4; @@ -201750,9 +202582,9 @@ var require_utils16 = __commonJS({ "../node_modules/.pnpm/@sentry+node@7.66.0/node_modules/@sentry/node/cjs/utils.js"(exports2) { Object.defineProperty(exports2, "__esModule", { value: true }); var fs7 = require("fs"); - var path19 = require("path"); + var path20 = require("path"); function deepReadDirSync(targetDir) { - const targetDirAbsPath = path19.resolve(targetDir); + const targetDirAbsPath = path20.resolve(targetDir); if (!fs7.existsSync(targetDirAbsPath)) { throw new Error(`Cannot read contents of ${targetDirAbsPath}. Directory does not exist.`); } @@ -201761,7 +202593,7 @@ var require_utils16 = __commonJS({ } const deepReadCurrentDir = (currentDirAbsPath) => { return fs7.readdirSync(currentDirAbsPath).reduce((absPaths, itemName) => { - const itemAbsPath = path19.join(currentDirAbsPath, itemName); + const itemAbsPath = path20.join(currentDirAbsPath, itemName); if (fs7.statSync(itemAbsPath).isDirectory()) { return absPaths.concat(deepReadCurrentDir(itemAbsPath)); } @@ -201769,7 +202601,7 @@ var require_utils16 = __commonJS({ return absPaths; }, []); }; - return deepReadCurrentDir(targetDirAbsPath).map((absPath) => path19.relative(targetDirAbsPath, absPath)); + return deepReadCurrentDir(targetDirAbsPath).map((absPath) => path20.relative(targetDirAbsPath, absPath)); } exports2.deepReadDirSync = deepReadDirSync; } @@ -201961,12 +202793,12 @@ var require_handlers = __commonJS({ }; } function trpcMiddleware(options2 = {}) { - return function({ path: path19, type, next, rawInput }) { + return function({ path: path20, type, next, rawInput }) { const hub = core.getCurrentHub(); const clientOptions = _optionalChain([hub, "access", (_13) => _13.getClient, "call", (_14) => _14(), "optionalAccess", (_15) => _15.getOptions, "call", (_16) => _16()]); const sentryTransaction = hub.getScope().getTransaction(); if (sentryTransaction) { - sentryTransaction.setName(`trpc/${path19}`, "route"); + sentryTransaction.setName(`trpc/${path20}`, "route"); sentryTransaction.op = "rpc.server"; const trpcContext = { procedure_type: type @@ -202118,206 +202950,585 @@ var init_sentry_node = __esm({ } }); -// ../vscode/src/commands/menus/types.ts -var init_types2 = __esm({ - "../vscode/src/commands/menus/types.ts"() { +// ../node_modules/.pnpm/parse-diff@0.11.1/node_modules/parse-diff/index.js +var require_parse_diff = __commonJS({ + "../node_modules/.pnpm/parse-diff@0.11.1/node_modules/parse-diff/index.js"(exports2, module2) { "use strict"; - } -}); - -// ../vscode/src/commands/menus/items/buttons.ts -var openIconButton, trashIconButton, gearIconButton, backIconButton, CommandMenuButtons; -var init_buttons = __esm({ - "../vscode/src/commands/menus/items/buttons.ts"() { - "use strict"; - init_vscode_shim(); - init_types2(); - openIconButton = { - iconPath: new ThemeIcon("go-to-file"), - tooltip: "Open or Create Settings File", - id: "open" /* Open */, - command: "cody.commands.open.json" + function _typeof(obj2) { + "@babel/helpers - typeof"; + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj3) { + return typeof obj3; + } : function(obj3) { + return obj3 && "function" == typeof Symbol && obj3.constructor === Symbol && obj3 !== Symbol.prototype ? "symbol" : typeof obj3; + }, _typeof(obj2); + } + function _createForOfIteratorHelper(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (!it) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) + o = it; + var i = 0; + var F = function F2() { + }; + return { s: F, n: function n() { + if (i >= o.length) + return { done: true }; + return { done: false, value: o[i++] }; + }, e: function e(_e2) { + throw _e2; + }, f: F }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var normalCompletion = true, didErr = false, err3; + return { s: function s() { + it = it.call(o); + }, n: function n() { + var step = it.next(); + normalCompletion = step.done; + return step; + }, e: function e(_e3) { + didErr = true; + err3 = _e3; + }, f: function f() { + try { + if (!normalCompletion && it["return"] != null) + it["return"](); + } finally { + if (didErr) + throw err3; + } + } }; + } + function _defineProperty(obj2, key, value) { + key = _toPropertyKey(key); + if (key in obj2) { + Object.defineProperty(obj2, key, { value, enumerable: true, configurable: true, writable: true }); + } else { + obj2[key] = value; + } + return obj2; + } + function _toPropertyKey(arg) { + var key = _toPrimitive(arg, "string"); + return _typeof(key) === "symbol" ? key : String(key); + } + function _toPrimitive(input, hint) { + if (_typeof(input) !== "object" || input === null) + return input; + var prim = input[Symbol.toPrimitive]; + if (prim !== void 0) { + var res = prim.call(input, hint || "default"); + if (_typeof(res) !== "object") + return res; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return (hint === "string" ? String : Number)(input); + } + function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); + } + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) + return; + if (typeof o === "string") + return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) + n = o.constructor.name; + if (n === "Map" || n === "Set") + return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) + return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) + len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) { + arr2[i] = arr[i]; + } + return arr2; + } + function _iterableToArrayLimit(arr, i) { + var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; + if (null != _i) { + var _s, _e, _x, _r, _arr = [], _n = true, _d = false; + try { + if (_x = (_i = _i.call(arr)).next, 0 === i) { + if (Object(_i) !== _i) + return; + _n = false; + } else + for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = true) { + ; + } + } catch (err3) { + _d = true, _e = err3; + } finally { + try { + if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) + return; + } finally { + if (_d) + throw _e; + } + } + return _arr; + } + } + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) + return arr; + } + module2.exports = function(input) { + if (!input) + return []; + if (typeof input !== "string" || input.match(/^\s+$/)) + return []; + var lines2 = input.split("\n"); + if (lines2.length === 0) + return []; + var files = []; + var currentFile = null; + var currentChunk = null; + var deletedLineCounter = 0; + var addedLineCounter = 0; + var currentFileChanges = null; + var normal = function normal2(line2) { + var _currentChunk; + (_currentChunk = currentChunk) === null || _currentChunk === void 0 ? void 0 : _currentChunk.changes.push({ type: "normal", normal: true, ln1: deletedLineCounter++, ln2: addedLineCounter++, content: line2 }); + currentFileChanges.oldLines--; + currentFileChanges.newLines--; + }; + var start4 = function start5(line2) { + var _parseFiles; + var _ref = (_parseFiles = parseFiles(line2)) !== null && _parseFiles !== void 0 ? _parseFiles : [], _ref2 = _slicedToArray(_ref, 2), fromFileName = _ref2[0], toFileName = _ref2[1]; + currentFile = { chunks: [], deletions: 0, additions: 0, from: fromFileName, to: toFileName }; + files.push(currentFile); + }; + var restart = function restart2() { + if (!currentFile || currentFile.chunks.length) + start4(); + }; + var newFile = function newFile2(_, match2) { + restart(); + currentFile["new"] = true; + currentFile.newMode = match2[1]; + currentFile.from = "/dev/null"; + }; + var deletedFile = function deletedFile2(_, match2) { + restart(); + currentFile.deleted = true; + currentFile.oldMode = match2[1]; + currentFile.to = "/dev/null"; + }; + var oldMode = function oldMode2(_, match2) { + restart(); + currentFile.oldMode = match2[1]; + }; + var newMode = function newMode2(_, match2) { + restart(); + currentFile.newMode = match2[1]; + }; + var index = function index2(line2, match2) { + restart(); + currentFile.index = line2.split(" ").slice(1); + if (match2[1]) { + currentFile.oldMode = currentFile.newMode = match2[1].trim(); + } + }; + var fromFile = function fromFile2(line2) { + restart(); + currentFile.from = parseOldOrNewFile(line2); + }; + var toFile = function toFile2(line2) { + restart(); + currentFile.to = parseOldOrNewFile(line2); + }; + var toNumOfLines = function toNumOfLines2(number) { + return +(number || 1); + }; + var chunk = function chunk2(line2, match2) { + if (!currentFile) { + start4(line2); + } + var _match$slice = match2.slice(1), _match$slice2 = _slicedToArray(_match$slice, 4), oldStart = _match$slice2[0], oldNumLines = _match$slice2[1], newStart = _match$slice2[2], newNumLines = _match$slice2[3]; + deletedLineCounter = +oldStart; + addedLineCounter = +newStart; + currentChunk = { content: line2, changes: [], oldStart: +oldStart, oldLines: toNumOfLines(oldNumLines), newStart: +newStart, newLines: toNumOfLines(newNumLines) }; + currentFileChanges = { oldLines: toNumOfLines(oldNumLines), newLines: toNumOfLines(newNumLines) }; + currentFile.chunks.push(currentChunk); + }; + var del = function del2(line2) { + if (!currentChunk) + return; + currentChunk.changes.push({ type: "del", del: true, ln: deletedLineCounter++, content: line2 }); + currentFile.deletions++; + currentFileChanges.oldLines--; + }; + var add2 = function add3(line2) { + if (!currentChunk) + return; + currentChunk.changes.push({ type: "add", add: true, ln: addedLineCounter++, content: line2 }); + currentFile.additions++; + currentFileChanges.newLines--; + }; + var eof = function eof2(line2) { + var _currentChunk$changes3; + if (!currentChunk) + return; + var _currentChunk$changes = currentChunk.changes.slice(-1), _currentChunk$changes2 = _slicedToArray(_currentChunk$changes, 1), mostRecentChange = _currentChunk$changes2[0]; + currentChunk.changes.push((_currentChunk$changes3 = { type: mostRecentChange.type }, _defineProperty(_currentChunk$changes3, mostRecentChange.type, true), _defineProperty(_currentChunk$changes3, "ln1", mostRecentChange.ln1), _defineProperty(_currentChunk$changes3, "ln2", mostRecentChange.ln2), _defineProperty(_currentChunk$changes3, "ln", mostRecentChange.ln), _defineProperty(_currentChunk$changes3, "content", line2), _currentChunk$changes3)); + }; + var schemaHeaders = [[/^diff\s/, start4], [/^new file mode (\d+)$/, newFile], [/^deleted file mode (\d+)$/, deletedFile], [/^old mode (\d+)$/, oldMode], [/^new mode (\d+)$/, newMode], [/^index\s[\da-zA-Z]+\.\.[\da-zA-Z]+(\s(\d+))?$/, index], [/^---\s/, fromFile], [/^\+\+\+\s/, toFile], [/^@@\s+-(\d+),?(\d+)?\s+\+(\d+),?(\d+)?\s@@/, chunk], [/^\\ No newline at end of file$/, eof]]; + var schemaContent = [[/^\\ No newline at end of file$/, eof], [/^-/, del], [/^\+/, add2], [/^\s+/, normal]]; + var parseContentLine = function parseContentLine2(line2) { + for (var _i2 = 0, _schemaContent = schemaContent; _i2 < _schemaContent.length; _i2++) { + var _schemaContent$_i = _slicedToArray(_schemaContent[_i2], 2), pattern = _schemaContent$_i[0], handler = _schemaContent$_i[1]; + var match2 = line2.match(pattern); + if (match2) { + handler(line2, match2); + break; + } + } + if (currentFileChanges.oldLines === 0 && currentFileChanges.newLines === 0) { + currentFileChanges = null; + } + }; + var parseHeaderLine = function parseHeaderLine2(line2) { + for (var _i3 = 0, _schemaHeaders = schemaHeaders; _i3 < _schemaHeaders.length; _i3++) { + var _schemaHeaders$_i = _slicedToArray(_schemaHeaders[_i3], 2), pattern = _schemaHeaders$_i[0], handler = _schemaHeaders$_i[1]; + var match2 = line2.match(pattern); + if (match2) { + handler(line2, match2); + break; + } + } + }; + var parseLine = function parseLine2(line2) { + if (currentFileChanges) { + parseContentLine(line2); + } else { + parseHeaderLine(line2); + } + return; + }; + var _iterator = _createForOfIteratorHelper(lines2), _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done; ) { + var line = _step.value; + parseLine(line); + } + } catch (err3) { + _iterator.e(err3); + } finally { + _iterator.f(); + } + return files; }; - trashIconButton = { - iconPath: new ThemeIcon("trash"), - tooltip: "Delete Settings File", - id: "delete" /* Delete */, - command: "cody.commands.delete.json" + var fileNameDiffRegex = /(a|i|w|c|o|1|2)\/.*(?=["']? ["']?(b|i|w|c|o|1|2)\/)|(b|i|w|c|o|1|2)\/.*$/g; + var gitFileHeaderRegex = /^(a|b|i|w|c|o|1|2)\//; + var parseFiles = function parseFiles2(line) { + var fileNames = line === null || line === void 0 ? void 0 : line.match(fileNameDiffRegex); + return fileNames === null || fileNames === void 0 ? void 0 : fileNames.map(function(fileName) { + return fileName.replace(gitFileHeaderRegex, "").replace(/("|')$/, ""); + }); }; - gearIconButton = { - iconPath: new ThemeIcon("gear"), - tooltip: "Configure Custom Commands...", - id: "config" /* Config */ + var qoutedFileNameRegex = /^\\?['"]|\\?['"]$/g; + var parseOldOrNewFile = function parseOldOrNewFile2(line) { + var fileName = leftTrimChars(line, "-+").trim(); + fileName = removeTimeStamp(fileName); + return fileName.replace(qoutedFileNameRegex, "").replace(gitFileHeaderRegex, ""); + }; + var leftTrimChars = function leftTrimChars2(string, trimmingChars) { + string = makeString(string); + if (!trimmingChars && String.prototype.trimLeft) + return string.trimLeft(); + var trimmingString = formTrimmingString(trimmingChars); + return string.replace(new RegExp("^".concat(trimmingString, "+")), ""); + }; + var timeStampRegex = /\t.*|\d{4}-\d\d-\d\d\s\d\d:\d\d:\d\d(.\d+)?\s(\+|-)\d\d\d\d/; + var removeTimeStamp = function removeTimeStamp2(string) { + var timeStamp = timeStampRegex.exec(string); + if (timeStamp) { + string = string.substring(0, timeStamp.index).trim(); + } + return string; }; - backIconButton = QuickInputButtons.Back; - CommandMenuButtons = { - open: openIconButton, - trash: trashIconButton, - back: backIconButton, - gear: gearIconButton + var formTrimmingString = function formTrimmingString2(trimmingChars) { + if (trimmingChars === null || trimmingChars === void 0) + return "\\s"; + else if (trimmingChars instanceof RegExp) + return trimmingChars.source; + return "[".concat(makeString(trimmingChars).replace(/([.*+?^=!:${}()|[\]/\\])/g, "\\$1"), "]"); }; - } -}); - -// ../vscode/src/commands/menus/items/seperators.ts -var commandsSeparator, customSeparator, settingsSeparator, lastUsedSeparator, CommandMenuSeperator; -var init_seperators = __esm({ - "../vscode/src/commands/menus/items/seperators.ts"() { - "use strict"; - commandsSeparator = { kind: -1, label: "commands" }; - customSeparator = { kind: -1, label: "custom commands (beta)" }; - settingsSeparator = { kind: -1, label: "settings" }; - lastUsedSeparator = { kind: -1, label: "last used" }; - CommandMenuSeperator = { - commands: commandsSeparator, - custom: customSeparator, - settings: settingsSeparator, - lastUsed: lastUsedSeparator + var makeString = function makeString2(itemToConvert) { + return (itemToConvert !== null && itemToConvert !== void 0 ? itemToConvert : "") + ""; }; } }); -// ../vscode/src/commands/menus/items/options.ts -var ASK_QUESTION_COMMAND, EDIT_COMMAND, chatOption, fixOption, configOption, addOption, CommandMenuOption; -var init_options = __esm({ - "../vscode/src/commands/menus/items/options.ts"() { +// ../vscode/src/scm/CommitMessageProvider.ts +var import_promises4, import_node_child_process2, import_node_path3, import_node_util2, import_parse_diff, execFile2, COMMIT_MESSAGE_TOPIC, DIFF_SPLIT_REGEX, CommitMessageProvider, PROMPT_PREFIX, PROMPT_SUFFIX, DEFAULT_TEMPLATE_CONTENT; +var init_CommitMessageProvider = __esm({ + "../vscode/src/scm/CommitMessageProvider.ts"() { "use strict"; - ASK_QUESTION_COMMAND = { - description: "Ask a question", - slashCommand: "/ask" - }; - EDIT_COMMAND = { - description: "Edit code", - slashCommand: "/edit" - }; - chatOption = { - label: ASK_QUESTION_COMMAND.slashCommand, - description: ASK_QUESTION_COMMAND.description, - slashCommand: ASK_QUESTION_COMMAND.slashCommand, - alwaysShow: true - }; - fixOption = { - label: EDIT_COMMAND.slashCommand, - description: EDIT_COMMAND.description, - slashCommand: EDIT_COMMAND.slashCommand, - alwaysShow: true - }; - configOption = { - label: "Configure Custom Commands...", - description: "Manage your custom reusable commands", - slashCommand: "" - }; - addOption = { - label: "New Custom Command...", - alwaysShow: true, - description: "Create a new reusable command", - slashCommand: "", - command: "cody.commands.add" - }; - CommandMenuOption = { - chat: chatOption, - edit: fixOption, - config: configOption, - add: addOption - }; - } -}); + import_promises4 = require("fs/promises"); + import_node_child_process2 = require("node:child_process"); + import_node_path3 = __toESM(require("node:path")); + import_node_util2 = require("node:util"); + init_vscode_shim(); + import_parse_diff = __toESM(require_parse_diff()); + init_src(); + init_bot_response_multiplexer(); + init_constants(); + init_truncation(); + init_telemetry_v2(); + init_telemetry(); + execFile2 = (0, import_node_util2.promisify)(import_node_child_process2.execFile); + COMMIT_MESSAGE_TOPIC = "commit-message"; + DIFF_SPLIT_REGEX = /(^diff --git)/gm; + CommitMessageProvider = class { + constructor(options2) { + this.options = options2; + } + icon = new ThemeIcon("cody-logo"); + title = "Generate Commit Message (Cody)"; + disposables = []; + _subscription; + onConfigurationChange(config) { + if (config.experimentalCommitMessage) { + this._subscription = this.options.gitApi.registerCommitMessageProvider?.(this); + } else { + this._subscription?.dispose(); + this._subscription = void 0; + } + } + async provideCommitMessage(repository, changes, cancellationToken) { + telemetryService.log("CodyVSCodeExtension:command:generateCommitMessage:clicked", { + hasV2Event: true + }); + telemetryRecorder.recordEvent("cody.command.generateCommitMessage", "clicked"); + const diffs = changes.filter((diff2) => diff2.trim().length > 0); + const humanPrompt = await this.getHumanPrompt(diffs); + if (!humanPrompt) { + return Promise.reject(); + } + const { isEmpty, prompt: prompt2, isTruncated } = humanPrompt; + if (isEmpty) { + telemetryService.log("CodyVSCodeExtension:command:generateCommitMessage:empty", { + hasV2Event: true + }); + telemetryRecorder.recordEvent("cody.command.generateCommitMessage", "empty"); + return repository.inputBox.value; + } + if (isTruncated) { + this.options.editor.showWarningMessage( + "The length of the diff exceeded the maximum available length. Using a truncated diff." + ); + } + let completion = ""; + const multiplexer = new BotResponseMultiplexer(); + multiplexer.sub(COMMIT_MESSAGE_TOPIC, { + onResponse: (content) => { + completion = content; + return Promise.resolve(); + }, + onTurnComplete: () => { + return Promise.resolve(); + } + }); + const prefix = repository.inputBox.value; + const preamble = `Here is a suggested commit message for the diff: -// ../vscode/src/commands/menus/items/index.ts -var import_os5, CommandMenuTitleItem, CustomCommandConfigMenuItems, customPromptsContextOptions; -var init_items = __esm({ - "../vscode/src/commands/menus/items/index.ts"() { - "use strict"; - init_types2(); - init_buttons(); - import_os5 = require("os"); - init_buttons(); - init_seperators(); - init_options(); - CommandMenuTitleItem = { - default: { - title: `Cody Commands (Shortcut: ${(0, import_os5.platform)() === "darwin" ? "\u2325" : "Alt+"}C)`, - placeHolder: "Search for a command or enter your question here...", - buttons: [CommandMenuButtons.gear] - }, - custom: { - title: "Cody: Custom Commands (Beta)", - placeHolder: "Search command to run...", - buttons: [CommandMenuButtons.back, CommandMenuButtons.gear] - }, - config: { - title: "Cody: Configure Custom Commands (Beta)", - placeHolder: "Choose an option", - buttons: [CommandMenuButtons.back] +<${COMMIT_MESSAGE_TOPIC}>${prefix}`; + multiplexer.publish(preamble); + telemetryService.log("CodyVSCodeExtension:command:generateCommitMessage:executed", { + hasV2Event: true + }); + telemetryRecorder.recordEvent("cody.command.generateCommitMessage", "executed"); + try { + const abortController = new AbortController(); + const stream5 = this.options.chatClient.chat( + [ + { speaker: "human", text: prompt2 }, + { + speaker: "assistant", + text: preamble + } + ], + { + fast: true, + stopSequences: [``] + }, + abortController.signal + ); + cancellationToken?.onCancellationRequested(abortController.abort); + for await (const message of stream5) { + switch (message.type) { + case "change": + void multiplexer.publish(message.text); + break; + case "error": + throw message.error; + case "complete": + void multiplexer.notifyTurnComplete(); + break; + } + } + } catch (error) { + if (isRateLimitError(error)) { + commands.executeCommand( + "cody.show-rate-limit-modal", + error.userMessage, + error.retryMessage, + error.upgradeIsAvailable + ); + } + return Promise.reject(error); + } + const fullText = prefix + completion; + return fullText.trim(); + } + async getDiffFromGitCli(cwd) { + const diffCliCommands = [ + "diff", + "--patch", + "--unified=1", + "--diff-algorithm=minimal", + "--no-color", + "-M", + "-C" + ]; + let diff2; + diff2 = (await execFile2("git", [...diffCliCommands, "--staged"], { cwd })).stdout.trim(); + if (!diff2) { + diff2 = (await execFile2("git", [...diffCliCommands, "HEAD"], { cwd })).stdout.trim(); + } + const diffParts = diff2.split(DIFF_SPLIT_REGEX); + while (diffParts.length > 0 && diffParts[0] === "") { + diffParts.shift(); + } + const chunks = diffParts.reduce((acc, part, idx) => { + if (idx % 2 === 0) { + acc.push(part); + } else { + acc[acc.length - 1] += part; + } + return acc; + }, []); + return chunks; } - }; - CustomCommandConfigMenuItems = [ - { - kind: 0, - label: "New Custom Command...", - id: "add" /* Add */ - }, - { kind: -1, id: "separator", label: "" }, - { - kind: 0, - label: "Open User Settings (JSON)", - detail: "Stored on your machine and usable across all your workspaces/repositories", - id: "open" /* Open */, - type: "user" /* User */, - description: "~/.vscode/cody.json" /* User */, - buttons: [CommandMenuButtons.open, CommandMenuButtons.trash], - command: "cody.commands.open.json" - }, - { - kind: 0, - label: "Open Workspace Settings (JSON)", - detail: "Project-specific and shared with anyone using this workspace/repository", - id: "open" /* Open */, - type: "workspace" /* Workspace */, - description: ".vscode/cody.json" /* Workspace */, - buttons: [CommandMenuButtons.open, CommandMenuButtons.trash], - command: "cody.commands.open.json" - }, - { kind: -1, id: "separator", label: "" }, - { kind: 0, label: "Open Custom Commands Documentation", id: "docs" } - ]; - customPromptsContextOptions = [ - { - id: "selection", - label: "Selected Code", - detail: "Code currently highlighted in the active editor.", - picked: true - }, - { - id: "currentDir", - label: "Current Directory", - detail: 'First 10 text files in the current directory. If the prompt includes the words "test" or "tests", only test files will be included.', - picked: false - }, - { - id: "openTabs", - label: "Current Open Tabs", - detail: "First 10 text files in current open tabs", - picked: false - }, - { - id: "command", - label: "Command Output", - detail: "The output returned from a terminal command (e.g. git describe --long, node your-script.js, cat src/file-name.js)", - picked: false - }, - { - id: "none", - label: "None", - detail: "Exclude all types of context.", - picked: false + async getHumanPrompt(diffs) { + const workspaceUri = this.options.editor.getWorkspaceRootUri(); + if (!workspaceUri) { + return null; + } + if (!diffs?.length) { + diffs = await this.getDiffFromGitCli(workspaceUri.fsPath); + } + if (diffs.length === 0) { + return { isEmpty: true, isTruncated: false, prompt: "" }; + } + const allowedDiffs = diffs.filter((diff2) => { + const files = (0, import_parse_diff.default)(diff2); + const affectedFileUris = files.filter((file) => file.to).map((file) => Uri.file(import_node_path3.default.join(workspaceUri.fsPath, file.to))); + if (affectedFileUris.some(isCodyIgnoredFile)) { + return false; + } + return true; + }); + const diffContent = allowedDiffs.join("\n").trim(); + if (!diffContent) { + return { isEmpty: true, isTruncated: false, prompt: "" }; + } + const templateContent = await this.getCommitTemplate(workspaceUri.fsPath) || DEFAULT_TEMPLATE_CONTENT; + const fullPrompt = PROMPT_PREFIX(diffContent) + PROMPT_SUFFIX(templateContent); + const prompt2 = truncateText(fullPrompt, MAX_AVAILABLE_PROMPT_LENGTH); + return { + prompt: prompt2, + isTruncated: prompt2.length < fullPrompt.length, + isEmpty: false + }; } - ]; + async getCommitTemplate(cwd) { + try { + const commitTemplateFile = (await execFile2("git", ["config", "--get", "commit.template"], { + cwd + })).stdout.trim(); + if (commitTemplateFile.length === 0) { + return null; + } + const templatePath = import_node_path3.default.join(cwd, commitTemplateFile); + return (await (0, import_promises4.readFile)(templatePath)).toString(); + } catch (error) { + console.warn("Unable to get commit template", error); + return null; + } + } + dispose() { + for (const disposable of this.disposables) { + disposable.dispose(); + } + } + }; + PROMPT_PREFIX = (diff2) => ` +Here is a set of staged changes: + + +${diff2} +`.trim(); + PROMPT_SUFFIX = (template2) => ` + + +A commit message consists of a short subject line and a body with additional details about and reasons for the change. Commit messages are concise, technical, and specific to the change. +Here is a template that describes in detail how to construct a commit message: + + + +Write a commit message for the staged changes using the template as a guide where applicable. +`.trim(); + DEFAULT_TEMPLATE_CONTENT = ` +\` +{type}: {subject} +{description?} +{related-issues?} +\` +-------------------- +Type can be + feat (new feature) + fix (bug fix) + refactor (refactoring production code) + style (formatting, missing semi colons, etc; no code change) + docs (changes to documentation) + test (adding or refactoring tests; no production code change) + chore (updating grunt tasks etc; no production code change) + wip (work in progress commit to be squashed -- do not push!)** +-------------------- +Remember to + - Capitalize the subject line + - Limit the subject line to 50 characters + - The optional description describes in high level or bullet points how the commit addresses the issue + - Optionally reference any relevant tickets or issues + - Limit each line to 72 characters + - Use the imperative mood in the subject line + - Do not end the subject line with a period + - Separate subject from body with a blank line + - Use the body to explain what and why vs. how + - Can use multiple lines with "-" for bullet points in body. +-------------------- + `.trim(); } }); // ../vscode/src/commands/types.ts -var init_types3 = __esm({ +var init_types2 = __esm({ "../vscode/src/commands/types.ts"() { "use strict"; } @@ -202337,7 +203548,7 @@ async function createJSONFile(file) { } async function saveJSONFile(data, file) { try { - const workspaceEditor = new WorkspaceEdit(); + const workspaceEditor = new AgentWorkspaceEdit(); workspaceEditor.deleteFile(file, { ignoreIfNotExists: true }); workspaceEditor.createFile(file, { ignoreIfExists: true }); workspaceEditor.insert(file, new Position(0, 0), JSON.stringify(data, null, 2)); @@ -202355,6 +203566,211 @@ var init_config_file = __esm({ } }); +// ../vscode/src/commands/menus/types.ts +var init_types3 = __esm({ + "../vscode/src/commands/menus/types.ts"() { + "use strict"; + } +}); + +// ../vscode/src/commands/menus/items/buttons.ts +var openIconButton, trashIconButton, gearIconButton, backIconButton, CommandMenuButtons; +var init_buttons = __esm({ + "../vscode/src/commands/menus/items/buttons.ts"() { + "use strict"; + init_vscode_shim(); + init_types3(); + openIconButton = { + iconPath: new ThemeIcon("go-to-file"), + tooltip: "Open or Create Settings File", + id: "open" /* Open */, + command: "cody.commands.open.json" + }; + trashIconButton = { + iconPath: new ThemeIcon("trash"), + tooltip: "Delete Settings File", + id: "delete" /* Delete */, + command: "cody.commands.delete.json" + }; + gearIconButton = { + iconPath: new ThemeIcon("gear"), + tooltip: "Configure Custom Commands...", + id: "config" /* Config */ + }; + backIconButton = QuickInputButtons.Back; + CommandMenuButtons = { + open: openIconButton, + trash: trashIconButton, + back: backIconButton, + gear: gearIconButton + }; + } +}); + +// ../vscode/src/commands/menus/items/seperators.ts +var commandsSeparator, customSeparator, settingsSeparator, lastUsedSeparator, CommandMenuSeperator; +var init_seperators = __esm({ + "../vscode/src/commands/menus/items/seperators.ts"() { + "use strict"; + commandsSeparator = { kind: -1, label: "commands" }; + customSeparator = { kind: -1, label: "custom commands (beta)" }; + settingsSeparator = { kind: -1, label: "settings" }; + lastUsedSeparator = { kind: -1, label: "last used" }; + CommandMenuSeperator = { + commands: commandsSeparator, + custom: customSeparator, + settings: settingsSeparator, + lastUsed: lastUsedSeparator + }; + } +}); + +// ../vscode/src/commands/menus/items/options.ts +var ASK_QUESTION_COMMAND, EDIT_COMMAND, chatOption, fixOption, configOption, addOption, CommandMenuOption; +var init_options = __esm({ + "../vscode/src/commands/menus/items/options.ts"() { + "use strict"; + init_commands(); + ASK_QUESTION_COMMAND = CodyCommandMenuItems[0]; + EDIT_COMMAND = CodyCommandMenuItems[1]; + chatOption = { + label: `$(${ASK_QUESTION_COMMAND.icon}) ${ASK_QUESTION_COMMAND.description}`, + description: ASK_QUESTION_COMMAND.prompt, + key: ASK_QUESTION_COMMAND.key, + alwaysShow: true, + type: "default", + command: ASK_QUESTION_COMMAND.command.command + }; + fixOption = { + label: `$(${EDIT_COMMAND.icon}) ${EDIT_COMMAND.description}`, + description: EDIT_COMMAND.prompt, + key: EDIT_COMMAND.key, + alwaysShow: true, + type: "default", + command: ASK_QUESTION_COMMAND.command.command + }; + configOption = { + label: "$(gear) Configure Custom Commands...", + description: "Manage your custom reusable commands", + key: "", + command: "cody.menu.commands-settings" + }; + addOption = { + label: "$(diff-added) New Custom Command...", + alwaysShow: true, + description: "Create a new reusable command", + key: "", + command: "cody.menu.custom.build" + }; + CommandMenuOption = { + chat: chatOption, + edit: fixOption, + config: configOption, + add: addOption + }; + } +}); + +// ../vscode/src/commands/menus/items/index.ts +var import_os5, CommandMenuTitleItem, CustomCommandConfigMenuItems, customPromptsContextOptions; +var init_items = __esm({ + "../vscode/src/commands/menus/items/index.ts"() { + "use strict"; + init_types3(); + init_buttons(); + import_os5 = require("os"); + init_buttons(); + init_seperators(); + init_options(); + CommandMenuTitleItem = { + default: { + title: `Cody Commands (Shortcut: ${(0, import_os5.platform)() === "darwin" ? "\u2325" : "Alt+"}C)`, + placeHolder: "Search for a command or enter your question here...", + buttons: [CommandMenuButtons.gear] + }, + custom: { + title: "Cody: Custom Commands (Beta)", + placeHolder: "Search command to run...", + buttons: [CommandMenuButtons.back, CommandMenuButtons.gear] + }, + config: { + title: "Cody: Configure Custom Commands (Beta)", + placeHolder: "Choose an option", + buttons: [CommandMenuButtons.back] + } + }; + CustomCommandConfigMenuItems = [ + { + kind: 0, + label: "New Custom Command...", + id: "add" /* Add */, + command: "cody.menu.custom.build" + }, + { kind: -1, id: "separator", label: "" }, + { + kind: 0, + label: "Open User Settings (JSON)", + detail: "Stored on your machine and usable across all your workspaces/repositories", + id: "open" /* Open */, + type: "user" /* User */, + description: "~/.vscode/cody.json" /* User */, + buttons: [CommandMenuButtons.open, CommandMenuButtons.trash], + command: "cody.commands.open.json" + }, + { + kind: 0, + label: "Open Workspace Settings (JSON)", + detail: "Project-specific and shared with anyone using this workspace/repository", + id: "open" /* Open */, + type: "workspace" /* Workspace */, + description: ".vscode/cody.json" /* Workspace */, + buttons: [CommandMenuButtons.open, CommandMenuButtons.trash], + command: "cody.commands.open.json" + }, + { kind: -1, id: "separator", label: "" }, + { + kind: 0, + label: "Open Custom Commands Documentation", + id: "docs", + type: "user" /* User */, + command: "cody.commands.open.doc" + } + ]; + customPromptsContextOptions = [ + { + id: "selection", + label: "Selected Code", + detail: "Code currently highlighted in the active editor.", + picked: true + }, + { + id: "currentDir", + label: "Current Directory", + detail: 'First 10 text files in the current directory. If the prompt includes the words "test" or "tests", only test files will be included.', + picked: false + }, + { + id: "openTabs", + label: "Current Open Tabs", + detail: "First 10 text files in current open tabs", + picked: false + }, + { + id: "command", + label: "Command Output", + detail: "The output returned from a terminal command (e.g. git describe --long, node your-script.js, cat src/file-name.js)", + picked: false + }, + { + id: "none", + label: "None", + detail: "Exclude all types of context.", + picked: false + } + ]; + } +}); + // ../vscode/src/commands/menus/command-builder.ts async function showPromptCreationInputBox() { const promptCommand = await window2.showInputBox({ @@ -202371,14 +203787,12 @@ var init_command_builder = __esm({ init_vscode_shim(); init_items(); init_common2(); + init_telemetry(); + init_telemetry_v2(); CustomCommandsBuilderMenu = class { async start(commands3) { - const slashCommand = await this.makeSlashCommand(commands3); - if (!slashCommand) { - return null; - } - const description = await this.makeDescription(); - if (!description) { + const key = await this.makeCommandKey(commands3); + if (!key) { return null; } const prompt2 = await this.makePrompt(); @@ -202389,48 +203803,32 @@ var init_command_builder = __esm({ if (!type) { return null; } - return { slashCommand, prompt: { ...prompt2, description, slashCommand }, type }; + telemetryService.log("CodyVSCodeExtension:command:custom:build:executed"); + telemetryRecorder.recordEvent("cody.command.custom.build", "executed"); + return { key, prompt: { ...prompt2, key }, type }; } - async makeSlashCommand(commands3) { + async makeCommandKey(commands3) { const commandSet = new Set(commands3); - let value = await window2.showInputBox({ - title: "New Custom Cody Command: Slash Name", - prompt: "Enter the slash name of the custom command", - placeHolder: "e.g. /my-custom-command", + const value = await window2.showInputBox({ + title: "New Custom Cody Command: Command Name", + prompt: "Enter the name of the custom command.", + placeHolder: "e.g. hello", ignoreFocusOut: true, validateInput: (input) => { if (!input) { - return "Slash name cannot be empty."; + return "Command name cannot be empty."; } if (input.split(" ").length > 1) { - return "Slash name cannot contain spaces. Use dashes, underscores, or camelCase."; + return "Command name cannot contain spaces. Use dashes, underscores, or camelCase."; } - if (commandSet.has(toSlashCommand(input))) { - return "A command with the slash name already exists."; + if (commandSet.has(fromSlashCommand(input))) { + return "A command with the same name already exists."; } return; } }); - if (value) { - value = toSlashCommand(value); - } return value; } - async makeDescription() { - const description = await window2.showInputBox({ - title: "New Custom Cody Command: Description", - prompt: "Enter a description for the command in sentence case.", - placeHolder: "e.g. Scan for vulnerabilities", - ignoreFocusOut: true, - validateInput: (input) => { - if (!input) { - return "Command description cannot be empty."; - } - return; - } - }); - return description; - } async makePrompt() { const prompt2 = await window2.showInputBox({ title: "New Custom Cody Command: Prompt", @@ -202516,28 +203914,31 @@ async function showCommandMenu(type, customCommands) { const items = []; const configOption2 = CommandMenuOption.config; const addOption2 = CommandMenuOption.add; + telemetryService.log(`CodyVSCodeExtension:menu:command:${type}:clicked`); + telemetryRecorder.recordEvent(`cody.menu:command:${type}`, "clicked"); if (type === "config") { items.push(...CustomCommandConfigMenuItems); } else { if (type === "default") { items.push(CommandMenuSeperator.commands); - for (const [_name, _command] of vscodeDefaultCommands) { - const label = _command.slashCommand; - const description = _command.description; - const command = _command.slashCommand; - items.push({ label, description, command }); + for (const _command of CodyCommandMenuItems) { + const key = _command.key; + const label = `$(${_command.icon}) ${_command.description}`; + const command = _command.command.command; + const description = _command.keybinding ? _command.keybinding : ""; + items.push({ label, command, description, type, key }); } } - items.push(CommandMenuSeperator.custom); - for (const customCommand of customCommands) { - const label = customCommand.slashCommand; - const description = customCommand.description; - const command = customCommand.slashCommand; - items.push({ label, description, command }); - } - items.push(CommandMenuSeperator.settings, configOption2); if (type === "custom") { - items.push(addOption2); + items.push(CommandMenuSeperator.custom); + for (const customCommand of customCommands) { + const label = `$(tools) ${customCommand.key}`; + const description = customCommand.description ?? customCommand.prompt; + const command = customCommand.key; + const key = customCommand.key; + items.push({ label, description, command, key }); + } + items.push(CommandMenuSeperator.settings, configOption2, addOption2); } } const options2 = CommandMenuTitleItem[type]; @@ -202565,7 +203966,7 @@ async function showCommandMenu(type, customCommands) { quickPick.hide(); }); quickPick.onDidChangeValue((value) => { - if (value?.startsWith("/")) { + if (type === "default") { const commandKey = value.split(" ")[0]; const isCommand = items.find((item) => item.label === commandKey); if (commandKey && isCommand) { @@ -202573,51 +203974,61 @@ async function showCommandMenu(type, customCommands) { quickPick.items = [isCommand]; return; } - } - if (value && !value.startsWith("/")) { - quickPick.items = [CommandMenuOption.edit, CommandMenuOption.chat, ...items]; - } else { - quickPick.items = items; + if (value) { + quickPick.items = [ + CommandMenuOption.chat, + CommandMenuOption.edit, + ...items.filter((i) => i.key !== "ask" && i.key !== "edit") + ]; + } else { + quickPick.items = items; + } } }); quickPick.onDidAccept(async () => { const selection = quickPick.activeItems[0]; const value = normalize(quickPick.value); - const selected = selection?.label || value; + const source = "menu"; if (selection.buttons && selection.type && selection.command) { void commands.executeCommand(selection.command, selection.type); } - if (selected === addOption2.label && addOption2.command) { - void commands.executeCommand(addOption2.command, selected); + const commandOptions = [addOption2.command, configOption2.command]; + if (selection?.command && commandOptions.includes(selection.command)) { + void commands.executeCommand(selection.command); quickPick.hide(); return; } - if (selected === configOption2.label) { - await showCommandMenu("config", customCommands); - quickPick.hide(); - return; - } - const selectionHasIdField = Object.prototype.hasOwnProperty.call(selection, "id"); - if (selectionHasIdField && selection.id === "docs") { - return openCustomCommandDocsLink(); - } - if (selected.startsWith("/ask")) { - const inputValue = value.replace(/^\/ask/, "").trim(); - if (!inputValue) { - void showChatInputBox(); - } else { - void executeChat({ text: inputValue, submitType: "user-newchat", source: "menu" }); + if (selection.type === "default" && selection.command) { + if (selection.key === "ask") { + if (!value) { + void commands.executeCommand("cody.chat.panel.new"); + } else { + void executeChat({ + text: value.trim(), + submitType: "user-newchat", + source + }); + } + quickPick.hide(); + return; } + if (selection.key === "edit") { + void executeEdit({ configuration: { instruction: value }, source }); + quickPick.hide(); + return; + } + void commands.executeCommand(selection.command, selection.type); quickPick.hide(); return; } - if (selected.startsWith("/edit")) { - void executeEdit({ instruction: value }, "menu"); + if (selection.key === selection.command) { + void commands.executeCommand("cody.action.command", selection.key + " " + value); quickPick.hide(); return; } - if (selected.startsWith("/")) { - void commands.executeCommand("cody.action.command", selected + " " + value); + const selectionHasIdField = Object.prototype.hasOwnProperty.call(selection, "id"); + if (selectionHasIdField && selection.id === "docs") { + return openCustomCommandDocsLink(); } resolve8(); quickPick.hide(); @@ -202630,30 +204041,24 @@ function normalize(input) { return input.trim().toLowerCase(); } async function showNewCustomCommandMenu(commands3) { + telemetryService.log("CodyVSCodeExtension:menu:custom:build:clicked"); + telemetryRecorder.recordEvent("cody.menu.custom.build", "clicked"); const builder = new CustomCommandsBuilderMenu(); return builder.start(commands3); } -async function showChatInputBox() { - const input = await window2.showInputBox({ - title: "/ask Cody", - placeHolder: "Enter your question for Cody." - }); - if (!input) { - return; - } - void executeChat({ text: input, submitType: "user-newchat", source: "menu" }); -} var init_menus = __esm({ "../vscode/src/commands/menus/index.ts"() { "use strict"; init_vscode_shim(); init_items(); - init_provider3(); init_command_builder(); init_items(); init_custom_commands(); init_ask(); init_execute(); + init_commands(); + init_telemetry(); + init_telemetry_v2(); } }); @@ -202662,7 +204067,7 @@ async function openCustomCommandDocsLink() { const uri = "https://sourcegraph.com/docs/cody/custom-commands"; await env2.openExternal(Uri.parse(uri)); } -var import_lodash11, import_os6, import_vscode_uri13, CustomCommandsManager; +var import_lodash11, import_os6, import_vscode_uri14, isTesting2, isMacOS, userHomePath, CustomCommandsManager; var init_custom_commands = __esm({ "../vscode/src/commands/services/custom-commands.ts"() { "use strict"; @@ -202670,31 +204075,37 @@ var init_custom_commands = __esm({ init_vscode_shim(); import_os6 = __toESM(require("os")); init_log(); - init_types3(); + init_types2(); init_config_file(); init_menus(); - import_vscode_uri13 = __toESM(require_umd()); + import_vscode_uri14 = __toESM(require_umd()); init_get_commands(); - init_common2(); + init_configuration2(); + init_platform(); + isTesting2 = process.env.CODY_TESTING === "true"; + isMacOS = isMac(); + userHomePath = import_os6.default.homedir() || process.env.HOME || process.env.USERPROFILE || ""; CustomCommandsManager = class { // Watchers for the cody.json files fileWatcherDisposables = []; disposables = []; customCommandsMap = /* @__PURE__ */ new Map(); userJSON = null; - userConfigFile; + configFileName = ".cody/commands.json" /* COMMAND */; + userConfigFile = import_vscode_uri14.Utils.joinPath(import_vscode_uri14.URI.file(userHomePath), this.configFileName); get workspaceConfigFile() { const workspaceRoot = workspace.workspaceFolders?.[0]?.uri; if (!workspaceRoot) { return void 0; } - return import_vscode_uri13.Utils.joinPath(workspaceRoot, ".vscode/cody.json" /* VSCODE */); + return import_vscode_uri14.Utils.joinPath(workspaceRoot, this.configFileName); } constructor() { - const userHomePath = import_os6.default.homedir() || process.env.HOME || process.env.USERPROFILE || ""; - this.userConfigFile = import_vscode_uri13.Utils.joinPath(import_vscode_uri13.URI.file(userHomePath), ".vscode/cody.json" /* VSCODE */); this.disposables.push( - commands.registerCommand("cody.commands.add", () => this.newCustomCommandQuickPick()), + commands.registerCommand( + "cody.menu.custom.build", + () => this.newCustomCommandQuickPick() + ), commands.registerCommand( "cody.commands.open.json", (type) => this.configFileActions(type, "open") @@ -202709,11 +204120,16 @@ var init_custom_commands = __esm({ return [...this.customCommandsMap].sort((a, b) => a[0].localeCompare(b[0])); } /** + // TODO (bee) Migrate to use .cody/commands.json * Create file watchers for cody.json files. * Automatically update the command map when the cody.json files are changed */ init() { - this.disposeWatchers(); + const workspaceConfig = workspace.getConfiguration(); + const config = getConfiguration(workspaceConfig); + if (!config.isRunningInsideAgent) { + this.configFileName = ".vscode/cody.json" /* VSCODE */; + } const userConfigWatcher = createFileWatchers(this.userConfigFile); if (userConfigWatcher) { this.fileWatcherDisposables.push( @@ -202780,17 +204196,17 @@ var init_custom_commands = __esm({ * Quick pick for creating a new custom command */ async newCustomCommandQuickPick() { - const commands3 = [...this.customCommandsMap.values()].map((c) => c.slashCommand); + const commands3 = [...this.customCommandsMap.values()].map((c) => c.key); const newCommand = await showNewCustomCommandMenu(commands3); if (!newCommand) { return; } - await this.save(newCommand.slashCommand, newCommand.prompt, newCommand.type); + await this.save(newCommand.key, newCommand.prompt, newCommand.type); await this.refresh(); const isUserCommand = newCommand.type === "user" /* User */; const buttonTitle = `Open ${isUserCommand ? "User" : "Workspace"} Settings (JSON)`; void window2.showInformationMessage( - `New ${newCommand.slashCommand} command saved to ${newCommand.type} settings`, + `New ${newCommand.key} command saved to ${newCommand.type} settings`, buttonTitle ).then(async (choice) => { if (choice === buttonTitle) { @@ -202804,16 +204220,16 @@ var init_custom_commands = __esm({ /** * Add the newly create command via quick pick to the cody.json file */ - async save(id, prompt2, type = "user" /* User */) { - this.customCommandsMap.set(id, prompt2); + async save(id, command, type = "user" /* User */) { + this.customCommandsMap.set(id, command); + const updated = (0, import_lodash11.omit)(command, ["key", "type"]); const filtered = /* @__PURE__ */ new Map(); - for (const [key, command] of this.customCommandsMap) { - if (command.type === type) { - command.type = void 0; - filtered.set(fromSlashCommand(key), (0, import_lodash11.omit)(command, "slashCommand")); + for (const [key, _command] of this.customCommandsMap) { + if (_command.type === type) { + filtered.set(key, (0, import_lodash11.omit)(_command, ["key", "type"])); } } - filtered.set(fromSlashCommand(id), (0, import_lodash11.omit)(prompt2, "slashCommand")); + filtered.set(id, updated); const jsonContext = { ...this.userJSON }; jsonContext.commands = Object.fromEntries(filtered); const uri = this.getConfigFileByType(type); @@ -202835,9 +204251,25 @@ var init_custom_commands = __esm({ case "open": void commands.executeCommand("vscode.open", uri); break; - case "delete": - void workspace.fs.delete(uri); + case "delete": { + let fileType = "user settings file (~/.vscode/cody.json)"; + if (type === "workspace" /* Workspace */) { + fileType = "workspace settings file (.vscode/cody.json)"; + } + const bin = isMacOS ? "Trash" : "Recycle Bin"; + const confirmationKey = `Move to ${bin}`; + const modal = !isTesting2; + window2.showInformationMessage( + `Are you sure you want to delete your Cody ${fileType}?`, + { detail: `You can restore this file from the ${bin}.`, modal }, + confirmationKey + ).then(async (choice) => { + if (choice === confirmationKey) { + void workspace.fs.delete(uri); + } + }); break; + } case "create": await createJSONFile(uri).then(() => { window2.showInformationMessage( @@ -202915,18 +204347,18 @@ async function getContextFileFromShell(command) { return []; } } -var import_node_child_process2, import_node_util2, import_os7, import_posix, _exec, outputWrapper; +var import_node_child_process3, import_node_util3, import_os7, import_posix, _exec, outputWrapper; var init_shell = __esm({ "../vscode/src/commands/context/shell.ts"() { "use strict"; - import_node_child_process2 = require("node:child_process"); - import_node_util2 = require("node:util"); + import_node_child_process3 = require("node:child_process"); + import_node_util3 = require("node:util"); import_os7 = __toESM(require("os")); init_vscode_shim(); init_log(); init_src(); import_posix = __toESM(require("node:path/posix")); - _exec = (0, import_node_util2.promisify)(import_node_child_process2.exec); + _exec = (0, import_node_util3.promisify)(import_node_child_process3.exec); outputWrapper = ` Terminal output from the \`{command}\` command enclosed between tags: @@ -202936,31 +204368,17 @@ Terminal output from the \`{command}\` command enclosed between tag }); // ../vscode/src/commands/services/provider.ts -var editorCommands, vscodeDefaultCommands, CommandsProvider; +var vscodeDefaultCommands, CommandsProvider; var init_provider3 = __esm({ "../vscode/src/commands/services/provider.ts"() { "use strict"; init_vscode_shim(); - init_items(); init_custom_commands(); init_menus(); init_shell(); init_get_commands(); - editorCommands = [ - { - description: ASK_QUESTION_COMMAND.description, - prompt: ASK_QUESTION_COMMAND.slashCommand, - slashCommand: ASK_QUESTION_COMMAND.slashCommand, - mode: "ask" - }, - { - description: EDIT_COMMAND.description, - prompt: EDIT_COMMAND.slashCommand, - slashCommand: EDIT_COMMAND.slashCommand, - mode: "edit" - } - ]; - vscodeDefaultCommands = getDefaultCommandsMap(editorCommands); + init_commands(); + vscodeDefaultCommands = getDefaultCommandsMap(CodyCommandMenuItems); CommandsProvider = class { disposables = []; defaultCommands = vscodeDefaultCommands; @@ -202973,13 +204391,18 @@ var init_provider3 = __esm({ this.disposables.push( commands.registerCommand("cody.menu.commands", () => this?.menu("default")), commands.registerCommand("cody.menu.custom-commands", () => this?.menu("custom")), - commands.registerCommand("cody.menu.commands-settings", () => this?.menu("config")) + commands.registerCommand("cody.menu.commands-settings", () => this?.menu("config")), + commands.registerCommand("cody.commands.open.doc", () => openCustomCommandDocsLink()) ); this.customCommandsStore.init(); + this.refresh(); } async menu(type) { const customCommands = await this.getCustomCommands(); const commandArray = [...customCommands].map((command) => command[1]); + if (type === "custom" && !commandArray.length) { + return showCommandMenu("config", commandArray); + } await showCommandMenu(type, commandArray); } /** @@ -203037,6 +204460,7 @@ function activate2(context3) { createBfgRetriever: () => new BfgRetriever(context3), createSentryService: (...args3) => new NodeSentryService(...args3), createOpenTelemetryService: (...args3) => new OpenTelemetryService(...args3), + createCommitMessageProvider: (...args3) => new CommitMessageProvider(...args3), onConfigurationChange: setCustomAgent }); } @@ -203052,6 +204476,7 @@ var init_extension_node = __esm({ init_symf(); init_OpenTelemetryService_node(); init_sentry_node(); + init_CommitMessageProvider(); init_provider3(); } }); @@ -203661,17 +205086,18 @@ var init_AgentTextDocument = __esm({ }); // src/AgentWorkspaceDocuments.ts -var import_promises4, AgentWorkspaceDocuments; +var import_promises5, AgentWorkspaceDocuments; var init_AgentWorkspaceDocuments = __esm({ "src/AgentWorkspaceDocuments.ts"() { "use strict"; - import_promises4 = __toESM(require("fs/promises")); + import_promises5 = __toESM(require("fs/promises")); init_vscode_shim(); - init_active_editor(); init_TextDocumentWithUri(); init_AgentTextDocument(); init_vscode_shim(); init_src(); + init_workspace_files(); + init_active_editor(); AgentWorkspaceDocuments = class { constructor(params) { this.params = params; @@ -203757,8 +205183,18 @@ var init_AgentWorkspaceDocuments = __esm({ async openTextDocument(uri) { const document2 = ProtocolTextDocumentWithUri.from(uri); if (!this.agentDocuments.has(document2.underlying.uri)) { - const buffer2 = await import_promises4.default.readFile(uri.fsPath, "utf8"); - document2.underlying.content = buffer2.toString(); + if (!doesFileExist(uri)) { + logError( + "AgentWorkspaceDocuments.openTextDocument()", + "File does not exist", + uri.toString() + ); + } else if (uri.scheme === "file") { + const buffer2 = await import_promises5.default.readFile(uri.fsPath, "utf8"); + document2.underlying.content = buffer2.toString(); + } else { + logError("vscode.workspace.openTextDocument", `unable to read non-file URI: ${uri}`); + } } return Promise.resolve(this.loadedDocument(document2)); } @@ -203774,6 +205210,9 @@ var init_AgentWorkspaceDocuments = __esm({ tabGroups.reset(); resetActiveEditor(); } + async newTextEditorFromStringUri(uri) { + return this.newTextEditor(await this.openTextDocument(Uri.parse(uri))); + } newTextEditor(document2) { const selection = document2.protocolDocument.selection ? new Selection( new Position( @@ -203833,31 +205272,31 @@ var init_jsonrpc_alias = __esm({ }); // src/telemetry/index.ts -var import_telemetry21, AgentHandlerTelemetryRecorderProvider; +var import_telemetry27, AgentHandlerTelemetryRecorderProvider; var init_telemetry2 = __esm({ "src/telemetry/index.ts"() { "use strict"; init_src(); - import_telemetry21 = __toESM(require_dist()); - AgentHandlerTelemetryRecorderProvider = class extends import_telemetry21.TelemetryRecorderProvider { + import_telemetry27 = __toESM(require_dist()); + AgentHandlerTelemetryRecorderProvider = class extends import_telemetry27.TelemetryRecorderProvider { constructor(clientInfo2, marketingTrackingProvider) { super( { client: clientInfo2.name, clientVersion: clientInfo2.version }, - process.env.CODY_TELEMETRY_EXPORTER === "testing" ? new import_telemetry21.TestTelemetryExporter() : new GraphQLTelemetryExporter( + process.env.CODY_TELEMETRY_EXPORTER === "testing" ? new import_telemetry27.TestTelemetryExporter() : new GraphQLTelemetryExporter( graphqlClient, clientInfo2.extensionConfiguration?.anonymousUserID || "", "all" ), [ - new import_telemetry21.MarketingTrackingTelemetryProcessor(marketingTrackingProvider), + new import_telemetry27.MarketingTrackingTelemetryProcessor(marketingTrackingProvider), // Generate timestamps when recording events, instead of serverside - new import_telemetry21.TimestampTelemetryProcessor() + new import_telemetry27.TimestampTelemetryProcessor() ], { - ...import_telemetry21.defaultEventRecordingOptions, + ...import_telemetry27.defaultEventRecordingOptions, bufferTimeMs: 0 // disable buffering for now } @@ -203983,10 +205422,11 @@ var init_agent = __esm({ init_jsonrpc_alias(); init_telemetry2(); init_vscode_shim(); - init_utils10(); + init_utils12(); init_foldingRanges(); init_AgentCodeLenses(); init_emptyEvent(); + init_AgentWorkspaceEdit(); inMemorySecretStorageMap = /* @__PURE__ */ new Map(); globalState = new AgentGlobalState(); Agent = class extends MessageHandler { @@ -204196,7 +205636,9 @@ var init_agent = __esm({ }); this.registerAuthenticatedRequest("testing/networkRequests", async () => { const requests = this.params?.networkRequests ?? []; - return { requests: requests.map((req) => ({ url: req.url })) }; + return { + requests: requests.map((req) => ({ url: req.url, body: req.body })) + }; }); this.registerAuthenticatedRequest("testing/requestErrors", async () => { const requests = this.params?.requestErrors ?? []; @@ -204395,6 +205837,10 @@ var init_agent = __esm({ const result = convertGitCloneURLToCodebaseName(url2); return Promise.resolve(typeof result === "string" ? result : null); }); + this.registerAuthenticatedRequest("check/isCodyIgnoredFile", ({ urls }) => { + const result = urls.filter((url2) => isCodyIgnoredFile(Uri.file(url2))) ?? []; + return Promise.resolve(result.length > 0); + }); this.registerNotification("autocomplete/clearLastCandidate", async () => { const provider = await completionProvider(); if (!provider) { @@ -204422,32 +205868,29 @@ var init_agent = __esm({ commands.executeCommand("cody.command.generate-tests", commandArgs) ); }); + this.registerAuthenticatedRequest("editCommands/test", () => { + return this.createEditTask( + commands.executeCommand("cody.command.unit-tests") + ); + }); this.registerAuthenticatedRequest("commands/smell", () => { return this.createChatPanel( commands.executeCommand("cody.command.smell-code", commandArgs) ); }); - this.registerAuthenticatedRequest("commands/document", async () => { - const result = await commands.executeCommand( - "cody.command.document-code" + this.registerAuthenticatedRequest("commands/custom", ({ key }) => { + return this.executeCustomCommand( + commands.executeCommand( + "cody.action.command", + key, + commandArgs + ) + ); + }); + this.registerAuthenticatedRequest("commands/document", () => { + return this.createEditTask( + commands.executeCommand("cody.command.document-code") ); - if (result?.type !== "edit" || result.task === void 0) { - throw new TypeError( - `Expected a non-empty edit command result. Got ${JSON.stringify(result)}` - ); - } - this.tasks.set(result.task.id, result.task); - const { id } = result.task; - const disposable = result.task.onDidStateChange((newState) => { - this.notify("editTaskState/didChange", { id, state: newState }); - switch (newState) { - case 7 /* finished */: - case 8 /* error */: - disposable.dispose(); - break; - } - }); - return { id, state: result.task?.state }; }); this.registerAuthenticatedRequest("chat/new", async () => { return this.createChatPanel( @@ -204458,18 +205901,18 @@ var init_agent = __esm({ ); }); this.registerAuthenticatedRequest("chat/restore", async ({ modelID, messages: messages2, chatID }) => { - const chatModel = new SimpleChatModel(modelID, [], chatID); + const chatModel2 = new SimpleChatModel(modelID, [], chatID); for (const message of messages2) { if (message.error) { - chatModel.addErrorAsBotMessage(message.error); + chatModel2.addErrorAsBotMessage(message.error); } else if (message.speaker === "assistant") { - chatModel.addBotMessage(message); + chatModel2.addBotMessage(message); } else if (message.speaker === "human") { - chatModel.addHumanMessage(message); + chatModel2.addHumanMessage(message); } } const authStatus = await commands.executeCommand("cody.auth.status"); - await chatHistory.saveChat(authStatus, chatModel.toTranscriptJSON()); + await chatHistory.saveChat(authStatus, chatModel2.toTranscriptJSON()); return this.createChatPanel( Promise.resolve({ type: "chat", @@ -204660,6 +206103,41 @@ var init_agent = __esm({ } await panel.receiveMessage.cody_fireAsync(message); } + async createEditTask(commandResult) { + const result = await commandResult ?? { type: "empty-command-result" }; + if (result?.type !== "edit" || result.task === void 0) { + throw new TypeError( + `Expected a non-empty edit command result. Got ${JSON.stringify(result)}` + ); + } + this.tasks.set(result.task.id, result.task); + const { id } = result.task; + const disposable = result.task.onDidStateChange((newState) => { + this.notify("editTaskState/didChange", { + id, + state: newState, + error: this.codyError(result.task?.error) + }); + switch (newState) { + case 7 /* finished */: + case 8 /* error */: + disposable.dispose(); + break; + } + }); + return { + id, + state: result.task?.state, + error: this.codyError(result.task?.error) + }; + } + codyError(error) { + return error ? { + message: error.message, + stack: error.stack, + cause: error.cause instanceof Error ? this.codyError(error.cause) : void 0 + } : void 0; + } async createChatPanel(commandResult) { const result = await commandResult ?? { type: "empty-command-result" }; if (result?.type !== "chat") { @@ -204683,6 +206161,16 @@ var init_agent = __esm({ webviewPanel2.initialize(); return webviewPanel2.panelID; } + async executeCustomCommand(commandResult) { + const result = await commandResult ?? { type: "empty-command-result" }; + if (result?.type === "chat") { + return { type: "chat", chatResult: await this.createChatPanel(commandResult) }; + } + if (result?.type === "edit") { + return { type: "edit", editResult: await this.createEditTask(commandResult) }; + } + throw new Error("Invalid custom command result"); + } // Alternative to `registerRequest` that awaits on authentication changes to // propagate before calling the method handler. registerAuthenticatedRequest(method, callback) { @@ -204691,6 +206179,21 @@ var init_agent = __esm({ return callback(params, token); }); } + applyWorkspaceEdit(edit2, metadata2) { + if (edit2 instanceof AgentWorkspaceEdit) { + if (this.clientInfo?.capabilities?.editWorkspace === "enabled") { + return this.request("workspace/edit", { operations: edit2.operations, metadata: metadata2 }); + } + logError( + "Agent", + 'client does not support vscode.workspace.applyEdit() yet. If you are a client author, enable this operation by setting the client capability `editWorkspace: "enabled"`', + new Error().stack + // adding the stack trace to help debugging by this method is being called + ); + return Promise.resolve(false); + } + throw new TypeError(`Expected AgentWorkspaceEdit, got ${edit2}`); + } }; } }); @@ -205069,12 +206572,12 @@ function compileQuery(query, parser2) { compiledQuery: parser2.getLanguage().query(query.queryString) }; } -var fspromises7, path12, Queries, grammarInheritance; +var fspromises7, path13, Queries, grammarInheritance; var init_Queries = __esm({ "src/cli/evaluate-autocomplete/Queries.ts"() { "use strict"; fspromises7 = __toESM(require("fs/promises")); - path12 = __toESM(require("path")); + path13 = __toESM(require("path")); init_grammars(); Queries = class { constructor(queriesDirectory) { @@ -205099,7 +206602,7 @@ var init_Queries = __esm({ const languages3 = [language, ...grammarInheritance[language] ?? []]; const queryStrings = []; for (const queryLanguage of languages3) { - const queryPath = path12.join(this.queriesDirectory, queryLanguage, `${name}.scm`); + const queryPath = path13.join(this.queriesDirectory, queryLanguage, `${name}.scm`); try { const stat7 = await fspromises7.stat(queryPath); if (!stat7.isFile()) { @@ -205464,7 +206967,7 @@ var require_promise3 = __commonJS({ return r; }; Object.defineProperty(exports2, "__esModule", { value: true }); - function promisify5(fn) { + function promisify6(fn) { return function() { var args3 = []; for (var _i = 0; _i < arguments.length; _i++) { @@ -205481,7 +206984,7 @@ var require_promise3 = __commonJS({ }); }; } - exports2.promisify = promisify5; + exports2.promisify = promisify6; } }); @@ -205600,11 +207103,11 @@ var require_file_writer2 = __commonJS({ var FileWriter = ( /** @class */ function() { - function FileWriter2(path19, append2, encoding) { + function FileWriter2(path20, append2, encoding) { if (encoding === void 0) { encoding = DEFAULT_ENCODING; } - this.path = path19; + this.path = path20; this.append = append2; this.encoding = encoding; } @@ -205751,13 +207254,13 @@ var require_csv_writer = __commonJS({ var CsvWriter = ( /** @class */ function() { - function CsvWriter2(csvStringifier, path19, encoding, append2) { + function CsvWriter2(csvStringifier, path20, encoding, append2) { if (append2 === void 0) { append2 = DEFAULT_INITIAL_APPEND_FLAG; } this.csvStringifier = csvStringifier; this.append = append2; - this.fileWriter = new file_writer_1.FileWriter(path19, this.append, encoding); + this.fileWriter = new file_writer_1.FileWriter(path20, this.append, encoding); } CsvWriter2.prototype.writeRecords = function(records) { return __awaiter(this, void 0, void 0, function() { @@ -208016,7 +209519,7 @@ var init_mjs4 = __esm({ }); // ../node_modules/.pnpm/path-scurry@1.10.1/node_modules/path-scurry/dist/mjs/index.js -var import_path17, import_url3, actualFS, import_fs4, import_promises5, realpathSync, defaultFS, fsFromOption, uncDriveRegexp, uncToDrive, eitherSep, UNKNOWN, IFIFO, IFCHR, IFDIR, IFBLK, IFREG, IFLNK, IFSOCK, IFMT, IFMT_UNKNOWN, READDIR_CALLED, LSTAT_CALLED, ENOTDIR, ENOENT, ENOREADLINK, ENOREALPATH, ENOCHILD, TYPEMASK, entToType, normalizeCache, normalize2, normalizeNocaseCache, normalizeNocase, ResolveCache, ChildrenCache, setAsCwd, PathBase, PathWin32, PathPosix, PathScurryBase, PathScurryWin32, PathScurryPosix, PathScurryDarwin, Path, PathScurry; +var import_path17, import_url3, actualFS, import_fs4, import_promises6, realpathSync, defaultFS, fsFromOption, uncDriveRegexp, uncToDrive, eitherSep, UNKNOWN, IFIFO, IFCHR, IFDIR, IFBLK, IFREG, IFLNK, IFSOCK, IFMT, IFMT_UNKNOWN, READDIR_CALLED, LSTAT_CALLED, ENOTDIR, ENOENT, ENOREADLINK, ENOREALPATH, ENOCHILD, TYPEMASK, entToType, normalizeCache, normalize2, normalizeNocaseCache, normalizeNocase, ResolveCache, ChildrenCache, setAsCwd, PathBase, PathWin32, PathPosix, PathScurryBase, PathScurryWin32, PathScurryPosix, PathScurryDarwin, Path, PathScurry; var init_mjs5 = __esm({ "../node_modules/.pnpm/path-scurry@1.10.1/node_modules/path-scurry/dist/mjs/index.js"() { init_esm2(); @@ -208024,7 +209527,7 @@ var init_mjs5 = __esm({ import_url3 = require("url"); actualFS = __toESM(require("fs"), 1); import_fs4 = require("fs"); - import_promises5 = require("fs/promises"); + import_promises6 = require("fs/promises"); init_mjs4(); realpathSync = import_fs4.realpathSync.native; defaultFS = { @@ -208034,10 +209537,10 @@ var init_mjs5 = __esm({ readlinkSync: import_fs4.readlinkSync, realpathSync, promises: { - lstat: import_promises5.lstat, - readdir: import_promises5.readdir, - readlink: import_promises5.readlink, - realpath: import_promises5.realpath + lstat: import_promises6.lstat, + readdir: import_promises6.readdir, + readlink: import_promises6.readlink, + realpath: import_promises6.realpath } }; fsFromOption = (fsOption) => !fsOption || fsOption === defaultFS || fsOption === actualFS ? defaultFS : { @@ -208277,12 +209780,12 @@ var init_mjs5 = __esm({ /** * Get the Path object referenced by the string path, resolved from this Path */ - resolve(path19) { - if (!path19) { + resolve(path20) { + if (!path20) { return this; } - const rootPath = this.getRootString(path19); - const dir = path19.substring(rootPath.length); + const rootPath = this.getRootString(path20); + const dir = path20.substring(rootPath.length); const dirParts = dir.split(this.splitSep); const result = rootPath ? this.getRoot(rootPath).#resolveParts(dirParts) : this.#resolveParts(dirParts); return result; @@ -209026,8 +210529,8 @@ var init_mjs5 = __esm({ /** * @internal */ - getRootString(path19) { - return import_path17.win32.parse(path19).root; + getRootString(path20) { + return import_path17.win32.parse(path20).root; } /** * @internal @@ -209073,8 +210576,8 @@ var init_mjs5 = __esm({ /** * @internal */ - getRootString(path19) { - return path19.startsWith("/") ? "/" : ""; + getRootString(path20) { + return path20.startsWith("/") ? "/" : ""; } /** * @internal @@ -209163,11 +210666,11 @@ var init_mjs5 = __esm({ /** * Get the depth of a provided path, string, or the cwd */ - depth(path19 = this.cwd) { - if (typeof path19 === "string") { - path19 = this.cwd.resolve(path19); + depth(path20 = this.cwd) { + if (typeof path20 === "string") { + path20 = this.cwd.resolve(path20); } - return path19.depth(); + return path20.depth(); } /** * Return the cache of child entries. Exposed so subclasses can create @@ -209654,9 +211157,9 @@ var init_mjs5 = __esm({ process3(); return results; } - chdir(path19 = this.cwd) { + chdir(path20 = this.cwd) { const oldCwd = this.cwd; - this.cwd = typeof path19 === "string" ? this.cwd.resolve(path19) : path19; + this.cwd = typeof path20 === "string" ? this.cwd.resolve(path20) : path20; this.cwd[setAsCwd](oldCwd); } }; @@ -210022,8 +211525,8 @@ var init_processor = __esm({ } // match, absolute, ifdir entries() { - return [...this.store.entries()].map(([path19, n]) => [ - path19, + return [...this.store.entries()].map(([path20, n]) => [ + path20, !!(n & 2), !!(n & 1) ]); @@ -210235,9 +211738,9 @@ var init_walker = __esm({ #sep; signal; maxDepth; - constructor(patterns, path19, opts) { + constructor(patterns, path20, opts) { this.patterns = patterns; - this.path = path19; + this.path = path20; this.opts = opts; this.#sep = !opts.posix && opts.platform === "win32" ? "\\" : "/"; if (opts.ignore) { @@ -210251,11 +211754,11 @@ var init_walker = __esm({ }); } } - #ignored(path19) { - return this.seen.has(path19) || !!this.#ignore?.ignored?.(path19); + #ignored(path20) { + return this.seen.has(path20) || !!this.#ignore?.ignored?.(path20); } - #childrenIgnored(path19) { - return !!this.#ignore?.childrenIgnored?.(path19); + #childrenIgnored(path20) { + return !!this.#ignore?.childrenIgnored?.(path20); } // backpressure mechanism pause() { @@ -210452,8 +211955,8 @@ var init_walker = __esm({ }; GlobWalker = class extends GlobUtil { matches; - constructor(patterns, path19, opts) { - super(patterns, path19, opts); + constructor(patterns, path20, opts) { + super(patterns, path20, opts); this.matches = /* @__PURE__ */ new Set(); } matchEmit(e) { @@ -210491,8 +211994,8 @@ var init_walker = __esm({ }; GlobStream = class extends GlobUtil { results; - constructor(patterns, path19, opts) { - super(patterns, path19, opts); + constructor(patterns, path20, opts) { + super(patterns, path20, opts); this.results = new Minipass({ signal: this.signal, objectMode: true @@ -210860,44 +212363,44 @@ var init_path_arg2 = __esm({ import_path18 = require("path"); import_util4 = require("util"); init_platform3(); - pathArg2 = (path19, opt = {}) => { - const type = typeof path19; + pathArg2 = (path20, opt = {}) => { + const type = typeof path20; if (type !== "string") { - const ctor = path19 && type === "object" && path19.constructor; - const received = ctor && ctor.name ? `an instance of ${ctor.name}` : type === "object" ? (0, import_util4.inspect)(path19) : `type ${type} ${path19}`; + const ctor = path20 && type === "object" && path20.constructor; + const received = ctor && ctor.name ? `an instance of ${ctor.name}` : type === "object" ? (0, import_util4.inspect)(path20) : `type ${type} ${path20}`; const msg = `The "path" argument must be of type string. Received ${received}`; throw Object.assign(new TypeError(msg), { - path: path19, + path: path20, code: "ERR_INVALID_ARG_TYPE" }); } - if (/\0/.test(path19)) { + if (/\0/.test(path20)) { const msg = "path must be a string without null bytes"; throw Object.assign(new TypeError(msg), { - path: path19, + path: path20, code: "ERR_INVALID_ARG_VALUE" }); } - path19 = (0, import_path18.resolve)(path19); - const { root } = (0, import_path18.parse)(path19); - if (path19 === root && opt.preserveRoot !== false) { + path20 = (0, import_path18.resolve)(path20); + const { root } = (0, import_path18.parse)(path20); + if (path20 === root && opt.preserveRoot !== false) { const msg = "refusing to remove root directory without preserveRoot:false"; throw Object.assign(new Error(msg), { - path: path19, + path: path20, code: "ERR_PRESERVE_ROOT" }); } if (platform_default === "win32") { const badWinChars = /[*|"<>?:]/; - const { root: root2 } = (0, import_path18.parse)(path19); - if (badWinChars.test(path19.substring(root2.length))) { + const { root: root2 } = (0, import_path18.parse)(path20); + if (badWinChars.test(path20.substring(root2.length))) { throw Object.assign(new Error("Illegal characters in path."), { - path: path19, + path: path20, code: "EINVAL" }); } } - return path19; + return path20; }; path_arg_default = pathArg2; } @@ -210910,16 +212413,16 @@ var init_fs = __esm({ import_fs5 = __toESM(require("fs"), 1); import_fs6 = require("fs"); import_fs7 = require("fs"); - readdirSync2 = (path19) => (0, import_fs7.readdirSync)(path19, { withFileTypes: true }); - chmod = (path19, mode) => new Promise((res, rej) => import_fs5.default.chmod(path19, mode, (er, ...d) => er ? rej(er) : res(...d))); - mkdir4 = (path19, options2) => new Promise((res, rej) => import_fs5.default.mkdir(path19, options2, (er, made) => er ? rej(er) : res(made))); - readdir2 = (path19) => new Promise((res, rej) => import_fs5.default.readdir(path19, { withFileTypes: true }, (er, data) => er ? rej(er) : res(data))); + readdirSync2 = (path20) => (0, import_fs7.readdirSync)(path20, { withFileTypes: true }); + chmod = (path20, mode) => new Promise((res, rej) => import_fs5.default.chmod(path20, mode, (er, ...d) => er ? rej(er) : res(...d))); + mkdir4 = (path20, options2) => new Promise((res, rej) => import_fs5.default.mkdir(path20, options2, (er, made) => er ? rej(er) : res(made))); + readdir2 = (path20) => new Promise((res, rej) => import_fs5.default.readdir(path20, { withFileTypes: true }, (er, data) => er ? rej(er) : res(data))); rename2 = (oldPath, newPath) => new Promise((res, rej) => import_fs5.default.rename(oldPath, newPath, (er, ...d) => er ? rej(er) : res(...d))); - rm2 = (path19, options2) => new Promise((res, rej) => import_fs5.default.rm(path19, options2, (er, ...d) => er ? rej(er) : res(...d))); - rmdir = (path19) => new Promise((res, rej) => import_fs5.default.rmdir(path19, (er, ...d) => er ? rej(er) : res(...d))); - stat4 = (path19) => new Promise((res, rej) => import_fs5.default.stat(path19, (er, data) => er ? rej(er) : res(data))); - lstat2 = (path19) => new Promise((res, rej) => import_fs5.default.lstat(path19, (er, data) => er ? rej(er) : res(data))); - unlink = (path19) => new Promise((res, rej) => import_fs5.default.unlink(path19, (er, ...d) => er ? rej(er) : res(...d))); + rm2 = (path20, options2) => new Promise((res, rej) => import_fs5.default.rm(path20, options2, (er, ...d) => er ? rej(er) : res(...d))); + rmdir = (path20) => new Promise((res, rej) => import_fs5.default.rmdir(path20, (er, ...d) => er ? rej(er) : res(...d))); + stat4 = (path20) => new Promise((res, rej) => import_fs5.default.stat(path20, (er, data) => er ? rej(er) : res(data))); + lstat2 = (path20) => new Promise((res, rej) => import_fs5.default.lstat(path20, (er, data) => er ? rej(er) : res(data))); + unlink = (path20) => new Promise((res, rej) => import_fs5.default.unlink(path20, (er, ...d) => er ? rej(er) : res(...d))); promises = { chmod, mkdir: mkdir4, @@ -210940,10 +212443,10 @@ var init_readdir_or_error = __esm({ "../node_modules/.pnpm/rimraf@5.0.5/node_modules/rimraf/dist/esm/readdir-or-error.js"() { init_fs(); ({ readdir: readdir3 } = promises); - readdirOrError = (path19) => readdir3(path19).catch((er) => er); - readdirOrErrorSync = (path19) => { + readdirOrError = (path20) => readdir3(path20).catch((er) => er); + readdirOrErrorSync = (path20) => { try { - return readdirSync2(path19); + return readdirSync2(path20); } catch (er) { return er; } @@ -210981,35 +212484,35 @@ var init_rimraf_posix = __esm({ init_readdir_or_error(); init_ignore_enoent(); ({ lstat: lstat3, rmdir: rmdir2, unlink: unlink2 } = promises); - rimrafPosix = async (path19, opt) => { + rimrafPosix = async (path20, opt) => { if (opt?.signal?.aborted) { throw opt.signal.reason; } try { - return await rimrafPosixDir(path19, opt, await lstat3(path19)); + return await rimrafPosixDir(path20, opt, await lstat3(path20)); } catch (er) { if (er?.code === "ENOENT") return true; throw er; } }; - rimrafPosixSync = (path19, opt) => { + rimrafPosixSync = (path20, opt) => { if (opt?.signal?.aborted) { throw opt.signal.reason; } try { - return rimrafPosixDirSync(path19, opt, (0, import_fs6.lstatSync)(path19)); + return rimrafPosixDirSync(path20, opt, (0, import_fs6.lstatSync)(path20)); } catch (er) { if (er?.code === "ENOENT") return true; throw er; } }; - rimrafPosixDir = async (path19, opt, ent) => { + rimrafPosixDir = async (path20, opt, ent) => { if (opt?.signal?.aborted) { throw opt.signal.reason; } - const entries = ent.isDirectory() ? await readdirOrError(path19) : null; + const entries = ent.isDirectory() ? await readdirOrError(path20) : null; if (!Array.isArray(entries)) { if (entries) { if (entries.code === "ENOENT") { @@ -211019,30 +212522,30 @@ var init_rimraf_posix = __esm({ throw entries; } } - if (opt.filter && !await opt.filter(path19, ent)) { + if (opt.filter && !await opt.filter(path20, ent)) { return false; } - await ignoreENOENT(unlink2(path19)); + await ignoreENOENT(unlink2(path20)); return true; } - const removedAll = (await Promise.all(entries.map((ent2) => rimrafPosixDir((0, import_path19.resolve)(path19, ent2.name), opt, ent2)))).reduce((a, b) => a && b, true); + const removedAll = (await Promise.all(entries.map((ent2) => rimrafPosixDir((0, import_path19.resolve)(path20, ent2.name), opt, ent2)))).reduce((a, b) => a && b, true); if (!removedAll) { return false; } - if (opt.preserveRoot === false && path19 === (0, import_path19.parse)(path19).root) { + if (opt.preserveRoot === false && path20 === (0, import_path19.parse)(path20).root) { return false; } - if (opt.filter && !await opt.filter(path19, ent)) { + if (opt.filter && !await opt.filter(path20, ent)) { return false; } - await ignoreENOENT(rmdir2(path19)); + await ignoreENOENT(rmdir2(path20)); return true; }; - rimrafPosixDirSync = (path19, opt, ent) => { + rimrafPosixDirSync = (path20, opt, ent) => { if (opt?.signal?.aborted) { throw opt.signal.reason; } - const entries = ent.isDirectory() ? readdirOrErrorSync(path19) : null; + const entries = ent.isDirectory() ? readdirOrErrorSync(path20) : null; if (!Array.isArray(entries)) { if (entries) { if (entries.code === "ENOENT") { @@ -211052,27 +212555,27 @@ var init_rimraf_posix = __esm({ throw entries; } } - if (opt.filter && !opt.filter(path19, ent)) { + if (opt.filter && !opt.filter(path20, ent)) { return false; } - ignoreENOENTSync(() => (0, import_fs6.unlinkSync)(path19)); + ignoreENOENTSync(() => (0, import_fs6.unlinkSync)(path20)); return true; } let removedAll = true; for (const ent2 of entries) { - const p = (0, import_path19.resolve)(path19, ent2.name); + const p = (0, import_path19.resolve)(path20, ent2.name); removedAll = rimrafPosixDirSync(p, opt, ent2) && removedAll; } - if (opt.preserveRoot === false && path19 === (0, import_path19.parse)(path19).root) { + if (opt.preserveRoot === false && path20 === (0, import_path19.parse)(path20).root) { return false; } if (!removedAll) { return false; } - if (opt.filter && !opt.filter(path19, ent)) { + if (opt.filter && !opt.filter(path20, ent)) { return false; } - ignoreENOENTSync(() => (0, import_fs6.rmdirSync)(path19)); + ignoreENOENTSync(() => (0, import_fs6.rmdirSync)(path20)); return true; }; } @@ -211084,9 +212587,9 @@ var init_fix_eperm = __esm({ "../node_modules/.pnpm/rimraf@5.0.5/node_modules/rimraf/dist/esm/fix-eperm.js"() { init_fs(); ({ chmod: chmod2 } = promises); - fixEPERM = (fn) => async (path19) => { + fixEPERM = (fn) => async (path20) => { try { - return await fn(path19); + return await fn(path20); } catch (er) { const fer = er; if (fer?.code === "ENOENT") { @@ -211094,7 +212597,7 @@ var init_fix_eperm = __esm({ } if (fer?.code === "EPERM") { try { - await chmod2(path19, 438); + await chmod2(path20, 438); } catch (er2) { const fer2 = er2; if (fer2?.code === "ENOENT") { @@ -211102,14 +212605,14 @@ var init_fix_eperm = __esm({ } throw er; } - return await fn(path19); + return await fn(path20); } throw er; } }; - fixEPERMSync = (fn) => (path19) => { + fixEPERMSync = (fn) => (path20) => { try { - return fn(path19); + return fn(path20); } catch (er) { const fer = er; if (fer?.code === "ENOENT") { @@ -211117,7 +212620,7 @@ var init_fix_eperm = __esm({ } if (fer?.code === "EPERM") { try { - (0, import_fs6.chmodSync)(path19, 438); + (0, import_fs6.chmodSync)(path20, 438); } catch (er2) { const fer2 = er2; if (fer2?.code === "ENOENT") { @@ -211125,7 +212628,7 @@ var init_fix_eperm = __esm({ } throw er; } - return fn(path19); + return fn(path20); } throw er; } @@ -211142,23 +212645,23 @@ var init_retry_busy = __esm({ MAXRETRIES = 10; codes = /* @__PURE__ */ new Set(["EMFILE", "ENFILE", "EBUSY"]); retryBusy = (fn) => { - const method = async (path19, opt, backoff = 1, total = 0) => { + const method = async (path20, opt, backoff = 1, total = 0) => { const mbo = opt.maxBackoff || MAXBACKOFF; const rate = opt.backoff || RATE; const max = opt.maxRetries || MAXRETRIES; let retries = 0; while (true) { try { - return await fn(path19); + return await fn(path20); } catch (er) { const fer = er; - if (fer?.path === path19 && fer?.code && codes.has(fer.code)) { + if (fer?.path === path20 && fer?.code && codes.has(fer.code)) { backoff = Math.ceil(backoff * rate); total = backoff + total; if (total < mbo) { return new Promise((res, rej) => { setTimeout(() => { - method(path19, opt, backoff, total).then(res, rej); + method(path20, opt, backoff, total).then(res, rej); }, backoff); }); } @@ -211174,15 +212677,15 @@ var init_retry_busy = __esm({ return method; }; retryBusySync = (fn) => { - const method = (path19, opt) => { + const method = (path20, opt) => { const max = opt.maxRetries || MAXRETRIES; let retries = 0; while (true) { try { - return fn(path19); + return fn(path20); } catch (er) { const fer = er; - if (fer?.path === path19 && fer?.code && codes.has(fer.code) && retries < max) { + if (fer?.path === path20 && fer?.code && codes.has(fer.code) && retries < max) { retries++; continue; } @@ -211204,16 +212707,16 @@ var init_default_tmp = __esm({ init_fs(); init_platform3(); ({ stat: stat5 } = promises); - isDirSync = (path19) => { + isDirSync = (path20) => { try { - return (0, import_fs6.statSync)(path19).isDirectory(); + return (0, import_fs6.statSync)(path20).isDirectory(); } catch (er) { return false; } }; - isDir = (path19) => stat5(path19).then((st) => st.isDirectory(), () => false); - win32DefaultTmp = async (path19) => { - const { root } = (0, import_path20.parse)(path19); + isDir = (path20) => stat5(path20).then((st) => st.isDirectory(), () => false); + win32DefaultTmp = async (path20) => { + const { root } = (0, import_path20.parse)(path20); const tmp = (0, import_os8.tmpdir)(); const { root: tmpRoot } = (0, import_path20.parse)(tmp); if (root.toLowerCase() === tmpRoot.toLowerCase()) { @@ -211225,8 +212728,8 @@ var init_default_tmp = __esm({ } return root; }; - win32DefaultTmpSync = (path19) => { - const { root } = (0, import_path20.parse)(path19); + win32DefaultTmpSync = (path20) => { + const { root } = (0, import_path20.parse)(path20); const tmp = (0, import_os8.tmpdir)(); const { root: tmpRoot } = (0, import_path20.parse)(tmp); if (root.toLowerCase() === tmpRoot.toLowerCase()) { @@ -211255,10 +212758,10 @@ var init_rimraf_move_remove = __esm({ init_fs(); init_readdir_or_error(); ({ lstat: lstat4, rename: rename3, unlink: unlink3, rmdir: rmdir3, chmod: chmod3 } = promises); - uniqueFilename = (path19) => `.${(0, import_path21.basename)(path19)}.${Math.random()}`; - unlinkFixEPERM = async (path19) => unlink3(path19).catch((er) => { + uniqueFilename = (path20) => `.${(0, import_path21.basename)(path20)}.${Math.random()}`; + unlinkFixEPERM = async (path20) => unlink3(path20).catch((er) => { if (er.code === "EPERM") { - return chmod3(path19, 438).then(() => unlink3(path19), (er2) => { + return chmod3(path20, 438).then(() => unlink3(path20), (er2) => { if (er2.code === "ENOENT") { return; } @@ -211269,13 +212772,13 @@ var init_rimraf_move_remove = __esm({ } throw er; }); - unlinkFixEPERMSync = (path19) => { + unlinkFixEPERMSync = (path20) => { try { - (0, import_fs6.unlinkSync)(path19); + (0, import_fs6.unlinkSync)(path20); } catch (er) { if (er?.code === "EPERM") { try { - return (0, import_fs6.chmodSync)(path19, 438); + return (0, import_fs6.chmodSync)(path20, 438); } catch (er2) { if (er2?.code === "ENOENT") { return; @@ -211288,29 +212791,29 @@ var init_rimraf_move_remove = __esm({ throw er; } }; - rimrafMoveRemove = async (path19, opt) => { + rimrafMoveRemove = async (path20, opt) => { if (opt?.signal?.aborted) { throw opt.signal.reason; } try { - return await rimrafMoveRemoveDir(path19, opt, await lstat4(path19)); + return await rimrafMoveRemoveDir(path20, opt, await lstat4(path20)); } catch (er) { if (er?.code === "ENOENT") return true; throw er; } }; - rimrafMoveRemoveDir = async (path19, opt, ent) => { + rimrafMoveRemoveDir = async (path20, opt, ent) => { if (opt?.signal?.aborted) { throw opt.signal.reason; } if (!opt.tmp) { - return rimrafMoveRemoveDir(path19, { ...opt, tmp: await defaultTmp(path19) }, ent); + return rimrafMoveRemoveDir(path20, { ...opt, tmp: await defaultTmp(path20) }, ent); } - if (path19 === opt.tmp && (0, import_path21.parse)(path19).root !== path19) { + if (path20 === opt.tmp && (0, import_path21.parse)(path20).root !== path20) { throw new Error("cannot delete temp directory used for deletion"); } - const entries = ent.isDirectory() ? await readdirOrError(path19) : null; + const entries = ent.isDirectory() ? await readdirOrError(path20) : null; if (!Array.isArray(entries)) { if (entries) { if (entries.code === "ENOENT") { @@ -211320,54 +212823,54 @@ var init_rimraf_move_remove = __esm({ throw entries; } } - if (opt.filter && !await opt.filter(path19, ent)) { + if (opt.filter && !await opt.filter(path20, ent)) { return false; } - await ignoreENOENT(tmpUnlink(path19, opt.tmp, unlinkFixEPERM)); + await ignoreENOENT(tmpUnlink(path20, opt.tmp, unlinkFixEPERM)); return true; } - const removedAll = (await Promise.all(entries.map((ent2) => rimrafMoveRemoveDir((0, import_path21.resolve)(path19, ent2.name), opt, ent2)))).reduce((a, b) => a && b, true); + const removedAll = (await Promise.all(entries.map((ent2) => rimrafMoveRemoveDir((0, import_path21.resolve)(path20, ent2.name), opt, ent2)))).reduce((a, b) => a && b, true); if (!removedAll) { return false; } - if (opt.preserveRoot === false && path19 === (0, import_path21.parse)(path19).root) { + if (opt.preserveRoot === false && path20 === (0, import_path21.parse)(path20).root) { return false; } - if (opt.filter && !await opt.filter(path19, ent)) { + if (opt.filter && !await opt.filter(path20, ent)) { return false; } - await ignoreENOENT(tmpUnlink(path19, opt.tmp, rmdir3)); + await ignoreENOENT(tmpUnlink(path20, opt.tmp, rmdir3)); return true; }; - tmpUnlink = async (path19, tmp, rm4) => { - const tmpFile = (0, import_path21.resolve)(tmp, uniqueFilename(path19)); - await rename3(path19, tmpFile); + tmpUnlink = async (path20, tmp, rm4) => { + const tmpFile = (0, import_path21.resolve)(tmp, uniqueFilename(path20)); + await rename3(path20, tmpFile); return await rm4(tmpFile); }; - rimrafMoveRemoveSync = (path19, opt) => { + rimrafMoveRemoveSync = (path20, opt) => { if (opt?.signal?.aborted) { throw opt.signal.reason; } try { - return rimrafMoveRemoveDirSync(path19, opt, (0, import_fs6.lstatSync)(path19)); + return rimrafMoveRemoveDirSync(path20, opt, (0, import_fs6.lstatSync)(path20)); } catch (er) { if (er?.code === "ENOENT") return true; throw er; } }; - rimrafMoveRemoveDirSync = (path19, opt, ent) => { + rimrafMoveRemoveDirSync = (path20, opt, ent) => { if (opt?.signal?.aborted) { throw opt.signal.reason; } if (!opt.tmp) { - return rimrafMoveRemoveDirSync(path19, { ...opt, tmp: defaultTmpSync(path19) }, ent); + return rimrafMoveRemoveDirSync(path20, { ...opt, tmp: defaultTmpSync(path20) }, ent); } const tmp = opt.tmp; - if (path19 === opt.tmp && (0, import_path21.parse)(path19).root !== path19) { + if (path20 === opt.tmp && (0, import_path21.parse)(path20).root !== path20) { throw new Error("cannot delete temp directory used for deletion"); } - const entries = ent.isDirectory() ? readdirOrErrorSync(path19) : null; + const entries = ent.isDirectory() ? readdirOrErrorSync(path20) : null; if (!Array.isArray(entries)) { if (entries) { if (entries.code === "ENOENT") { @@ -211377,32 +212880,32 @@ var init_rimraf_move_remove = __esm({ throw entries; } } - if (opt.filter && !opt.filter(path19, ent)) { + if (opt.filter && !opt.filter(path20, ent)) { return false; } - ignoreENOENTSync(() => tmpUnlinkSync(path19, tmp, unlinkFixEPERMSync)); + ignoreENOENTSync(() => tmpUnlinkSync(path20, tmp, unlinkFixEPERMSync)); return true; } let removedAll = true; for (const ent2 of entries) { - const p = (0, import_path21.resolve)(path19, ent2.name); + const p = (0, import_path21.resolve)(path20, ent2.name); removedAll = rimrafMoveRemoveDirSync(p, opt, ent2) && removedAll; } if (!removedAll) { return false; } - if (opt.preserveRoot === false && path19 === (0, import_path21.parse)(path19).root) { + if (opt.preserveRoot === false && path20 === (0, import_path21.parse)(path20).root) { return false; } - if (opt.filter && !opt.filter(path19, ent)) { + if (opt.filter && !opt.filter(path20, ent)) { return false; } - ignoreENOENTSync(() => tmpUnlinkSync(path19, tmp, import_fs6.rmdirSync)); + ignoreENOENTSync(() => tmpUnlinkSync(path20, tmp, import_fs6.rmdirSync)); return true; }; - tmpUnlinkSync = (path19, tmp, rmSync3) => { - const tmpFile = (0, import_path21.resolve)(tmp, uniqueFilename(path19)); - (0, import_fs6.renameSync)(path19, tmpFile); + tmpUnlinkSync = (path20, tmp, rmSync3) => { + const tmpFile = (0, import_path21.resolve)(tmp, uniqueFilename(path20)); + (0, import_fs6.renameSync)(path20, tmpFile); return rmSync3(tmpFile); }; } @@ -211424,31 +212927,31 @@ var init_rimraf_windows = __esm({ rimrafWindowsFileSync = retryBusySync(fixEPERMSync(import_fs6.unlinkSync)); rimrafWindowsDirRetry = retryBusy(fixEPERM(rmdir4)); rimrafWindowsDirRetrySync = retryBusySync(fixEPERMSync(import_fs6.rmdirSync)); - rimrafWindowsDirMoveRemoveFallback = async (path19, opt) => { + rimrafWindowsDirMoveRemoveFallback = async (path20, opt) => { if (opt?.signal?.aborted) { throw opt.signal.reason; } const { filter: filter3, ...options2 } = opt; try { - return await rimrafWindowsDirRetry(path19, options2); + return await rimrafWindowsDirRetry(path20, options2); } catch (er) { if (er?.code === "ENOTEMPTY") { - return await rimrafMoveRemove(path19, options2); + return await rimrafMoveRemove(path20, options2); } throw er; } }; - rimrafWindowsDirMoveRemoveFallbackSync = (path19, opt) => { + rimrafWindowsDirMoveRemoveFallbackSync = (path20, opt) => { if (opt?.signal?.aborted) { throw opt.signal.reason; } const { filter: filter3, ...options2 } = opt; try { - return rimrafWindowsDirRetrySync(path19, options2); + return rimrafWindowsDirRetrySync(path20, options2); } catch (er) { const fer = er; if (fer?.code === "ENOTEMPTY") { - return rimrafMoveRemoveSync(path19, options2); + return rimrafMoveRemoveSync(path20, options2); } throw er; } @@ -211456,35 +212959,35 @@ var init_rimraf_windows = __esm({ START = Symbol("start"); CHILD = Symbol("child"); FINISH = Symbol("finish"); - rimrafWindows = async (path19, opt) => { + rimrafWindows = async (path20, opt) => { if (opt?.signal?.aborted) { throw opt.signal.reason; } try { - return await rimrafWindowsDir(path19, opt, await lstat5(path19), START); + return await rimrafWindowsDir(path20, opt, await lstat5(path20), START); } catch (er) { if (er?.code === "ENOENT") return true; throw er; } }; - rimrafWindowsSync = (path19, opt) => { + rimrafWindowsSync = (path20, opt) => { if (opt?.signal?.aborted) { throw opt.signal.reason; } try { - return rimrafWindowsDirSync(path19, opt, (0, import_fs6.lstatSync)(path19), START); + return rimrafWindowsDirSync(path20, opt, (0, import_fs6.lstatSync)(path20), START); } catch (er) { if (er?.code === "ENOENT") return true; throw er; } }; - rimrafWindowsDir = async (path19, opt, ent, state = START) => { + rimrafWindowsDir = async (path20, opt, ent, state = START) => { if (opt?.signal?.aborted) { throw opt.signal.reason; } - const entries = ent.isDirectory() ? await readdirOrError(path19) : null; + const entries = ent.isDirectory() ? await readdirOrError(path20) : null; if (!Array.isArray(entries)) { if (entries) { if (entries.code === "ENOENT") { @@ -211494,32 +212997,32 @@ var init_rimraf_windows = __esm({ throw entries; } } - if (opt.filter && !await opt.filter(path19, ent)) { + if (opt.filter && !await opt.filter(path20, ent)) { return false; } - await ignoreENOENT(rimrafWindowsFile(path19, opt)); + await ignoreENOENT(rimrafWindowsFile(path20, opt)); return true; } const s = state === START ? CHILD : state; - const removedAll = (await Promise.all(entries.map((ent2) => rimrafWindowsDir((0, import_path22.resolve)(path19, ent2.name), opt, ent2, s)))).reduce((a, b) => a && b, true); + const removedAll = (await Promise.all(entries.map((ent2) => rimrafWindowsDir((0, import_path22.resolve)(path20, ent2.name), opt, ent2, s)))).reduce((a, b) => a && b, true); if (state === START) { - return rimrafWindowsDir(path19, opt, ent, FINISH); + return rimrafWindowsDir(path20, opt, ent, FINISH); } else if (state === FINISH) { - if (opt.preserveRoot === false && path19 === (0, import_path22.parse)(path19).root) { + if (opt.preserveRoot === false && path20 === (0, import_path22.parse)(path20).root) { return false; } if (!removedAll) { return false; } - if (opt.filter && !await opt.filter(path19, ent)) { + if (opt.filter && !await opt.filter(path20, ent)) { return false; } - await ignoreENOENT(rimrafWindowsDirMoveRemoveFallback(path19, opt)); + await ignoreENOENT(rimrafWindowsDirMoveRemoveFallback(path20, opt)); } return true; }; - rimrafWindowsDirSync = (path19, opt, ent, state = START) => { - const entries = ent.isDirectory() ? readdirOrErrorSync(path19) : null; + rimrafWindowsDirSync = (path20, opt, ent, state = START) => { + const entries = ent.isDirectory() ? readdirOrErrorSync(path20) : null; if (!Array.isArray(entries)) { if (entries) { if (entries.code === "ENOENT") { @@ -211529,32 +213032,32 @@ var init_rimraf_windows = __esm({ throw entries; } } - if (opt.filter && !opt.filter(path19, ent)) { + if (opt.filter && !opt.filter(path20, ent)) { return false; } - ignoreENOENTSync(() => rimrafWindowsFileSync(path19, opt)); + ignoreENOENTSync(() => rimrafWindowsFileSync(path20, opt)); return true; } let removedAll = true; for (const ent2 of entries) { const s = state === START ? CHILD : state; - const p = (0, import_path22.resolve)(path19, ent2.name); + const p = (0, import_path22.resolve)(path20, ent2.name); removedAll = rimrafWindowsDirSync(p, opt, ent2, s) && removedAll; } if (state === START) { - return rimrafWindowsDirSync(path19, opt, ent, FINISH); + return rimrafWindowsDirSync(path20, opt, ent, FINISH); } else if (state === FINISH) { - if (opt.preserveRoot === false && path19 === (0, import_path22.parse)(path19).root) { + if (opt.preserveRoot === false && path20 === (0, import_path22.parse)(path20).root) { return false; } if (!removedAll) { return false; } - if (opt.filter && !opt.filter(path19, ent)) { + if (opt.filter && !opt.filter(path20, ent)) { return false; } ignoreENOENTSync(() => { - rimrafWindowsDirMoveRemoveFallbackSync(path19, opt); + rimrafWindowsDirMoveRemoveFallbackSync(path20, opt); }); } return true; @@ -211580,16 +213083,16 @@ var init_rimraf_native = __esm({ "../node_modules/.pnpm/rimraf@5.0.5/node_modules/rimraf/dist/esm/rimraf-native.js"() { init_fs(); ({ rm: rm3 } = promises); - rimrafNative = async (path19, opt) => { - await rm3(path19, { + rimrafNative = async (path20, opt) => { + await rm3(path20, { ...opt, force: true, recursive: true }); return true; }; - rimrafNativeSync = (path19, opt) => { - (0, import_fs6.rmSync)(path19, { + rimrafNativeSync = (path20, opt) => { + (0, import_fs6.rmSync)(path20, { ...opt, force: true, recursive: true @@ -211627,26 +213130,26 @@ var init_esm4 = __esm({ init_rimraf_windows(); init_use_native2(); init_opt_arg(); - wrap = (fn) => async (path19, opt) => { + wrap = (fn) => async (path20, opt) => { const options2 = optArg(opt); if (options2.glob) { - path19 = await glob(path19, options2.glob); + path20 = await glob(path20, options2.glob); } - if (Array.isArray(path19)) { - return !!(await Promise.all(path19.map((p) => fn(path_arg_default(p, options2), options2)))).reduce((a, b) => a && b, true); + if (Array.isArray(path20)) { + return !!(await Promise.all(path20.map((p) => fn(path_arg_default(p, options2), options2)))).reduce((a, b) => a && b, true); } else { - return !!await fn(path_arg_default(path19, options2), options2); + return !!await fn(path_arg_default(path20, options2), options2); } }; - wrapSync = (fn) => (path19, opt) => { + wrapSync = (fn) => (path20, opt) => { const options2 = optArgSync(opt); if (options2.glob) { - path19 = globSync(path19, options2.glob); + path20 = globSync(path20, options2.glob); } - if (Array.isArray(path19)) { - return !!path19.map((p) => fn(path_arg_default(p, options2), options2)).reduce((a, b) => a && b, true); + if (Array.isArray(path20)) { + return !!path20.map((p) => fn(path_arg_default(p, options2), options2)).reduce((a, b) => a && b, true); } else { - return !!fn(path_arg_default(path19, options2), options2); + return !!fn(path_arg_default(path20, options2), options2); } }; nativeSync = wrapSync(rimrafNativeSync); @@ -211661,8 +213164,8 @@ var init_esm4 = __esm({ moveRemove = Object.assign(wrap(rimrafMoveRemove), { sync: moveRemoveSync }); - rimrafSync = wrapSync((path19, opt) => useNativeSync2(opt) ? rimrafNativeSync(path19, opt) : rimrafManualSync(path19, opt)); - rimraf_ = wrap((path19, opt) => useNative2(opt) ? rimrafNative(path19, opt) : rimrafManual(path19, opt)); + rimrafSync = wrapSync((path20, opt) => useNativeSync2(opt) ? rimrafNativeSync(path20, opt) : rimrafManualSync(path20, opt)); + rimraf_ = wrap((path20, opt) => useNative2(opt) ? rimrafNative(path20, opt) : rimrafManual(path20, opt)); rimraf = Object.assign(rimraf_, { rimraf: rimraf_, sync: rimrafSync, @@ -212337,7 +213840,7 @@ var init_triggerAutocomplete = __esm({ async function evaluateBfgStrategy(client, options2) { const { workspace: workspace2 } = options2; const queries = new Queries(options2.queriesDirectory); - const grammarDirectory = path14.normalize(options2.treeSitterGrammars); + const grammarDirectory = path15.normalize(options2.treeSitterGrammars); const files = (0, import_child_process5.execSync)("git ls-files", { cwd: workspace2 }).toString().split("\n"); files.sort(); let remainingTests = options2.testCount; @@ -212351,7 +213854,7 @@ async function evaluateBfgStrategy(client, options2) { if (!matchesGlobPatterns(options2.includeFilepath ?? [], options2.excludeFilepath ?? [], file)) { continue; } - const filePath = path14.join(workspace2, file); + const filePath = path15.join(workspace2, file); const uri = Uri.file(filePath); const stat7 = await fspromises10.stat(filePath); if (!stat7.isFile()) { @@ -212376,7 +213879,7 @@ async function evaluateBfgStrategy(client, options2) { filepath: file, strategy: options2.fixture.strategy, fixture: options2.fixture.name, - workspace: path14.basename(options2.workspace), + workspace: path15.basename(options2.workspace), revision }, content, @@ -212445,13 +213948,13 @@ async function evaluateBfgStrategy(client, options2) { await testCleanup(options2); } } -var import_child_process5, fspromises10, path14; +var import_child_process5, fspromises10, path15; var init_strategy_bfg = __esm({ "src/cli/evaluate-autocomplete/strategy-bfg.ts"() { "use strict"; import_child_process5 = require("child_process"); fspromises10 = __toESM(require("fs/promises")); - path14 = __toESM(require("path")); + path15 = __toESM(require("path")); init_vscode_shim(); init_grammars(); init_language2(); @@ -212850,7 +214353,7 @@ async function evaluateGitLogStrategy(client, options2) { )) { continue; } - const fullPath = path15.join(workspace2, filePath); + const fullPath = path16.join(workspace2, filePath); const uri = Uri.file(fullPath); const content = (await fspromises11.readFile(fullPath)).toString(); const languageid = getLanguageForFileName(filePath); @@ -212861,7 +214364,7 @@ async function evaluateGitLogStrategy(client, options2) { revision: commit, fixture: options2.fixture.name, strategy: options2.fixture.strategy, - workspace: path15.basename(options2.workspace) + workspace: path16.basename(options2.workspace) }, content, uri @@ -212923,18 +214426,18 @@ async function evaluateGitLogStrategy(client, options2) { } } finally { await testCleanup(options2); - const submodulesDir = path15.join(workspace2, ".."); + const submodulesDir = path16.join(workspace2, ".."); (0, import_child_process6.execSync)("git submodule deinit -f .", { cwd: submodulesDir }).toString(); (0, import_child_process6.execSync)("git submodule update --init", { cwd: submodulesDir }).toString(); } } -var import_child_process6, fspromises11, path15; +var import_child_process6, fspromises11, path16; var init_strategy_git_log = __esm({ "src/cli/evaluate-autocomplete/strategy-git-log.ts"() { "use strict"; import_child_process6 = require("child_process"); fspromises11 = __toESM(require("fs/promises")); - path15 = __toESM(require("path")); + path16 = __toESM(require("path")); init_mjs6(); init_vscode_shim(); init_language2(); @@ -212961,8 +214464,8 @@ async function loadEvaluationConfig(options2) { ); continue; } - const rootDir = path16.dirname(options2.evaluationConfig); - const workspace2 = path16.normalize(path16.join(rootDir, test.workspace)); + const rootDir = path17.dirname(options2.evaluationConfig); + const workspace2 = path17.normalize(path17.join(rootDir, test.workspace)); const fixtures = config.fixtures ?? [ { name: "default", strategy: "bfg" /* BFG */ } ]; @@ -212970,8 +214473,8 @@ async function loadEvaluationConfig(options2) { if (!fixture.strategy) { throw new Error(`missing: fixture.strategy: ${JSON.stringify(fixture)}`); } - const snapshotDirectory = test.snapshotDirectory ? path16.join(rootDir, test.snapshotDirectory, fixture.name, test.workspace) : config.snapshotDirectory ? path16.join(rootDir, config.snapshotDirectory, fixture.name, test.workspace) : options2.snapshotDirectory; - const codyAgentBinary = fixture.codyAgentBinary ? path16.resolve(path16.dirname(options2.evaluationConfig), fixture.codyAgentBinary) : void 0; + const snapshotDirectory = test.snapshotDirectory ? path17.join(rootDir, test.snapshotDirectory, fixture.name, test.workspace) : config.snapshotDirectory ? path17.join(rootDir, config.snapshotDirectory, fixture.name, test.workspace) : options2.snapshotDirectory; + const codyAgentBinary = fixture.codyAgentBinary ? path17.resolve(path17.dirname(options2.evaluationConfig), fixture.codyAgentBinary) : void 0; result.push({ ...options2, ...config, @@ -212981,7 +214484,7 @@ async function loadEvaluationConfig(options2) { snapshotDirectory, codyAgentBinary, fixture, - csvPath: path16.join(snapshotDirectory, "autocomplete.csv") + csvPath: path17.join(snapshotDirectory, "autocomplete.csv") }); } } @@ -213026,12 +214529,12 @@ async function evaluateWorkspace(options2) { await client.request("shutdown", null); client.notify("exit", null); } -var fspromises12, path16, evaluateAutocompleteCommand; +var fspromises12, path17, evaluateAutocompleteCommand; var init_evaluate_autocomplete = __esm({ "src/cli/evaluate-autocomplete/evaluate-autocomplete.ts"() { "use strict"; fspromises12 = __toESM(require("fs/promises")); - path16 = __toESM(require("path")); + path17 = __toESM(require("path")); init_esm(); init_vscode_shim(); init_agent(); @@ -213138,7 +214641,7 @@ var init_evaluate_autocomplete = __esm({ ).option( "--tree-sitter-grammars ", "Path to a directory containing tree-sitter grammars", - path16.resolve(__dirname, "../../vscode/dist") + path17.resolve(__dirname, "../../vscode/dist") ).option("--queries-directory ", "Path to a directory containing tree-sitter queries").option( "--test-typecheck", "If enabled, runs the test command to typecheck the generated code", @@ -213369,25 +214872,25 @@ var require_url_parse = __commonJS({ function resolve8(relative, base) { if (relative === "") return base; - var path19 = (base || "/").split("/").slice(0, -1).concat(relative.split("/")), i = path19.length, last = path19[i - 1], unshift = false, up = 0; + var path20 = (base || "/").split("/").slice(0, -1).concat(relative.split("/")), i = path20.length, last = path20[i - 1], unshift = false, up = 0; while (i--) { - if (path19[i] === ".") { - path19.splice(i, 1); - } else if (path19[i] === "..") { - path19.splice(i, 1); + if (path20[i] === ".") { + path20.splice(i, 1); + } else if (path20[i] === "..") { + path20.splice(i, 1); up++; } else if (up) { if (i === 0) unshift = true; - path19.splice(i, 1); + path20.splice(i, 1); up--; } } if (unshift) - path19.unshift(""); + path20.unshift(""); if (last === "." || last === "..") - path19.push(""); - return path19.join("/"); + path20.push(""); + return path20.join("/"); } function Url(address, location, parser2) { address = trimLeft(address); @@ -217876,8 +219379,8 @@ var require_route_recognizer = __commonJS({ delete map2["__"]; return map2; } - var Target = function Target2(path19, matcher, delegate) { - this.path = path19; + var Target = function Target2(path20, matcher, delegate) { + this.path = path20; this.matcher = matcher; this.delegate = delegate; }; @@ -217899,21 +219402,21 @@ var require_route_recognizer = __commonJS({ this.children = createMap(); this.target = target; }; - Matcher.prototype.add = function add2(path19, target) { - this.routes[path19] = target; + Matcher.prototype.add = function add2(path20, target) { + this.routes[path20] = target; }; - Matcher.prototype.addChild = function addChild(path19, target, callback, delegate) { + Matcher.prototype.addChild = function addChild(path20, target, callback, delegate) { var matcher = new Matcher(target); - this.children[path19] = matcher; - var match2 = generateMatch(path19, matcher, delegate); + this.children[path20] = matcher; + var match2 = generateMatch(path20, matcher, delegate); if (delegate && delegate.contextEntered) { delegate.contextEntered(target, match2); } callback(match2); }; function generateMatch(startingPath, matcher, delegate) { - function match2(path19, callback) { - var fullPath = startingPath + path19; + function match2(path20, callback) { + var fullPath = startingPath + path20; if (callback) { callback(generateMatch(fullPath, matcher, delegate)); } else { @@ -217922,23 +219425,23 @@ var require_route_recognizer = __commonJS({ } return match2; } - function addRoute(routeArray, path19, handler) { + function addRoute(routeArray, path20, handler) { var len = 0; for (var i = 0; i < routeArray.length; i++) { len += routeArray[i].path.length; } - path19 = path19.substr(len); - var route = { path: path19, handler }; + path20 = path20.substr(len); + var route = { path: path20, handler }; routeArray.push(route); } function eachRoute(baseRoute, matcher, callback, binding) { var routes = matcher.routes; var paths = Object.keys(routes); for (var i = 0; i < paths.length; i++) { - var path19 = paths[i]; + var path20 = paths[i]; var routeArray = baseRoute.slice(); - addRoute(routeArray, path19, routes[path19]); - var nested = matcher.children[path19]; + addRoute(routeArray, path20, routes[path20]); + var nested = matcher.children[path20]; if (nested) { eachRoute(routeArray, nested, callback, binding); } else { @@ -217957,8 +219460,8 @@ var require_route_recognizer = __commonJS({ } }, this); }; - function normalizePath(path19) { - return path19.split("/").map(normalizeSegment).join("/"); + function normalizePath(path20) { + return path20.split("/").map(normalizeSegment).join("/"); } var SEGMENT_RESERVED_CHARS = /%|\//g; function normalizeSegment(segment) { @@ -218438,39 +219941,39 @@ var require_route_recognizer = __commonJS({ } return queryParams; }; - RouteRecognizer.prototype.recognize = function recognize(path19) { + RouteRecognizer.prototype.recognize = function recognize(path20) { var results; var states = [this.rootState]; var queryParams = {}; var isSlashDropped = false; - var hashStart = path19.indexOf("#"); + var hashStart = path20.indexOf("#"); if (hashStart !== -1) { - path19 = path19.substr(0, hashStart); + path20 = path20.substr(0, hashStart); } - var queryStart = path19.indexOf("?"); + var queryStart = path20.indexOf("?"); if (queryStart !== -1) { - var queryString = path19.substr(queryStart + 1, path19.length); - path19 = path19.substr(0, queryStart); + var queryString = path20.substr(queryStart + 1, path20.length); + path20 = path20.substr(0, queryStart); queryParams = this.parseQueryString(queryString); } - if (path19.charAt(0) !== "/") { - path19 = "/" + path19; + if (path20.charAt(0) !== "/") { + path20 = "/" + path20; } - var originalPath = path19; + var originalPath = path20; if (RouteRecognizer.ENCODE_AND_DECODE_PATH_SEGMENTS) { - path19 = normalizePath(path19); + path20 = normalizePath(path20); } else { - path19 = decodeURI(path19); + path20 = decodeURI(path20); originalPath = decodeURI(originalPath); } - var pathLen = path19.length; - if (pathLen > 1 && path19.charAt(pathLen - 1) === "/") { - path19 = path19.substr(0, pathLen - 1); + var pathLen = path20.length; + if (pathLen > 1 && path20.charAt(pathLen - 1) === "/") { + path20 = path20.substr(0, pathLen - 1); originalPath = originalPath.substr(0, originalPath.length - 1); isSlashDropped = true; } - for (var i = 0; i < path19.length; i++) { - states = recognizeChar(states, path19.charCodeAt(i)); + for (var i = 0; i < path20.length; i++) { + states = recognizeChar(states, path20.charCodeAt(i)); if (!states.length) { break; } @@ -222519,17 +224022,17 @@ var require_pollyjs_core = __commonJS({ this.host = host; this.paths = this.global ? [GLOBAL] : paths; this._routeRecognizer = new RouteRecognizer(); - this.paths.forEach((path19) => this._routeRecognizer.add([{ - path: path19, + this.paths.forEach((path20) => this._routeRecognizer.add([{ + path: path20, handler: [handler] }])); } - match(host, path19) { + match(host, path20) { if (this.global) { return new Route(this._routeRecognizer.recognize(GLOBAL)); } if (this.host === host) { - const recognizeResult = this._routeRecognizer.recognize(path19); + const recognizeResult = this._routeRecognizer.recognize(path20); return recognizeResult && new Route(recognizeResult); } } @@ -222550,10 +224053,10 @@ var require_pollyjs_core = __commonJS({ function parseUrl$1(url3) { const parsedUrl = new utils.URL(url3); const host = parsedUrl.host ? parsedUrl.origin : CHARS.SLASH; - const path19 = parsedUrl.pathname || CHARS.SLASH; + const path20 = parsedUrl.pathname || CHARS.SLASH; return { host, - path: path19 + path: path20 }; } var Server = class { @@ -222563,16 +224066,16 @@ var require_pollyjs_core = __commonJS({ this[NAMESPACES] = []; this[MIDDLEWARE] = []; } - host(path19, callback) { + host(path20, callback) { const host = this[HOST]; utils.assert(`[Server] A host cannot be specified within another host.`, !host); - this[HOST] = path19; + this[HOST] = path20; callback(this); this[HOST] = host; } - namespace(path19, callback) { + namespace(path20, callback) { const namespaces = this[NAMESPACES]; - this[NAMESPACES] = [...namespaces, path19]; + this[NAMESPACES] = [...namespaces, path20]; callback(this); this[NAMESPACES] = namespaces; } @@ -222612,26 +224115,26 @@ var require_pollyjs_core = __commonJS({ _lookupMiddleware(url3) { const { host, - path: path19 + path: path20 } = parseUrl$1(url3); - return this[MIDDLEWARE].map((m) => m.match(host, path19)).filter(Boolean); + return this[MIDDLEWARE].map((m) => m.match(host, path20)).filter(Boolean); } _register(method2, routes) { const handler = new Handler(); castArray(routes).forEach((route) => { const { host, - path: path19 + path: path20 } = parseUrl$1(this._buildUrl(route)); const registry = this._registryForHost(host); - const name = this._nameForPath(path19); + const name = this._nameForPath(path20); const router = registry[method2.toUpperCase()]; if (router[HANDLERS$1].has(name)) { router[HANDLERS$1].get(name).push(handler); } else { router[HANDLERS$1].set(name, [handler]); router.add([{ - path: path19, + path: path20, handler: router[HANDLERS$1].get(name) }]); } @@ -222650,10 +224153,10 @@ var require_pollyjs_core = __commonJS({ } else { const { host, - path: path19 + path: path20 } = parseUrl$1(this._buildUrl(route)); pathsByHost[host] = pathsByHost[host] || []; - pathsByHost[host].push(path19); + pathsByHost[host].push(path20); } }); keys$5(pathsByHost).forEach((host) => { @@ -222668,13 +224171,13 @@ var require_pollyjs_core = __commonJS({ _recognize(method2, url3) { const { host, - path: path19 + path: path20 } = parseUrl$1(url3); const registry = this._registryForHost(host); - return registry[method2.toUpperCase()].recognize(path19); + return registry[method2.toUpperCase()].recognize(path20); } - _buildUrl(path19) { - return utils.buildUrl(this[HOST], ...this[NAMESPACES], path19); + _buildUrl(path20) { + return utils.buildUrl(this[HOST], ...this[NAMESPACES], path20); } /** * Converts a url path into a name used to combine route handlers by @@ -222682,8 +224185,8 @@ var require_pollyjs_core = __commonJS({ * @param {String} path * @returns {String} */ - _nameForPath(path19 = "") { - const name = path19.split(CHARS.SLASH).map((segment) => { + _nameForPath(path20 = "") { + const name = path20.split(CHARS.SLASH).map((segment) => { switch (segment.charAt(0)) { case CHARS.COLON: return CHARS.COLON; @@ -223118,11 +224621,11 @@ var require_common6 = __commonJS({ return `${proto}://${host}${portStr}`; } function stringifyRequest(options2, body2) { - const { method = "GET", path: path19 = "", port } = options2; + const { method = "GET", path: path20 = "", port } = options2; const origin = normalizeOrigin(options2.proto, options2.hostname, port); const log2 = { method, - url: `${origin}${path19}`, + url: `${origin}${path20}`, headers: options2.headers }; if (body2) { @@ -223430,12 +224933,12 @@ var require_common6 = __commonJS({ const keys = Object.keys(input); const result = {}; let resultPtr = result; - for (let path19 of keys) { - const originalPath = path19; - if (path19.indexOf("[") >= 0) { - path19 = path19.replace(/\[/g, ".").replace(/]/g, ""); + for (let path20 of keys) { + const originalPath = path20; + if (path20.indexOf("[") >= 0) { + path20 = path20.replace(/\[/g, ".").replace(/]/g, ""); } - const parts = path19.split("."); + const parts = path20.split("."); const check = parts.filter(blocklistFilter); if (check.length !== parts.length) { return void 0; @@ -224405,7 +225908,7 @@ var require_interceptor = __commonJS({ ); } const method = (options2.method || "GET").toUpperCase(); - let { path: path19 = "/" } = options2; + let { path: path20 = "/" } = options2; let matches; let matchKey; const { proto } = options2; @@ -224416,7 +225919,7 @@ var require_interceptor = __commonJS({ return false; } if (this.scope.transformPathFunction) { - path19 = this.scope.transformPathFunction(path19); + path20 = this.scope.transformPathFunction(path20); } const requestMatchesFilter = ({ name, value: predicate }) => { const headerValue = req.getHeader(name); @@ -224453,7 +225956,7 @@ var require_interceptor = __commonJS({ if (this.queries === null) { this.scope.logger("query matching skipped"); } else { - const [pathname, search] = path19.split("?"); + const [pathname, search] = path20.split("?"); const matchQueries = this.matchQuery({ search }); this.scope.logger( matchQueries ? "query matching succeeded" : "query matching failed" @@ -224461,7 +225964,7 @@ var require_interceptor = __commonJS({ if (!matchQueries) { return false; } - path19 = pathname; + path20 = pathname; } if (this.__nock_filteredScope) { matchKey = this.__nock_filteredScope; @@ -224471,11 +225974,11 @@ var require_interceptor = __commonJS({ if (typeof this.uri === "function") { matches = common2.matchStringOrRegexp(matchKey, this.basePath) && // This is a false positive, as `uri` is not bound to `this`. // eslint-disable-next-line no-useless-call - this.uri.call(this, path19); + this.uri.call(this, path20); } else { - matches = common2.matchStringOrRegexp(matchKey, this.basePath) && common2.matchStringOrRegexp(path19, this.path); + matches = common2.matchStringOrRegexp(matchKey, this.basePath) && common2.matchStringOrRegexp(path20, this.path); } - this.scope.logger(`matching ${matchKey}${path19} to ${this._key}: ${matches}`); + this.scope.logger(`matching ${matchKey}${path20} to ${this._key}: ${matches}`); if (matches && this._requestBody !== void 0) { if (this.scope.transformRequestBodyFunction) { body2 = this.scope.transformRequestBodyFunction(body2, this._requestBody); @@ -224501,24 +226004,24 @@ var require_interceptor = __commonJS({ const isRegex = this.path instanceof RegExp; const isRegexBasePath = this.scope.basePath instanceof RegExp; const method = (options2.method || "GET").toUpperCase(); - let { path: path19 } = options2; + let { path: path20 } = options2; const { proto } = options2; if (!isRegex) { - path19 = path19 ? path19.split("?")[0] : ""; + path20 = path20 ? path20.split("?")[0] : ""; } if (this.scope.transformPathFunction) { - path19 = this.scope.transformPathFunction(path19); + path20 = this.scope.transformPathFunction(path20); } const comparisonKey = isPathFn || isRegex ? this.__nock_scopeKey : this._key; - const matchKey = `${method} ${proto}://${options2.host}${path19}`; + const matchKey = `${method} ${proto}://${options2.host}${path20}`; if (isPathFn) { - return !!(matchKey.match(comparisonKey) && this.path(path19)); + return !!(matchKey.match(comparisonKey) && this.path(path20)); } if (isRegex && !isRegexBasePath) { - return !!matchKey.match(comparisonKey) && this.path.test(path19); + return !!matchKey.match(comparisonKey) && this.path.test(path20); } if (isRegexBasePath) { - return this.scope.basePath.test(matchKey) && !!path19.match(this.path); + return this.scope.basePath.test(matchKey) && !!path20.match(this.path); } return comparisonKey === matchKey; } @@ -224710,11 +226213,11 @@ var require_intercept = __commonJS({ var http5 = require("http"); var debug = require_src3()("nock.intercept"); var globalEmitter = require_global_emitter(); - function NetConnectNotAllowedError(host, path19) { + function NetConnectNotAllowedError(host, path20) { Error.call(this); this.name = "NetConnectNotAllowedError"; this.code = "ENETUNREACH"; - this.message = `Nock: Disallowed net connect for "${host}${path19}"`; + this.message = `Nock: Disallowed net connect for "${host}${path20}"`; Error.captureStackTrace(this, this.constructor); } inherits3(NetConnectNotAllowedError, Error); @@ -225074,15 +226577,15 @@ var require_recorder = __commonJS({ }) { const requestBody = getBodyFromChunks(bodyChunks).body; const responseBody = getBodyFromChunks(dataChunks, res.headers).body; - let { path: path19 } = options2; + let { path: path20 } = options2; const queryIndex = req.path.indexOf("?"); let queryObj = {}; if (queryIndex !== -1) { - path19 = path19.substring(0, queryIndex); + path20 = path20.substring(0, queryIndex); const queryStr = req.path.slice(queryIndex + 1); queryObj = querystring.parse(queryStr); } - path19 = path19.replace(/'/g, `\\'`); + path20 = path20.replace(/'/g, `\\'`); const encodedQueryObj = {}; for (const key in queryObj) { const formattedPair = common2.formatQueryValue( @@ -225098,9 +226601,9 @@ var require_recorder = __commonJS({ lines2.push(`nock('${scope}', {"encodedQueryParams":true})`); const methodName = getMethod(options2).toLowerCase(); if (requestBody) { - lines2.push(` .${methodName}('${path19}', ${JSON.stringify(requestBody)})`); + lines2.push(` .${methodName}('${path20}', ${JSON.stringify(requestBody)})`); } else { - lines2.push(` .${methodName}('${path19}')`); + lines2.push(` .${methodName}('${path20}')`); } Object.entries(reqheaders || {}).forEach(([fieldName, fieldValue]) => { const safeName = JSON.stringify(fieldName); @@ -225497,15 +227000,15 @@ ${this.pendingMocks().join("\n")}` return this; } }; - function loadDefs(path19) { + function loadDefs(path20) { if (!fs7) { throw new Error("No fs"); } - const contents = fs7.readFileSync(path19); + const contents = fs7.readFileSync(path20); return JSON.parse(contents); } - function load(path19) { - return define2(loadDefs(path19)); + function load(path20) { + return define2(loadDefs(path20)); } function getStatusFromDefinition(nockDef) { if (nockDef.reply !== void 0) { @@ -225602,7 +227105,7 @@ var require_back = __commonJS({ } = require_intercept(); var { loadDefs, define: define2 } = require_scope2(); var { format: format2 } = require("util"); - var path19 = require("path"); + var path20 = require("path"); var debug = require_src3()("nock.back"); var _mode = null; var fs7; @@ -225628,7 +227131,7 @@ var require_back = __commonJS({ } } _mode.setup(); - const fixture = path19.join(Back.fixtures, fixtureName); + const fixture = path20.join(Back.fixtures, fixtureName); const context3 = _mode.start(fixture, options2); const nockDone = function() { _mode.finish(fixture, options2, context3); @@ -225699,7 +227202,7 @@ var require_back = __commonJS({ } outputs = typeof outputs === "string" ? outputs : JSON.stringify(outputs, null, 4); debug("recorder outputs:", outputs); - fs7.mkdirSync(path19.dirname(fixture), { recursive: true }); + fs7.mkdirSync(path20.dirname(fixture), { recursive: true }); fs7.writeFileSync(fixture, outputs); } } @@ -225732,7 +227235,7 @@ var require_back = __commonJS({ } outputs = typeof outputs === "string" ? outputs : JSON.stringify(outputs, null, 4); debug("recorder outputs:", outputs); - fs7.mkdirSync(path19.dirname(fixture), { recursive: true }); + fs7.mkdirSync(path20.dirname(fixture), { recursive: true }); fs7.writeFileSync(fixture, outputs); } }; @@ -229880,19 +231383,19 @@ var require_pollyjs_adapter_node_http = __commonJS({ var pattern = isFunction2(value) || isHostObject(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } - function baseSet(object, path19, value, customizer) { + function baseSet(object, path20, value, customizer) { if (!isObject3(object)) { return object; } - path19 = isKey(path19, object) ? [path19] : castPath(path19); - var index = -1, length = path19.length, lastIndex = length - 1, nested = object; + path20 = isKey(path20, object) ? [path20] : castPath(path20); + var index = -1, length = path20.length, lastIndex = length - 1, nested = object; while (nested != null && ++index < length) { - var key = toKey(path19[index]), newValue = value; + var key = toKey(path20[index]), newValue = value; if (index != lastIndex) { var objValue = nested[key]; newValue = customizer ? customizer(objValue, key, nested) : void 0; if (newValue === void 0) { - newValue = isObject3(objValue) ? objValue : isIndex(path19[index + 1]) ? [] : {}; + newValue = isObject3(objValue) ? objValue : isIndex(path20[index + 1]) ? [] : {}; } } assignValue(nested, key, newValue); @@ -230011,8 +231514,8 @@ var require_pollyjs_adapter_node_http = __commonJS({ function toString$2(value) { return value == null ? "" : baseToString(value); } - function set(object, path19, value) { - return object == null ? object : baseSet(object, path19, value); + function set(object, path20, value) { + return object == null ? object : baseSet(object, path20, value); } var lodash_set = set; var debug = src("nock.common"); @@ -230104,11 +231607,11 @@ var require_pollyjs_adapter_node_http = __commonJS({ return `${proto2}://${host}${portStr}`; } function stringifyRequest(options2, body2) { - const { method = "GET", path: path19 = "", port: port2 } = options2; + const { method = "GET", path: path20 = "", port: port2 } = options2; const origin = normalizeOrigin(options2.proto, options2.hostname, port2); const log2 = { method, - url: `${origin}${path19}`, + url: `${origin}${path20}`, headers: options2.headers }; if (body2) { @@ -230453,13 +231956,13 @@ var require_pollyjs_adapter_node_http = __commonJS({ const protocol2 = options2.protocol || `${options2.proto}:` || "http:"; const host = options2.hostname || options2.host || "localhost"; const { - path: path19, + path: path20, port: port2 } = options2; const url3 = new utils.URL(); url3.set("protocol", protocol2); url3.set("host", host); - url3.set("pathname", path19); + url3.set("pathname", path20); if (port2 && !host.includes(":") && (port2 !== 80 || protocol2 !== "http:") && (port2 !== 443 || protocol2 !== "https:")) { url3.set("port", port2); } @@ -234439,10 +235942,10 @@ var require_fs2 = __commonJS({ var require_utils18 = __commonJS({ "../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/mkdirs/utils.js"(exports2, module2) { "use strict"; - var path19 = require("path"); + var path20 = require("path"); module2.exports.checkPath = function checkPath(pth) { if (process.platform === "win32") { - const pathHasInvalidWinCharacters = /[<>:"|?*]/.test(pth.replace(path19.parse(pth).root, "")); + const pathHasInvalidWinCharacters = /[<>:"|?*]/.test(pth.replace(path20.parse(pth).root, "")); if (pathHasInvalidWinCharacters) { const error = new Error(`Path contains invalid characters: ${pth}`); error.code = "EINVAL"; @@ -234507,8 +236010,8 @@ var require_path_exists = __commonJS({ "use strict"; var u = require_universalify().fromPromise; var fs7 = require_fs2(); - function pathExists(path19) { - return fs7.access(path19).then(() => true).catch(() => false); + function pathExists(path20) { + return fs7.access(path20).then(() => true).catch(() => false); } module2.exports = { pathExists: u(pathExists), @@ -234522,8 +236025,8 @@ var require_utimes = __commonJS({ "../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/util/utimes.js"(exports2, module2) { "use strict"; var fs7 = require_graceful_fs(); - function utimesMillis(path19, atime, mtime, callback) { - fs7.open(path19, "r+", (err3, fd) => { + function utimesMillis(path20, atime, mtime, callback) { + fs7.open(path20, "r+", (err3, fd) => { if (err3) return callback(err3); fs7.futimes(fd, atime, mtime, (futimesErr) => { @@ -234534,8 +236037,8 @@ var require_utimes = __commonJS({ }); }); } - function utimesMillisSync(path19, atime, mtime) { - const fd = fs7.openSync(path19, "r+"); + function utimesMillisSync(path20, atime, mtime) { + const fd = fs7.openSync(path20, "r+"); fs7.futimesSync(fd, atime, mtime); return fs7.closeSync(fd); } @@ -234551,7 +236054,7 @@ var require_stat = __commonJS({ "../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/util/stat.js"(exports2, module2) { "use strict"; var fs7 = require_fs2(); - var path19 = require("path"); + var path20 = require("path"); var util2 = require("util"); function getStats(src, dest, opts) { const statFunc = opts.dereference ? (file) => fs7.stat(file, { bigint: true }) : (file) => fs7.lstat(file, { bigint: true }); @@ -234584,8 +236087,8 @@ var require_stat = __commonJS({ const { srcStat, destStat } = stats; if (destStat) { if (areIdentical(srcStat, destStat)) { - const srcBaseName = path19.basename(src); - const destBaseName = path19.basename(dest); + const srcBaseName = path20.basename(src); + const destBaseName = path20.basename(dest); if (funcName === "move" && srcBaseName !== destBaseName && srcBaseName.toLowerCase() === destBaseName.toLowerCase()) { return cb(null, { srcStat, destStat, isChangingCase: true }); } @@ -234608,8 +236111,8 @@ var require_stat = __commonJS({ const { srcStat, destStat } = getStatsSync(src, dest, opts); if (destStat) { if (areIdentical(srcStat, destStat)) { - const srcBaseName = path19.basename(src); - const destBaseName = path19.basename(dest); + const srcBaseName = path20.basename(src); + const destBaseName = path20.basename(dest); if (funcName === "move" && srcBaseName !== destBaseName && srcBaseName.toLowerCase() === destBaseName.toLowerCase()) { return { srcStat, destStat, isChangingCase: true }; } @@ -234628,9 +236131,9 @@ var require_stat = __commonJS({ return { srcStat, destStat }; } function checkParentPaths(src, srcStat, dest, funcName, cb) { - const srcParent = path19.resolve(path19.dirname(src)); - const destParent = path19.resolve(path19.dirname(dest)); - if (destParent === srcParent || destParent === path19.parse(destParent).root) + const srcParent = path20.resolve(path20.dirname(src)); + const destParent = path20.resolve(path20.dirname(dest)); + if (destParent === srcParent || destParent === path20.parse(destParent).root) return cb(); fs7.stat(destParent, { bigint: true }, (err3, destStat) => { if (err3) { @@ -234645,9 +236148,9 @@ var require_stat = __commonJS({ }); } function checkParentPathsSync(src, srcStat, dest, funcName) { - const srcParent = path19.resolve(path19.dirname(src)); - const destParent = path19.resolve(path19.dirname(dest)); - if (destParent === srcParent || destParent === path19.parse(destParent).root) + const srcParent = path20.resolve(path20.dirname(src)); + const destParent = path20.resolve(path20.dirname(dest)); + if (destParent === srcParent || destParent === path20.parse(destParent).root) return; let destStat; try { @@ -234666,8 +236169,8 @@ var require_stat = __commonJS({ return destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev; } function isSrcSubdir(src, dest) { - const srcArr = path19.resolve(src).split(path19.sep).filter((i) => i); - const destArr = path19.resolve(dest).split(path19.sep).filter((i) => i); + const srcArr = path20.resolve(src).split(path20.sep).filter((i) => i); + const destArr = path20.resolve(dest).split(path20.sep).filter((i) => i); return srcArr.reduce((acc, cur, i) => acc && destArr[i] === cur, true); } function errMsg(src, dest, funcName) { @@ -234689,7 +236192,7 @@ var require_copy = __commonJS({ "../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/copy/copy.js"(exports2, module2) { "use strict"; var fs7 = require_graceful_fs(); - var path19 = require("path"); + var path20 = require("path"); var mkdirs = require_mkdirs().mkdirs; var pathExists = require_path_exists().pathExists; var utimesMillis = require_utimes().utimesMillis; @@ -234727,7 +236230,7 @@ var require_copy = __commonJS({ }); } function checkParentDir(destStat, src, dest, opts, cb) { - const destParent = path19.dirname(dest); + const destParent = path20.dirname(dest); pathExists(destParent, (err3, dirExists) => { if (err3) return cb(err3); @@ -234859,8 +236362,8 @@ var require_copy = __commonJS({ return copyDirItem(items, item, src, dest, opts, cb); } function copyDirItem(items, item, src, dest, opts, cb) { - const srcItem = path19.join(src, item); - const destItem = path19.join(dest, item); + const srcItem = path20.join(src, item); + const destItem = path20.join(dest, item); stat7.checkPaths(srcItem, destItem, "copy", opts, (err3, stats) => { if (err3) return cb(err3); @@ -234877,7 +236380,7 @@ var require_copy = __commonJS({ if (err3) return cb(err3); if (opts.dereference) { - resolvedSrc = path19.resolve(process.cwd(), resolvedSrc); + resolvedSrc = path20.resolve(process.cwd(), resolvedSrc); } if (!destStat) { return fs7.symlink(resolvedSrc, dest, cb); @@ -234889,7 +236392,7 @@ var require_copy = __commonJS({ return cb(err4); } if (opts.dereference) { - resolvedDest = path19.resolve(process.cwd(), resolvedDest); + resolvedDest = path20.resolve(process.cwd(), resolvedDest); } if (stat7.isSrcSubdir(resolvedSrc, resolvedDest)) { return cb(new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)); @@ -234918,7 +236421,7 @@ var require_copy_sync = __commonJS({ "../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/copy/copy-sync.js"(exports2, module2) { "use strict"; var fs7 = require_graceful_fs(); - var path19 = require("path"); + var path20 = require("path"); var mkdirsSync = require_mkdirs().mkdirsSync; var utimesMillisSync = require_utimes().utimesMillisSync; var stat7 = require_stat(); @@ -234943,7 +236446,7 @@ var require_copy_sync = __commonJS({ function handleFilterAndCopy(destStat, src, dest, opts) { if (opts.filter && !opts.filter(src, dest)) return; - const destParent = path19.dirname(dest); + const destParent = path20.dirname(dest); if (!fs7.existsSync(destParent)) mkdirsSync(destParent); return getStats(destStat, src, dest, opts); @@ -235019,15 +236522,15 @@ var require_copy_sync = __commonJS({ fs7.readdirSync(src).forEach((item) => copyDirItem(item, src, dest, opts)); } function copyDirItem(item, src, dest, opts) { - const srcItem = path19.join(src, item); - const destItem = path19.join(dest, item); + const srcItem = path20.join(src, item); + const destItem = path20.join(dest, item); const { destStat } = stat7.checkPathsSync(srcItem, destItem, "copy", opts); return startCopy(destStat, srcItem, destItem, opts); } function onLink(destStat, src, dest, opts) { let resolvedSrc = fs7.readlinkSync(src); if (opts.dereference) { - resolvedSrc = path19.resolve(process.cwd(), resolvedSrc); + resolvedSrc = path20.resolve(process.cwd(), resolvedSrc); } if (!destStat) { return fs7.symlinkSync(resolvedSrc, dest); @@ -235041,7 +236544,7 @@ var require_copy_sync = __commonJS({ throw err3; } if (opts.dereference) { - resolvedDest = path19.resolve(process.cwd(), resolvedDest); + resolvedDest = path20.resolve(process.cwd(), resolvedDest); } if (stat7.isSrcSubdir(resolvedSrc, resolvedDest)) { throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`); @@ -235077,7 +236580,7 @@ var require_rimraf2 = __commonJS({ "../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/remove/rimraf.js"(exports2, module2) { "use strict"; var fs7 = require_graceful_fs(); - var path19 = require("path"); + var path20 = require("path"); var assert2 = require("assert"); var isWindows2 = process.platform === "win32"; function defaults4(options2) { @@ -235225,7 +236728,7 @@ var require_rimraf2 = __commonJS({ if (n === 0) return options2.rmdir(p, cb); files.forEach((f) => { - rimraf2(path19.join(p, f), options2, (er2) => { + rimraf2(path20.join(p, f), options2, (er2) => { if (errState) { return; } @@ -235291,7 +236794,7 @@ var require_rimraf2 = __commonJS({ function rmkidsSync(p, options2) { assert2(p); assert2(options2); - options2.readdirSync(p).forEach((f) => rimrafSync2(path19.join(p, f), options2)); + options2.readdirSync(p).forEach((f) => rimrafSync2(path20.join(p, f), options2)); if (isWindows2) { const startTime = Date.now(); do { @@ -235318,15 +236821,15 @@ var require_remove = __commonJS({ var fs7 = require_graceful_fs(); var u = require_universalify().fromCallback; var rimraf2 = require_rimraf2(); - function remove(path19, callback) { + function remove(path20, callback) { if (fs7.rm) - return fs7.rm(path19, { recursive: true, force: true }, callback); - rimraf2(path19, callback); + return fs7.rm(path20, { recursive: true, force: true }, callback); + rimraf2(path20, callback); } - function removeSync(path19) { + function removeSync(path20) { if (fs7.rmSync) - return fs7.rmSync(path19, { recursive: true, force: true }); - rimraf2.sync(path19); + return fs7.rmSync(path20, { recursive: true, force: true }); + rimraf2.sync(path20); } module2.exports = { remove: u(remove), @@ -235341,7 +236844,7 @@ var require_empty2 = __commonJS({ "use strict"; var u = require_universalify().fromPromise; var fs7 = require_fs2(); - var path19 = require("path"); + var path20 = require("path"); var mkdir6 = require_mkdirs(); var remove = require_remove(); var emptyDir = u(async function emptyDir2(dir) { @@ -235351,7 +236854,7 @@ var require_empty2 = __commonJS({ } catch { return mkdir6.mkdirs(dir); } - return Promise.all(items.map((item) => remove.remove(path19.join(dir, item)))); + return Promise.all(items.map((item) => remove.remove(path20.join(dir, item)))); }); function emptyDirSync(dir) { let items; @@ -235361,7 +236864,7 @@ var require_empty2 = __commonJS({ return mkdir6.mkdirsSync(dir); } items.forEach((item) => { - item = path19.join(dir, item); + item = path20.join(dir, item); remove.removeSync(item); }); } @@ -235379,7 +236882,7 @@ var require_file = __commonJS({ "../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/file.js"(exports2, module2) { "use strict"; var u = require_universalify().fromCallback; - var path19 = require("path"); + var path20 = require("path"); var fs7 = require_graceful_fs(); var mkdir6 = require_mkdirs(); function createFile(file, callback) { @@ -235393,7 +236896,7 @@ var require_file = __commonJS({ fs7.stat(file, (err3, stats) => { if (!err3 && stats.isFile()) return callback(); - const dir = path19.dirname(file); + const dir = path20.dirname(file); fs7.stat(dir, (err4, stats2) => { if (err4) { if (err4.code === "ENOENT") { @@ -235424,7 +236927,7 @@ var require_file = __commonJS({ } if (stats && stats.isFile()) return; - const dir = path19.dirname(file); + const dir = path20.dirname(file); try { if (!fs7.statSync(dir).isDirectory()) { fs7.readdirSync(dir); @@ -235449,7 +236952,7 @@ var require_link = __commonJS({ "../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/link.js"(exports2, module2) { "use strict"; var u = require_universalify().fromCallback; - var path19 = require("path"); + var path20 = require("path"); var fs7 = require_graceful_fs(); var mkdir6 = require_mkdirs(); var pathExists = require_path_exists().pathExists; @@ -235470,7 +236973,7 @@ var require_link = __commonJS({ } if (dstStat && areIdentical(srcStat, dstStat)) return callback(null); - const dir = path19.dirname(dstpath); + const dir = path20.dirname(dstpath); pathExists(dir, (err4, dirExists) => { if (err4) return callback(err4); @@ -235499,7 +237002,7 @@ var require_link = __commonJS({ err3.message = err3.message.replace("lstat", "ensureLink"); throw err3; } - const dir = path19.dirname(dstpath); + const dir = path20.dirname(dstpath); const dirExists = fs7.existsSync(dir); if (dirExists) return fs7.linkSync(srcpath, dstpath); @@ -235517,11 +237020,11 @@ var require_link = __commonJS({ var require_symlink_paths = __commonJS({ "../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/symlink-paths.js"(exports2, module2) { "use strict"; - var path19 = require("path"); + var path20 = require("path"); var fs7 = require_graceful_fs(); var pathExists = require_path_exists().pathExists; function symlinkPaths(srcpath, dstpath, callback) { - if (path19.isAbsolute(srcpath)) { + if (path20.isAbsolute(srcpath)) { return fs7.lstat(srcpath, (err3) => { if (err3) { err3.message = err3.message.replace("lstat", "ensureSymlink"); @@ -235533,8 +237036,8 @@ var require_symlink_paths = __commonJS({ }); }); } else { - const dstdir = path19.dirname(dstpath); - const relativeToDst = path19.join(dstdir, srcpath); + const dstdir = path20.dirname(dstpath); + const relativeToDst = path20.join(dstdir, srcpath); return pathExists(relativeToDst, (err3, exists) => { if (err3) return callback(err3); @@ -235551,7 +237054,7 @@ var require_symlink_paths = __commonJS({ } return callback(null, { toCwd: srcpath, - toDst: path19.relative(dstdir, srcpath) + toDst: path20.relative(dstdir, srcpath) }); }); } @@ -235560,7 +237063,7 @@ var require_symlink_paths = __commonJS({ } function symlinkPathsSync(srcpath, dstpath) { let exists; - if (path19.isAbsolute(srcpath)) { + if (path20.isAbsolute(srcpath)) { exists = fs7.existsSync(srcpath); if (!exists) throw new Error("absolute srcpath does not exist"); @@ -235569,8 +237072,8 @@ var require_symlink_paths = __commonJS({ toDst: srcpath }; } else { - const dstdir = path19.dirname(dstpath); - const relativeToDst = path19.join(dstdir, srcpath); + const dstdir = path20.dirname(dstpath); + const relativeToDst = path20.join(dstdir, srcpath); exists = fs7.existsSync(relativeToDst); if (exists) { return { @@ -235583,7 +237086,7 @@ var require_symlink_paths = __commonJS({ throw new Error("relative srcpath does not exist"); return { toCwd: srcpath, - toDst: path19.relative(dstdir, srcpath) + toDst: path20.relative(dstdir, srcpath) }; } } @@ -235635,7 +237138,7 @@ var require_symlink = __commonJS({ "../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/symlink.js"(exports2, module2) { "use strict"; var u = require_universalify().fromCallback; - var path19 = require("path"); + var path20 = require("path"); var fs7 = require_fs2(); var _mkdirs = require_mkdirs(); var mkdirs = _mkdirs.mkdirs; @@ -235673,7 +237176,7 @@ var require_symlink = __commonJS({ symlinkType(relative.toCwd, type, (err4, type2) => { if (err4) return callback(err4); - const dir = path19.dirname(dstpath); + const dir = path20.dirname(dstpath); pathExists(dir, (err5, dirExists) => { if (err5) return callback(err5); @@ -235703,7 +237206,7 @@ var require_symlink = __commonJS({ const relative = symlinkPathsSync(srcpath, dstpath); srcpath = relative.toDst; type = symlinkTypeSync(relative.toCwd, type); - const dir = path19.dirname(dstpath); + const dir = path20.dirname(dstpath); const exists = fs7.existsSync(dir); if (exists) return fs7.symlinkSync(srcpath, dstpath, type); @@ -235823,7 +237326,7 @@ var require_jsonfile = __commonJS({ } return obj2; } - var readFile5 = universalify.fromPromise(_readFile); + var readFile6 = universalify.fromPromise(_readFile); function readFileSync(file, options2 = {}) { if (typeof options2 === "string") { options2 = { encoding: options2 }; @@ -235855,7 +237358,7 @@ var require_jsonfile = __commonJS({ return fs7.writeFileSync(file, str, options2); } var jsonfile = { - readFile: readFile5, + readFile: readFile6, readFileSync, writeFile: writeFile4, writeFileSync @@ -235885,7 +237388,7 @@ var require_output_file = __commonJS({ "use strict"; var u = require_universalify().fromCallback; var fs7 = require_graceful_fs(); - var path19 = require("path"); + var path20 = require("path"); var mkdir6 = require_mkdirs(); var pathExists = require_path_exists().pathExists; function outputFile(file, data, encoding, callback) { @@ -235893,7 +237396,7 @@ var require_output_file = __commonJS({ callback = encoding; encoding = "utf8"; } - const dir = path19.dirname(file); + const dir = path20.dirname(file); pathExists(dir, (err3, itDoes) => { if (err3) return callback(err3); @@ -235907,7 +237410,7 @@ var require_output_file = __commonJS({ }); } function outputFileSync(file, ...args3) { - const dir = path19.dirname(file); + const dir = path20.dirname(file); if (fs7.existsSync(dir)) { return fs7.writeFileSync(file, ...args3); } @@ -235972,7 +237475,7 @@ var require_move = __commonJS({ "../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/move/move.js"(exports2, module2) { "use strict"; var fs7 = require_graceful_fs(); - var path19 = require("path"); + var path20 = require("path"); var copy = require_copy2().copy; var remove = require_remove().remove; var mkdirp2 = require_mkdirs().mkdirp; @@ -235994,7 +237497,7 @@ var require_move = __commonJS({ return cb(err4); if (isParentRoot(dest)) return doRename(src, dest, overwrite, isChangingCase, cb); - mkdirp2(path19.dirname(dest), (err5) => { + mkdirp2(path20.dirname(dest), (err5) => { if (err5) return cb(err5); return doRename(src, dest, overwrite, isChangingCase, cb); @@ -236003,8 +237506,8 @@ var require_move = __commonJS({ }); } function isParentRoot(dest) { - const parent = path19.dirname(dest); - const parsedPath = path19.parse(parent); + const parent = path20.dirname(dest); + const parsedPath = path20.parse(parent); return parsedPath.root === parent; } function doRename(src, dest, overwrite, isChangingCase, cb) { @@ -236054,7 +237557,7 @@ var require_move_sync = __commonJS({ "../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/move/move-sync.js"(exports2, module2) { "use strict"; var fs7 = require_graceful_fs(); - var path19 = require("path"); + var path20 = require("path"); var copySync = require_copy2().copySync; var removeSync = require_remove().removeSync; var mkdirpSync2 = require_mkdirs().mkdirpSync; @@ -236065,12 +237568,12 @@ var require_move_sync = __commonJS({ const { srcStat, isChangingCase = false } = stat7.checkPathsSync(src, dest, "move", opts); stat7.checkParentPathsSync(src, srcStat, dest, "move"); if (!isParentRoot(dest)) - mkdirpSync2(path19.dirname(dest)); + mkdirpSync2(path20.dirname(dest)); return doRename(src, dest, overwrite, isChangingCase); } function isParentRoot(dest) { - const parent = path19.dirname(dest); - const parsedPath = path19.parse(parent); + const parent = path20.dirname(dest); + const parsedPath = path20.parse(parent); return parsedPath.root === parent; } function doRename(src, dest, overwrite, isChangingCase) { @@ -244009,7 +245512,7 @@ var require_path_to_regexp = __commonJS({ "../node_modules/.pnpm/path-to-regexp@0.1.7/node_modules/path-to-regexp/index.js"(exports2, module2) { module2.exports = pathtoRegexp; var MATCHING_GROUP_REGEXP = /\((?!\?)/g; - function pathtoRegexp(path19, keys, options2) { + function pathtoRegexp(path20, keys, options2) { options2 = options2 || {}; keys = keys || []; var strict = options2.strict; @@ -244020,23 +245523,23 @@ var require_path_to_regexp = __commonJS({ var i = 0; var name = 0; var m; - if (path19 instanceof RegExp) { - while (m = MATCHING_GROUP_REGEXP.exec(path19.source)) { + if (path20 instanceof RegExp) { + while (m = MATCHING_GROUP_REGEXP.exec(path20.source)) { keys.push({ name: name++, optional: false, offset: m.index }); } - return path19; + return path20; } - if (Array.isArray(path19)) { - path19 = path19.map(function(value) { + if (Array.isArray(path20)) { + path20 = path20.map(function(value) { return pathtoRegexp(value, keys, options2).source; }); - return new RegExp("(?:" + path19.join("|") + ")", flags2); + return new RegExp("(?:" + path20.join("|") + ")", flags2); } - path19 = ("^" + path19 + (strict ? "" : path19[path19.length - 1] === "/" ? "?" : "/?")).replace(/\/\(/g, "/(?:").replace(/([\/\.])/g, "\\$1").replace(/(\\\/)?(\\\.)?:(\w+)(\(.*?\))?(\*)?(\?)?/g, function(match2, slash, format2, key, capture, star3, optional, offset) { + path20 = ("^" + path20 + (strict ? "" : path20[path20.length - 1] === "/" ? "?" : "/?")).replace(/\/\(/g, "/(?:").replace(/([\/\.])/g, "\\$1").replace(/(\\\/)?(\\\.)?:(\w+)(\(.*?\))?(\*)?(\?)?/g, function(match2, slash, format2, key, capture, star3, optional, offset) { slash = slash || ""; format2 = format2 || ""; capture = capture || "([^\\/" + format2 + "]+?)"; @@ -244056,10 +245559,10 @@ var require_path_to_regexp = __commonJS({ } return "(.*)"; }); - while (m = MATCHING_GROUP_REGEXP.exec(path19)) { + while (m = MATCHING_GROUP_REGEXP.exec(path20)) { var escapeCount = 0; var index = m.index; - while (path19.charAt(--index) === "\\") { + while (path20.charAt(--index) === "\\") { escapeCount++; } if (escapeCount % 2 === 1) { @@ -244075,8 +245578,8 @@ var require_path_to_regexp = __commonJS({ } i++; } - path19 += end ? "$" : path19[path19.length - 1] === "/" ? "" : "(?=\\/|$)"; - return new RegExp(path19, flags2); + path20 += end ? "$" : path20[path20.length - 1] === "/" ? "" : "(?=\\/|$)"; + return new RegExp(path20, flags2); } } }); @@ -244089,19 +245592,19 @@ var require_layer = __commonJS({ var debug = require_src31()("express:router:layer"); var hasOwnProperty2 = Object.prototype.hasOwnProperty; module2.exports = Layer; - function Layer(path19, options2, fn) { + function Layer(path20, options2, fn) { if (!(this instanceof Layer)) { - return new Layer(path19, options2, fn); + return new Layer(path20, options2, fn); } - debug("new %o", path19); + debug("new %o", path20); var opts = options2 || {}; this.handle = fn; this.name = fn.name || ""; this.params = void 0; this.path = void 0; - this.regexp = pathRegexp(path19, this.keys = [], opts); - this.regexp.fast_star = path19 === "*"; - this.regexp.fast_slash = path19 === "/" && opts.end === false; + this.regexp = pathRegexp(path20, this.keys = [], opts); + this.regexp.fast_star = path20 === "*"; + this.regexp.fast_slash = path20 === "/" && opts.end === false; } Layer.prototype.handle_error = function handle_error(error, req, res, next) { var fn = this.handle; @@ -244125,20 +245628,20 @@ var require_layer = __commonJS({ next(err3); } }; - Layer.prototype.match = function match2(path19) { + Layer.prototype.match = function match2(path20) { var match3; - if (path19 != null) { + if (path20 != null) { if (this.regexp.fast_slash) { this.params = {}; this.path = ""; return true; } if (this.regexp.fast_star) { - this.params = { "0": decode_param(path19) }; - this.path = path19; + this.params = { "0": decode_param(path20) }; + this.path = path20; return true; } - match3 = this.regexp.exec(path19); + match3 = this.regexp.exec(path20); } if (!match3) { this.params = void 0; @@ -244231,10 +245734,10 @@ var require_route = __commonJS({ var slice = Array.prototype.slice; var toString4 = Object.prototype.toString; module2.exports = Route; - function Route(path19) { - this.path = path19; + function Route(path20) { + this.path = path20; this.stack = []; - debug("new %o", path19); + debug("new %o", path20); this.methods = {}; } Route.prototype._handles_method = function _handles_method(method) { @@ -244447,8 +245950,8 @@ var require_router2 = __commonJS({ if (++sync2 > 100) { return setImmediate(next, err3); } - var path19 = getPathname(req); - if (path19 == null) { + var path20 = getPathname(req); + if (path20 == null) { return done(layerError); } var layer; @@ -244456,7 +245959,7 @@ var require_router2 = __commonJS({ var route; while (match2 !== true && idx < stack.length) { layer = stack[idx++]; - match2 = matchLayer(layer, path19); + match2 = matchLayer(layer, path20); route = layer.route; if (typeof match2 !== "boolean") { layerError = layerError || match2; @@ -244494,18 +245997,18 @@ var require_router2 = __commonJS({ } else if (route) { layer.handle_request(req, res, next); } else { - trim_prefix(layer, layerError, layerPath, path19); + trim_prefix(layer, layerError, layerPath, path20); } sync2 = 0; }); } - function trim_prefix(layer, layerError, layerPath, path19) { + function trim_prefix(layer, layerError, layerPath, path20) { if (layerPath.length !== 0) { - if (layerPath !== path19.slice(0, layerPath.length)) { + if (layerPath !== path20.slice(0, layerPath.length)) { next(layerError); return; } - var c = path19[layerPath.length]; + var c = path20[layerPath.length]; if (c && c !== "/" && c !== ".") return next(layerError); debug("trim prefix (%s) from url %s", layerPath, req.url); @@ -244585,7 +246088,7 @@ var require_router2 = __commonJS({ }; proto.use = function use2(fn) { var offset = 0; - var path19 = "/"; + var path20 = "/"; if (typeof fn !== "function") { var arg = fn; while (Array.isArray(arg) && arg.length !== 0) { @@ -244593,7 +246096,7 @@ var require_router2 = __commonJS({ } if (typeof arg !== "function") { offset = 1; - path19 = fn; + path20 = fn; } } var callbacks = flatten(slice.call(arguments, offset)); @@ -244605,8 +246108,8 @@ var require_router2 = __commonJS({ if (typeof fn !== "function") { throw new TypeError("Router.use() requires a middleware function but got a " + gettype(fn)); } - debug("use %o %s", path19, fn.name || ""); - var layer = new Layer(path19, { + debug("use %o %s", path20, fn.name || ""); + var layer = new Layer(path20, { sensitive: this.caseSensitive, strict: false, end: false @@ -244616,9 +246119,9 @@ var require_router2 = __commonJS({ } return this; }; - proto.route = function route(path19) { - var route2 = new Route(path19); - var layer = new Layer(path19, { + proto.route = function route(path20) { + var route2 = new Route(path20); + var layer = new Layer(path20, { sensitive: this.caseSensitive, strict: this.strict, end: true @@ -244628,8 +246131,8 @@ var require_router2 = __commonJS({ return route2; }; methods.concat("all").forEach(function(method) { - proto[method] = function(path19) { - var route = this.route(path19); + proto[method] = function(path20) { + var route = this.route(path20); route[method].apply(route, slice.call(arguments, 1)); return this; }; @@ -244665,9 +246168,9 @@ var require_router2 = __commonJS({ } return toString4.call(obj2).replace(objectRegExp, "$1"); } - function matchLayer(layer, path19) { + function matchLayer(layer, path20) { try { - return layer.match(path19); + return layer.match(path20); } catch (err3) { return err3; } @@ -244786,13 +246289,13 @@ var require_view = __commonJS({ "../node_modules/.pnpm/express@4.18.2/node_modules/express/lib/view.js"(exports2, module2) { "use strict"; var debug = require_src31()("express:view"); - var path19 = require("path"); + var path20 = require("path"); var fs7 = require("fs"); - var dirname6 = path19.dirname; - var basename4 = path19.basename; - var extname = path19.extname; - var join6 = path19.join; - var resolve8 = path19.resolve; + var dirname6 = path20.dirname; + var basename4 = path20.basename; + var extname = path20.extname; + var join6 = path20.join; + var resolve8 = path20.resolve; module2.exports = View; function View(name, options2) { var opts = options2 || {}; @@ -244821,17 +246324,17 @@ var require_view = __commonJS({ this.path = this.lookup(fileName); } View.prototype.lookup = function lookup(name) { - var path20; + var path21; var roots = [].concat(this.root); debug('lookup "%s"', name); - for (var i = 0; i < roots.length && !path20; i++) { + for (var i = 0; i < roots.length && !path21; i++) { var root = roots[i]; var loc = resolve8(root, name); var dir = dirname6(loc); var file = basename4(loc); - path20 = this.resolve(dir, file); + path21 = this.resolve(dir, file); } - return path20; + return path21; }; View.prototype.render = function render(options2, callback) { debug('render "%s"', this.path); @@ -244839,21 +246342,21 @@ var require_view = __commonJS({ }; View.prototype.resolve = function resolve9(dir, file) { var ext2 = this.ext; - var path20 = join6(dir, file); - var stat7 = tryStat(path20); + var path21 = join6(dir, file); + var stat7 = tryStat(path21); if (stat7 && stat7.isFile()) { - return path20; + return path21; } - path20 = join6(dir, basename4(file, ext2), "index" + ext2); - stat7 = tryStat(path20); + path21 = join6(dir, basename4(file, ext2), "index" + ext2); + stat7 = tryStat(path21); if (stat7 && stat7.isFile()) { - return path20; + return path21; } }; - function tryStat(path20) { - debug('stat "%s"', path20); + function tryStat(path21) { + debug('stat "%s"', path21); try { - return fs7.statSync(path20); + return fs7.statSync(path21); } catch (e) { return void 0; } @@ -245207,7 +246710,7 @@ var require_types25 = __commonJS({ // ../node_modules/.pnpm/mime@1.6.0/node_modules/mime/mime.js var require_mime = __commonJS({ "../node_modules/.pnpm/mime@1.6.0/node_modules/mime/mime.js"(exports2, module2) { - var path19 = require("path"); + var path20 = require("path"); var fs7 = require("fs"); function Mime() { this.types = /* @__PURE__ */ Object.create(null); @@ -245237,8 +246740,8 @@ var require_mime = __commonJS({ this.define(map); this._loading = null; }; - Mime.prototype.lookup = function(path20, fallback) { - var ext2 = path20.replace(/^.*[\.\/\\]/, "").toLowerCase(); + Mime.prototype.lookup = function(path21, fallback) { + var ext2 = path21.replace(/^.*[\.\/\\]/, "").toLowerCase(); return this.types[ext2] || fallback || this.default_type; }; Mime.prototype.extension = function(mimeType) { @@ -245472,28 +246975,28 @@ var require_send = __commonJS({ var ms = require_ms3(); var onFinished = require_on_finished2(); var parseRange = require_range_parser(); - var path19 = require("path"); + var path20 = require("path"); var statuses = require_statuses(); var Stream2 = require("stream"); var util2 = require("util"); - var extname = path19.extname; - var join6 = path19.join; - var normalize5 = path19.normalize; - var resolve8 = path19.resolve; - var sep2 = path19.sep; + var extname = path20.extname; + var join6 = path20.join; + var normalize5 = path20.normalize; + var resolve8 = path20.resolve; + var sep2 = path20.sep; var BYTES_RANGE_REGEXP = /^ *bytes=/; var MAX_MAXAGE = 60 * 60 * 24 * 365 * 1e3; var UP_PATH_REGEXP = /(?:^|[\\/])\.\.(?:[\\/]|$)/; module2.exports = send; module2.exports.mime = mime; - function send(req, path20, options2) { - return new SendStream(req, path20, options2); + function send(req, path21, options2) { + return new SendStream(req, path21, options2); } - function SendStream(req, path20, options2) { + function SendStream(req, path21, options2) { Stream2.call(this); var opts = options2 || {}; this.options = opts; - this.path = path20; + this.path = path21; this.req = req; this._acceptRanges = opts.acceptRanges !== void 0 ? Boolean(opts.acceptRanges) : true; this._cacheControl = opts.cacheControl !== void 0 ? Boolean(opts.cacheControl) : true; @@ -245539,8 +247042,8 @@ var require_send = __commonJS({ this._index = index2; return this; }, "send.index: pass index as option"); - SendStream.prototype.root = function root(path20) { - this._root = resolve8(String(path20)); + SendStream.prototype.root = function root(path21) { + this._root = resolve8(String(path21)); debug("root %s", this._root); return this; }; @@ -245653,10 +247156,10 @@ var require_send = __commonJS({ var lastModified = this.res.getHeader("Last-Modified"); return parseHttpDate(lastModified) <= parseHttpDate(ifRange); }; - SendStream.prototype.redirect = function redirect(path20) { + SendStream.prototype.redirect = function redirect(path21) { var res = this.res; if (hasListeners(this, "directory")) { - this.emit("directory", res, path20); + this.emit("directory", res, path21); return; } if (this.hasTrailingSlash()) { @@ -245676,42 +247179,42 @@ var require_send = __commonJS({ SendStream.prototype.pipe = function pipe(res) { var root = this._root; this.res = res; - var path20 = decode(this.path); - if (path20 === -1) { + var path21 = decode(this.path); + if (path21 === -1) { this.error(400); return res; } - if (~path20.indexOf("\0")) { + if (~path21.indexOf("\0")) { this.error(400); return res; } var parts; if (root !== null) { - if (path20) { - path20 = normalize5("." + sep2 + path20); + if (path21) { + path21 = normalize5("." + sep2 + path21); } - if (UP_PATH_REGEXP.test(path20)) { - debug('malicious path "%s"', path20); + if (UP_PATH_REGEXP.test(path21)) { + debug('malicious path "%s"', path21); this.error(403); return res; } - parts = path20.split(sep2); - path20 = normalize5(join6(root, path20)); + parts = path21.split(sep2); + path21 = normalize5(join6(root, path21)); } else { - if (UP_PATH_REGEXP.test(path20)) { - debug('malicious path "%s"', path20); + if (UP_PATH_REGEXP.test(path21)) { + debug('malicious path "%s"', path21); this.error(403); return res; } - parts = normalize5(path20).split(sep2); - path20 = resolve8(path20); + parts = normalize5(path21).split(sep2); + path21 = resolve8(path21); } if (containsDotFile(parts)) { var access2 = this._dotfiles; if (access2 === void 0) { access2 = parts[parts.length - 1][0] === "." ? this._hidden ? "allow" : "ignore" : "allow"; } - debug('%s dotfile "%s"', access2, path20); + debug('%s dotfile "%s"', access2, path21); switch (access2) { case "allow": break; @@ -245725,13 +247228,13 @@ var require_send = __commonJS({ } } if (this._index.length && this.hasTrailingSlash()) { - this.sendIndex(path20); + this.sendIndex(path21); return res; } - this.sendFile(path20); + this.sendFile(path21); return res; }; - SendStream.prototype.send = function send2(path20, stat7) { + SendStream.prototype.send = function send2(path21, stat7) { var len = stat7.size; var options2 = this.options; var opts = {}; @@ -245743,9 +247246,9 @@ var require_send = __commonJS({ this.headersAlreadySent(); return; } - debug('pipe "%s"', path20); - this.setHeader(path20, stat7); - this.type(path20); + debug('pipe "%s"', path21); + this.setHeader(path21, stat7); + this.type(path21); if (this.isConditionalGET()) { if (this.isPreconditionFailure()) { this.error(412); @@ -245795,28 +247298,28 @@ var require_send = __commonJS({ res.end(); return; } - this.stream(path20, opts); + this.stream(path21, opts); }; - SendStream.prototype.sendFile = function sendFile(path20) { + SendStream.prototype.sendFile = function sendFile(path21) { var i = 0; var self2 = this; - debug('stat "%s"', path20); - fs7.stat(path20, function onstat(err3, stat7) { - if (err3 && err3.code === "ENOENT" && !extname(path20) && path20[path20.length - 1] !== sep2) { + debug('stat "%s"', path21); + fs7.stat(path21, function onstat(err3, stat7) { + if (err3 && err3.code === "ENOENT" && !extname(path21) && path21[path21.length - 1] !== sep2) { return next(err3); } if (err3) return self2.onStatError(err3); if (stat7.isDirectory()) - return self2.redirect(path20); - self2.emit("file", path20, stat7); - self2.send(path20, stat7); + return self2.redirect(path21); + self2.emit("file", path21, stat7); + self2.send(path21, stat7); }); function next(err3) { if (self2._extensions.length <= i) { return err3 ? self2.onStatError(err3) : self2.error(404); } - var p = path20 + "." + self2._extensions[i++]; + var p = path21 + "." + self2._extensions[i++]; debug('stat "%s"', p); fs7.stat(p, function(err4, stat7) { if (err4) @@ -245828,7 +247331,7 @@ var require_send = __commonJS({ }); } }; - SendStream.prototype.sendIndex = function sendIndex(path20) { + SendStream.prototype.sendIndex = function sendIndex(path21) { var i = -1; var self2 = this; function next(err3) { @@ -245837,7 +247340,7 @@ var require_send = __commonJS({ return self2.onStatError(err3); return self2.error(404); } - var p = join6(path20, self2._index[i]); + var p = join6(path21, self2._index[i]); debug('stat "%s"', p); fs7.stat(p, function(err4, stat7) { if (err4) @@ -245850,10 +247353,10 @@ var require_send = __commonJS({ } next(); }; - SendStream.prototype.stream = function stream5(path20, options2) { + SendStream.prototype.stream = function stream5(path21, options2) { var self2 = this; var res = this.res; - var stream6 = fs7.createReadStream(path20, options2); + var stream6 = fs7.createReadStream(path21, options2); this.emit("stream", stream6); stream6.pipe(res); function cleanup() { @@ -245868,11 +247371,11 @@ var require_send = __commonJS({ self2.emit("end"); }); }; - SendStream.prototype.type = function type(path20) { + SendStream.prototype.type = function type(path21) { var res = this.res; if (res.getHeader("Content-Type")) return; - var type2 = mime.lookup(path20); + var type2 = mime.lookup(path21); if (!type2) { debug("no content-type"); return; @@ -245881,9 +247384,9 @@ var require_send = __commonJS({ debug("content-type %s", type2); res.setHeader("Content-Type", type2 + (charset ? "; charset=" + charset : "")); }; - SendStream.prototype.setHeader = function setHeader(path20, stat7) { + SendStream.prototype.setHeader = function setHeader(path21, stat7) { var res = this.res; - this.emit("headers", res, path20, stat7); + this.emit("headers", res, path21, stat7); if (this._acceptRanges && !res.getHeader("Accept-Ranges")) { debug("accept ranges"); res.setHeader("Accept-Ranges", "bytes"); @@ -245942,9 +247445,9 @@ var require_send = __commonJS({ } return err3 instanceof Error ? createError(status, err3, { expose: false }) : createError(status, err3); } - function decode(path20) { + function decode(path21) { try { - return decodeURIComponent(path20); + return decodeURIComponent(path21); } catch (err3) { return -1; } @@ -246856,12 +248359,12 @@ var require_utils21 = __commonJS({ var querystring = require("querystring"); exports2.etag = createETagGenerator({ weak: false }); exports2.wetag = createETagGenerator({ weak: true }); - exports2.isAbsolute = function(path19) { - if ("/" === path19[0]) + exports2.isAbsolute = function(path20) { + if ("/" === path20[0]) return true; - if (":" === path19[1] && ("\\" === path19[2] || "/" === path19[2])) + if (":" === path20[1] && ("\\" === path20[2] || "/" === path20[2])) return true; - if ("\\\\" === path19.substring(0, 2)) + if ("\\\\" === path20.substring(0, 2)) return true; }; exports2.flatten = deprecate.function( @@ -247074,7 +248577,7 @@ var require_application = __commonJS({ }; app.use = function use2(fn) { var offset = 0; - var path19 = "/"; + var path20 = "/"; if (typeof fn !== "function") { var arg = fn; while (Array.isArray(arg) && arg.length !== 0) { @@ -247082,7 +248585,7 @@ var require_application = __commonJS({ } if (typeof arg !== "function") { offset = 1; - path19 = fn; + path20 = fn; } } var fns = flatten(slice.call(arguments, offset)); @@ -247093,12 +248596,12 @@ var require_application = __commonJS({ var router = this._router; fns.forEach(function(fn2) { if (!fn2 || !fn2.handle || !fn2.set) { - return router.use(path19, fn2); + return router.use(path20, fn2); } - debug(".use app under %s", path19); - fn2.mountpath = path19; + debug(".use app under %s", path20); + fn2.mountpath = path20; fn2.parent = this; - router.use(path19, function mounted_app(req, res, next) { + router.use(path20, function mounted_app(req, res, next) { var orig = req.app; fn2.handle(req, res, function(err3) { setPrototypeOf(req, orig.request); @@ -247110,9 +248613,9 @@ var require_application = __commonJS({ }, this); return this; }; - app.route = function route(path19) { + app.route = function route(path20) { this.lazyrouter(); - return this._router.route(path19); + return this._router.route(path20); }; app.engine = function engine(ext2, fn) { if (typeof fn !== "function") { @@ -247163,7 +248666,7 @@ var require_application = __commonJS({ } return this; }; - app.path = function path19() { + app.path = function path20() { return this.parent ? this.parent.path() + this.mountpath : ""; }; app.enabled = function enabled(setting) { @@ -247179,19 +248682,19 @@ var require_application = __commonJS({ return this.set(setting, false); }; methods.forEach(function(method) { - app[method] = function(path19) { + app[method] = function(path20) { if (method === "get" && arguments.length === 1) { - return this.set(path19); + return this.set(path20); } this.lazyrouter(); - var route = this._router.route(path19); + var route = this._router.route(path20); route[method].apply(route, slice.call(arguments, 1)); return this; }; }); - app.all = function all3(path19) { + app.all = function all3(path20) { this.lazyrouter(); - var route = this._router.route(path19); + var route = this._router.route(path20); var args3 = slice.call(arguments, 1); for (var i = 0; i < methods.length; i++) { route[methods[i]].apply(route, args3); @@ -247963,7 +249466,7 @@ var require_request2 = __commonJS({ var subdomains2 = !isIP(hostname) ? hostname.split(".").reverse() : [hostname]; return subdomains2.slice(offset); }); - defineGetter(req, "path", function path19() { + defineGetter(req, "path", function path20() { return parse7(this).pathname; }); defineGetter(req, "hostname", function hostname() { @@ -248194,7 +249697,7 @@ var require_response = __commonJS({ var http5 = require("http"); var isAbsolute = require_utils21().isAbsolute; var onFinished = require_on_finished2(); - var path19 = require("path"); + var path20 = require("path"); var statuses = require_statuses(); var merge3 = require_utils_merge(); var sign = require_cookie_signature().sign; @@ -248203,9 +249706,9 @@ var require_response = __commonJS({ var setCharset = require_utils21().setCharset; var cookie = require_cookie2(); var send = require_send(); - var extname = path19.extname; + var extname = path20.extname; var mime = send.mime; - var resolve8 = path19.resolve; + var resolve8 = path20.resolve; var vary = require_vary(); var res = Object.create(http5.ServerResponse.prototype); module2.exports = res; @@ -248383,26 +249886,26 @@ var require_response = __commonJS({ this.type("txt"); return this.send(body2); }; - res.sendFile = function sendFile(path20, options2, callback) { + res.sendFile = function sendFile(path21, options2, callback) { var done = callback; var req = this.req; var res2 = this; var next = req.next; var opts = options2 || {}; - if (!path20) { + if (!path21) { throw new TypeError("path argument is required to res.sendFile"); } - if (typeof path20 !== "string") { + if (typeof path21 !== "string") { throw new TypeError("path must be a string to res.sendFile"); } if (typeof options2 === "function") { done = options2; opts = {}; } - if (!opts.root && !isAbsolute(path20)) { + if (!opts.root && !isAbsolute(path21)) { throw new TypeError("path must be absolute or specify root to res.sendFile"); } - var pathname = encodeURI(path20); + var pathname = encodeURI(path21); var file = send(req, pathname, opts); sendfile(res2, file, opts, function(err3) { if (done) @@ -248414,7 +249917,7 @@ var require_response = __commonJS({ } }); }; - res.sendfile = function(path20, options2, callback) { + res.sendfile = function(path21, options2, callback) { var done = callback; var req = this.req; var res2 = this; @@ -248424,7 +249927,7 @@ var require_response = __commonJS({ done = options2; opts = {}; } - var file = send(req, path20, opts); + var file = send(req, path21, opts); sendfile(res2, file, opts, function(err3) { if (done) return done(err3); @@ -248439,7 +249942,7 @@ var require_response = __commonJS({ res.sendfile, "res.sendfile: Use res.sendFile instead" ); - res.download = function download(path20, filename, options2, callback) { + res.download = function download(path21, filename, options2, callback) { var done = callback; var name = filename; var opts = options2 || null; @@ -248456,7 +249959,7 @@ var require_response = __commonJS({ opts = filename; } var headers = { - "Content-Disposition": contentDisposition(name || path20) + "Content-Disposition": contentDisposition(name || path21) }; if (opts && opts.headers) { var keys = Object.keys(opts.headers); @@ -248469,7 +249972,7 @@ var require_response = __commonJS({ } opts = Object.create(opts); opts.headers = headers; - var fullPath = !opts.root ? resolve8(path20) : path20; + var fullPath = !opts.root ? resolve8(path21) : path21; return this.sendFile(fullPath, opts, done); }; res.contentType = res.type = function contentType(type) { @@ -248768,11 +250271,11 @@ var require_serve_static = __commonJS({ } var forwardError = !fallthrough; var originalUrl = parseUrl.original(req); - var path19 = parseUrl(req).pathname; - if (path19 === "/" && originalUrl.pathname.substr(-1) !== "/") { - path19 = ""; + var path20 = parseUrl(req).pathname; + if (path20 === "/" && originalUrl.pathname.substr(-1) !== "/") { + path20 = ""; } - var stream5 = send(req, path19, opts); + var stream5 = send(req, path20, opts); stream5.on("directory", onDirectory); if (setHeaders) { stream5.on("headers", setHeaders); @@ -249148,7 +250651,7 @@ var require_pollyjs_node_server = __commonJS({ function _interopDefault(ex) { return ex && typeof ex === "object" && "default" in ex ? ex["default"] : ex; } - var path19 = _interopDefault(require("path")); + var path20 = _interopDefault(require("path")); var fs7 = _interopDefault(require_lib4()); var utils = require_pollyjs_utils(); var cors = _interopDefault(require_lib5()); @@ -249186,7 +250689,7 @@ var require_pollyjs_node_server = __commonJS({ return this.respond(200); } filenameFor(recording) { - return path19.join(this.recordingsDir, recording, "recording.har"); + return path20.join(this.recordingsDir, recording, "recording.har"); } respond(status, body2) { return { @@ -254483,10 +255986,10 @@ var require_fs3 = __commonJS({ var require_utils22 = __commonJS({ "../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/mkdirs/utils.js"(exports2, module2) { "use strict"; - var path19 = require("path"); + var path20 = require("path"); module2.exports.checkPath = function checkPath(pth) { if (process.platform === "win32") { - const pathHasInvalidWinCharacters = /[<>:"|?*]/.test(pth.replace(path19.parse(pth).root, "")); + const pathHasInvalidWinCharacters = /[<>:"|?*]/.test(pth.replace(path20.parse(pth).root, "")); if (pathHasInvalidWinCharacters) { const error = new Error(`Path contains invalid characters: ${pth}`); error.code = "EINVAL"; @@ -254551,8 +256054,8 @@ var require_path_exists2 = __commonJS({ "use strict"; var u = require_universalify().fromPromise; var fs7 = require_fs3(); - function pathExists(path19) { - return fs7.access(path19).then(() => true).catch(() => false); + function pathExists(path20) { + return fs7.access(path20).then(() => true).catch(() => false); } module2.exports = { pathExists: u(pathExists), @@ -254567,8 +256070,8 @@ var require_utimes2 = __commonJS({ "use strict"; var fs7 = require_fs3(); var u = require_universalify().fromPromise; - async function utimesMillis(path19, atime, mtime) { - const fd = await fs7.open(path19, "r+"); + async function utimesMillis(path20, atime, mtime) { + const fd = await fs7.open(path20, "r+"); let closeErr = null; try { await fs7.futimes(fd, atime, mtime); @@ -254583,8 +256086,8 @@ var require_utimes2 = __commonJS({ throw closeErr; } } - function utimesMillisSync(path19, atime, mtime) { - const fd = fs7.openSync(path19, "r+"); + function utimesMillisSync(path20, atime, mtime) { + const fd = fs7.openSync(path20, "r+"); fs7.futimesSync(fd, atime, mtime); return fs7.closeSync(fd); } @@ -254600,7 +256103,7 @@ var require_stat2 = __commonJS({ "../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/util/stat.js"(exports2, module2) { "use strict"; var fs7 = require_fs3(); - var path19 = require("path"); + var path20 = require("path"); var u = require_universalify().fromPromise; function getStats(src, dest, opts) { const statFunc = opts.dereference ? (file) => fs7.stat(file, { bigint: true }) : (file) => fs7.lstat(file, { bigint: true }); @@ -254630,8 +256133,8 @@ var require_stat2 = __commonJS({ const { srcStat, destStat } = await getStats(src, dest, opts); if (destStat) { if (areIdentical(srcStat, destStat)) { - const srcBaseName = path19.basename(src); - const destBaseName = path19.basename(dest); + const srcBaseName = path20.basename(src); + const destBaseName = path20.basename(dest); if (funcName === "move" && srcBaseName !== destBaseName && srcBaseName.toLowerCase() === destBaseName.toLowerCase()) { return { srcStat, destStat, isChangingCase: true }; } @@ -254653,8 +256156,8 @@ var require_stat2 = __commonJS({ const { srcStat, destStat } = getStatsSync(src, dest, opts); if (destStat) { if (areIdentical(srcStat, destStat)) { - const srcBaseName = path19.basename(src); - const destBaseName = path19.basename(dest); + const srcBaseName = path20.basename(src); + const destBaseName = path20.basename(dest); if (funcName === "move" && srcBaseName !== destBaseName && srcBaseName.toLowerCase() === destBaseName.toLowerCase()) { return { srcStat, destStat, isChangingCase: true }; } @@ -254673,9 +256176,9 @@ var require_stat2 = __commonJS({ return { srcStat, destStat }; } async function checkParentPaths(src, srcStat, dest, funcName) { - const srcParent = path19.resolve(path19.dirname(src)); - const destParent = path19.resolve(path19.dirname(dest)); - if (destParent === srcParent || destParent === path19.parse(destParent).root) + const srcParent = path20.resolve(path20.dirname(src)); + const destParent = path20.resolve(path20.dirname(dest)); + if (destParent === srcParent || destParent === path20.parse(destParent).root) return; let destStat; try { @@ -254691,9 +256194,9 @@ var require_stat2 = __commonJS({ return checkParentPaths(src, srcStat, destParent, funcName); } function checkParentPathsSync(src, srcStat, dest, funcName) { - const srcParent = path19.resolve(path19.dirname(src)); - const destParent = path19.resolve(path19.dirname(dest)); - if (destParent === srcParent || destParent === path19.parse(destParent).root) + const srcParent = path20.resolve(path20.dirname(src)); + const destParent = path20.resolve(path20.dirname(dest)); + if (destParent === srcParent || destParent === path20.parse(destParent).root) return; let destStat; try { @@ -254712,8 +256215,8 @@ var require_stat2 = __commonJS({ return destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev; } function isSrcSubdir(src, dest) { - const srcArr = path19.resolve(src).split(path19.sep).filter((i) => i); - const destArr = path19.resolve(dest).split(path19.sep).filter((i) => i); + const srcArr = path20.resolve(src).split(path20.sep).filter((i) => i); + const destArr = path20.resolve(dest).split(path20.sep).filter((i) => i); return srcArr.every((cur, i) => destArr[i] === cur); } function errMsg(src, dest, funcName) { @@ -254738,7 +256241,7 @@ var require_copy3 = __commonJS({ "../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/copy/copy.js"(exports2, module2) { "use strict"; var fs7 = require_fs3(); - var path19 = require("path"); + var path20 = require("path"); var { mkdirs } = require_mkdirs2(); var { pathExists } = require_path_exists2(); var { utimesMillis } = require_utimes2(); @@ -254761,7 +256264,7 @@ var require_copy3 = __commonJS({ const include = await runFilter(src, dest, opts); if (!include) return; - const destParent = path19.dirname(dest); + const destParent = path20.dirname(dest); const dirExists = await pathExists(destParent); if (!dirExists) { await mkdirs(destParent); @@ -254822,8 +256325,8 @@ var require_copy3 = __commonJS({ } const items = await fs7.readdir(src); await Promise.all(items.map(async (item) => { - const srcItem = path19.join(src, item); - const destItem = path19.join(dest, item); + const srcItem = path20.join(src, item); + const destItem = path20.join(dest, item); const include = await runFilter(srcItem, destItem, opts); if (!include) return; @@ -254837,7 +256340,7 @@ var require_copy3 = __commonJS({ async function onLink(destStat, src, dest, opts) { let resolvedSrc = await fs7.readlink(src); if (opts.dereference) { - resolvedSrc = path19.resolve(process.cwd(), resolvedSrc); + resolvedSrc = path20.resolve(process.cwd(), resolvedSrc); } if (!destStat) { return fs7.symlink(resolvedSrc, dest); @@ -254851,7 +256354,7 @@ var require_copy3 = __commonJS({ throw e; } if (opts.dereference) { - resolvedDest = path19.resolve(process.cwd(), resolvedDest); + resolvedDest = path20.resolve(process.cwd(), resolvedDest); } if (stat7.isSrcSubdir(resolvedSrc, resolvedDest)) { throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`); @@ -254871,7 +256374,7 @@ var require_copy_sync2 = __commonJS({ "../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/copy/copy-sync.js"(exports2, module2) { "use strict"; var fs7 = require_graceful_fs(); - var path19 = require("path"); + var path20 = require("path"); var mkdirsSync = require_mkdirs2().mkdirsSync; var utimesMillisSync = require_utimes2().utimesMillisSync; var stat7 = require_stat2(); @@ -254893,7 +256396,7 @@ var require_copy_sync2 = __commonJS({ stat7.checkParentPathsSync(src, srcStat, dest, "copy"); if (opts.filter && !opts.filter(src, dest)) return; - const destParent = path19.dirname(dest); + const destParent = path20.dirname(dest); if (!fs7.existsSync(destParent)) mkdirsSync(destParent); return getStats(destStat, src, dest, opts); @@ -254964,8 +256467,8 @@ var require_copy_sync2 = __commonJS({ fs7.readdirSync(src).forEach((item) => copyDirItem(item, src, dest, opts)); } function copyDirItem(item, src, dest, opts) { - const srcItem = path19.join(src, item); - const destItem = path19.join(dest, item); + const srcItem = path20.join(src, item); + const destItem = path20.join(dest, item); if (opts.filter && !opts.filter(srcItem, destItem)) return; const { destStat } = stat7.checkPathsSync(srcItem, destItem, "copy", opts); @@ -254974,7 +256477,7 @@ var require_copy_sync2 = __commonJS({ function onLink(destStat, src, dest, opts) { let resolvedSrc = fs7.readlinkSync(src); if (opts.dereference) { - resolvedSrc = path19.resolve(process.cwd(), resolvedSrc); + resolvedSrc = path20.resolve(process.cwd(), resolvedSrc); } if (!destStat) { return fs7.symlinkSync(resolvedSrc, dest); @@ -254988,7 +256491,7 @@ var require_copy_sync2 = __commonJS({ throw err3; } if (opts.dereference) { - resolvedDest = path19.resolve(process.cwd(), resolvedDest); + resolvedDest = path20.resolve(process.cwd(), resolvedDest); } if (stat7.isSrcSubdir(resolvedSrc, resolvedDest)) { throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`); @@ -255025,11 +256528,11 @@ var require_remove2 = __commonJS({ "use strict"; var fs7 = require_graceful_fs(); var u = require_universalify().fromCallback; - function remove(path19, callback) { - fs7.rm(path19, { recursive: true, force: true }, callback); + function remove(path20, callback) { + fs7.rm(path20, { recursive: true, force: true }, callback); } - function removeSync(path19) { - fs7.rmSync(path19, { recursive: true, force: true }); + function removeSync(path20) { + fs7.rmSync(path20, { recursive: true, force: true }); } module2.exports = { remove: u(remove), @@ -255044,7 +256547,7 @@ var require_empty3 = __commonJS({ "use strict"; var u = require_universalify().fromPromise; var fs7 = require_fs3(); - var path19 = require("path"); + var path20 = require("path"); var mkdir6 = require_mkdirs2(); var remove = require_remove2(); var emptyDir = u(async function emptyDir2(dir) { @@ -255054,7 +256557,7 @@ var require_empty3 = __commonJS({ } catch { return mkdir6.mkdirs(dir); } - return Promise.all(items.map((item) => remove.remove(path19.join(dir, item)))); + return Promise.all(items.map((item) => remove.remove(path20.join(dir, item)))); }); function emptyDirSync(dir) { let items; @@ -255064,7 +256567,7 @@ var require_empty3 = __commonJS({ return mkdir6.mkdirsSync(dir); } items.forEach((item) => { - item = path19.join(dir, item); + item = path20.join(dir, item); remove.removeSync(item); }); } @@ -255082,7 +256585,7 @@ var require_file2 = __commonJS({ "../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/file.js"(exports2, module2) { "use strict"; var u = require_universalify().fromPromise; - var path19 = require("path"); + var path20 = require("path"); var fs7 = require_fs3(); var mkdir6 = require_mkdirs2(); async function createFile(file) { @@ -255093,7 +256596,7 @@ var require_file2 = __commonJS({ } if (stats && stats.isFile()) return; - const dir = path19.dirname(file); + const dir = path20.dirname(file); let dirStats = null; try { dirStats = await fs7.stat(dir); @@ -255120,7 +256623,7 @@ var require_file2 = __commonJS({ } if (stats && stats.isFile()) return; - const dir = path19.dirname(file); + const dir = path20.dirname(file); try { if (!fs7.statSync(dir).isDirectory()) { fs7.readdirSync(dir); @@ -255145,7 +256648,7 @@ var require_link2 = __commonJS({ "../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/link.js"(exports2, module2) { "use strict"; var u = require_universalify().fromPromise; - var path19 = require("path"); + var path20 = require("path"); var fs7 = require_fs3(); var mkdir6 = require_mkdirs2(); var { pathExists } = require_path_exists2(); @@ -255165,7 +256668,7 @@ var require_link2 = __commonJS({ } if (dstStat && areIdentical(srcStat, dstStat)) return; - const dir = path19.dirname(dstpath); + const dir = path20.dirname(dstpath); const dirExists = await pathExists(dir); if (!dirExists) { await mkdir6.mkdirs(dir); @@ -255186,7 +256689,7 @@ var require_link2 = __commonJS({ err3.message = err3.message.replace("lstat", "ensureLink"); throw err3; } - const dir = path19.dirname(dstpath); + const dir = path20.dirname(dstpath); const dirExists = fs7.existsSync(dir); if (dirExists) return fs7.linkSync(srcpath, dstpath); @@ -255204,12 +256707,12 @@ var require_link2 = __commonJS({ var require_symlink_paths2 = __commonJS({ "../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/symlink-paths.js"(exports2, module2) { "use strict"; - var path19 = require("path"); + var path20 = require("path"); var fs7 = require_fs3(); var { pathExists } = require_path_exists2(); var u = require_universalify().fromPromise; async function symlinkPaths(srcpath, dstpath) { - if (path19.isAbsolute(srcpath)) { + if (path20.isAbsolute(srcpath)) { try { await fs7.lstat(srcpath); } catch (err3) { @@ -255221,8 +256724,8 @@ var require_symlink_paths2 = __commonJS({ toDst: srcpath }; } - const dstdir = path19.dirname(dstpath); - const relativeToDst = path19.join(dstdir, srcpath); + const dstdir = path20.dirname(dstpath); + const relativeToDst = path20.join(dstdir, srcpath); const exists = await pathExists(relativeToDst); if (exists) { return { @@ -255238,11 +256741,11 @@ var require_symlink_paths2 = __commonJS({ } return { toCwd: srcpath, - toDst: path19.relative(dstdir, srcpath) + toDst: path20.relative(dstdir, srcpath) }; } function symlinkPathsSync(srcpath, dstpath) { - if (path19.isAbsolute(srcpath)) { + if (path20.isAbsolute(srcpath)) { const exists2 = fs7.existsSync(srcpath); if (!exists2) throw new Error("absolute srcpath does not exist"); @@ -255251,8 +256754,8 @@ var require_symlink_paths2 = __commonJS({ toDst: srcpath }; } - const dstdir = path19.dirname(dstpath); - const relativeToDst = path19.join(dstdir, srcpath); + const dstdir = path20.dirname(dstpath); + const relativeToDst = path20.join(dstdir, srcpath); const exists = fs7.existsSync(relativeToDst); if (exists) { return { @@ -255265,7 +256768,7 @@ var require_symlink_paths2 = __commonJS({ throw new Error("relative srcpath does not exist"); return { toCwd: srcpath, - toDst: path19.relative(dstdir, srcpath) + toDst: path20.relative(dstdir, srcpath) }; } module2.exports = { @@ -255315,7 +256818,7 @@ var require_symlink2 = __commonJS({ "../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/symlink.js"(exports2, module2) { "use strict"; var u = require_universalify().fromPromise; - var path19 = require("path"); + var path20 = require("path"); var fs7 = require_fs3(); var { mkdirs, mkdirsSync } = require_mkdirs2(); var { symlinkPaths, symlinkPathsSync } = require_symlink_paths2(); @@ -255339,7 +256842,7 @@ var require_symlink2 = __commonJS({ const relative = await symlinkPaths(srcpath, dstpath); srcpath = relative.toDst; const toType = await symlinkType(relative.toCwd, type); - const dir = path19.dirname(dstpath); + const dir = path20.dirname(dstpath); if (!await pathExists(dir)) { await mkdirs(dir); } @@ -255360,7 +256863,7 @@ var require_symlink2 = __commonJS({ const relative = symlinkPathsSync(srcpath, dstpath); srcpath = relative.toDst; type = symlinkTypeSync(relative.toCwd, type); - const dir = path19.dirname(dstpath); + const dir = path20.dirname(dstpath); const exists = fs7.existsSync(dir); if (exists) return fs7.symlinkSync(srcpath, dstpath, type); @@ -255422,18 +256925,18 @@ var require_output_file2 = __commonJS({ "use strict"; var u = require_universalify().fromPromise; var fs7 = require_fs3(); - var path19 = require("path"); + var path20 = require("path"); var mkdir6 = require_mkdirs2(); var pathExists = require_path_exists2().pathExists; async function outputFile(file, data, encoding = "utf-8") { - const dir = path19.dirname(file); + const dir = path20.dirname(file); if (!await pathExists(dir)) { await mkdir6.mkdirs(dir); } return fs7.writeFile(file, data, encoding); } function outputFileSync(file, ...args3) { - const dir = path19.dirname(file); + const dir = path20.dirname(file); if (!fs7.existsSync(dir)) { mkdir6.mkdirsSync(dir); } @@ -255497,7 +257000,7 @@ var require_move3 = __commonJS({ "../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/move/move.js"(exports2, module2) { "use strict"; var fs7 = require_fs3(); - var path19 = require("path"); + var path20 = require("path"); var { copy } = require_copy4(); var { remove } = require_remove2(); var { mkdirp: mkdirp2 } = require_mkdirs2(); @@ -255507,8 +257010,8 @@ var require_move3 = __commonJS({ const overwrite = opts.overwrite || opts.clobber || false; const { srcStat, isChangingCase = false } = await stat7.checkPaths(src, dest, "move", opts); await stat7.checkParentPaths(src, srcStat, dest, "move"); - const destParent = path19.dirname(dest); - const parsedParentPath = path19.parse(destParent); + const destParent = path20.dirname(dest); + const parsedParentPath = path20.parse(destParent); if (parsedParentPath.root !== destParent) { await mkdirp2(destParent); } @@ -255549,7 +257052,7 @@ var require_move_sync2 = __commonJS({ "../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/move/move-sync.js"(exports2, module2) { "use strict"; var fs7 = require_graceful_fs(); - var path19 = require("path"); + var path20 = require("path"); var copySync = require_copy4().copySync; var removeSync = require_remove2().removeSync; var mkdirpSync2 = require_mkdirs2().mkdirpSync; @@ -255560,12 +257063,12 @@ var require_move_sync2 = __commonJS({ const { srcStat, isChangingCase = false } = stat7.checkPathsSync(src, dest, "move", opts); stat7.checkParentPathsSync(src, srcStat, dest, "move"); if (!isParentRoot(dest)) - mkdirpSync2(path19.dirname(dest)); + mkdirpSync2(path20.dirname(dest)); return doRename(src, dest, overwrite, isChangingCase); } function isParentRoot(dest) { - const parent = path19.dirname(dest); - const parsedPath = path19.parse(parent); + const parent = path20.dirname(dest); + const parsedPath = path20.parse(parent); return parsedPath.root === parent; } function doRename(src, dest, overwrite, isChangingCase) { @@ -255711,17 +257214,17 @@ var require_visit = __commonJS({ visit.BREAK = BREAK; visit.SKIP = SKIP; visit.REMOVE = REMOVE; - function visit_(key, node, visitor, path19) { - const ctrl = callVisitor(key, node, visitor, path19); + function visit_(key, node, visitor, path20) { + const ctrl = callVisitor(key, node, visitor, path20); if (identity2.isNode(ctrl) || identity2.isPair(ctrl)) { - replaceNode(key, path19, ctrl); - return visit_(key, ctrl, visitor, path19); + replaceNode(key, path20, ctrl); + return visit_(key, ctrl, visitor, path20); } if (typeof ctrl !== "symbol") { if (identity2.isCollection(node)) { - path19 = Object.freeze(path19.concat(node)); + path20 = Object.freeze(path20.concat(node)); for (let i = 0; i < node.items.length; ++i) { - const ci = visit_(i, node.items[i], visitor, path19); + const ci = visit_(i, node.items[i], visitor, path20); if (typeof ci === "number") i = ci - 1; else if (ci === BREAK) @@ -255732,13 +257235,13 @@ var require_visit = __commonJS({ } } } else if (identity2.isPair(node)) { - path19 = Object.freeze(path19.concat(node)); - const ck = visit_("key", node.key, visitor, path19); + path20 = Object.freeze(path20.concat(node)); + const ck = visit_("key", node.key, visitor, path20); if (ck === BREAK) return BREAK; else if (ck === REMOVE) node.key = null; - const cv = visit_("value", node.value, visitor, path19); + const cv = visit_("value", node.value, visitor, path20); if (cv === BREAK) return BREAK; else if (cv === REMOVE) @@ -255759,17 +257262,17 @@ var require_visit = __commonJS({ visitAsync.BREAK = BREAK; visitAsync.SKIP = SKIP; visitAsync.REMOVE = REMOVE; - async function visitAsync_(key, node, visitor, path19) { - const ctrl = await callVisitor(key, node, visitor, path19); + async function visitAsync_(key, node, visitor, path20) { + const ctrl = await callVisitor(key, node, visitor, path20); if (identity2.isNode(ctrl) || identity2.isPair(ctrl)) { - replaceNode(key, path19, ctrl); - return visitAsync_(key, ctrl, visitor, path19); + replaceNode(key, path20, ctrl); + return visitAsync_(key, ctrl, visitor, path20); } if (typeof ctrl !== "symbol") { if (identity2.isCollection(node)) { - path19 = Object.freeze(path19.concat(node)); + path20 = Object.freeze(path20.concat(node)); for (let i = 0; i < node.items.length; ++i) { - const ci = await visitAsync_(i, node.items[i], visitor, path19); + const ci = await visitAsync_(i, node.items[i], visitor, path20); if (typeof ci === "number") i = ci - 1; else if (ci === BREAK) @@ -255780,13 +257283,13 @@ var require_visit = __commonJS({ } } } else if (identity2.isPair(node)) { - path19 = Object.freeze(path19.concat(node)); - const ck = await visitAsync_("key", node.key, visitor, path19); + path20 = Object.freeze(path20.concat(node)); + const ck = await visitAsync_("key", node.key, visitor, path20); if (ck === BREAK) return BREAK; else if (ck === REMOVE) node.key = null; - const cv = await visitAsync_("value", node.value, visitor, path19); + const cv = await visitAsync_("value", node.value, visitor, path20); if (cv === BREAK) return BREAK; else if (cv === REMOVE) @@ -255813,23 +257316,23 @@ var require_visit = __commonJS({ } return visitor; } - function callVisitor(key, node, visitor, path19) { + function callVisitor(key, node, visitor, path20) { if (typeof visitor === "function") - return visitor(key, node, path19); + return visitor(key, node, path20); if (identity2.isMap(node)) - return visitor.Map?.(key, node, path19); + return visitor.Map?.(key, node, path20); if (identity2.isSeq(node)) - return visitor.Seq?.(key, node, path19); + return visitor.Seq?.(key, node, path20); if (identity2.isPair(node)) - return visitor.Pair?.(key, node, path19); + return visitor.Pair?.(key, node, path20); if (identity2.isScalar(node)) - return visitor.Scalar?.(key, node, path19); + return visitor.Scalar?.(key, node, path20); if (identity2.isAlias(node)) - return visitor.Alias?.(key, node, path19); + return visitor.Alias?.(key, node, path20); return void 0; } - function replaceNode(key, path19, node) { - const parent = path19[path19.length - 1]; + function replaceNode(key, path20, node) { + const parent = path20[path20.length - 1]; if (identity2.isCollection(parent)) { parent.items[key] = node; } else if (identity2.isPair(parent)) { @@ -256427,10 +257930,10 @@ var require_Collection = __commonJS({ var createNode = require_createNode(); var identity2 = require_identity2(); var Node2 = require_Node(); - function collectionFromPath(schema, path19, value) { + function collectionFromPath(schema, path20, value) { let v = value; - for (let i = path19.length - 1; i >= 0; --i) { - const k = path19[i]; + for (let i = path20.length - 1; i >= 0; --i) { + const k = path20[i]; if (typeof k === "number" && Number.isInteger(k) && k >= 0) { const a = []; a[k] = v; @@ -256449,7 +257952,7 @@ var require_Collection = __commonJS({ sourceObjects: /* @__PURE__ */ new Map() }); } - var isEmptyPath = (path19) => path19 == null || typeof path19 === "object" && !!path19[Symbol.iterator]().next().done; + var isEmptyPath = (path20) => path20 == null || typeof path20 === "object" && !!path20[Symbol.iterator]().next().done; var Collection = class extends Node2.NodeBase { constructor(type, schema) { super(type); @@ -256479,11 +257982,11 @@ var require_Collection = __commonJS({ * be a Pair instance or a `{ key, value }` object, which may not have a key * that already exists in the map. */ - addIn(path19, value) { - if (isEmptyPath(path19)) + addIn(path20, value) { + if (isEmptyPath(path20)) this.add(value); else { - const [key, ...rest] = path19; + const [key, ...rest] = path20; const node = this.get(key, true); if (identity2.isCollection(node)) node.addIn(rest, value); @@ -256497,8 +258000,8 @@ var require_Collection = __commonJS({ * Removes a value from the collection. * @returns `true` if the item was found and removed. */ - deleteIn(path19) { - const [key, ...rest] = path19; + deleteIn(path20) { + const [key, ...rest] = path20; if (rest.length === 0) return this.delete(key); const node = this.get(key, true); @@ -256512,8 +258015,8 @@ var require_Collection = __commonJS({ * scalar values from their surrounding node; to disable set `keepScalar` to * `true` (collections are always returned intact). */ - getIn(path19, keepScalar) { - const [key, ...rest] = path19; + getIn(path20, keepScalar) { + const [key, ...rest] = path20; const node = this.get(key, true); if (rest.length === 0) return !keepScalar && identity2.isScalar(node) ? node.value : node; @@ -256531,8 +258034,8 @@ var require_Collection = __commonJS({ /** * Checks if the collection includes a value with the key `key`. */ - hasIn(path19) { - const [key, ...rest] = path19; + hasIn(path20) { + const [key, ...rest] = path20; if (rest.length === 0) return this.has(key); const node = this.get(key, true); @@ -256542,8 +258045,8 @@ var require_Collection = __commonJS({ * Sets a value in this collection. For `!!set`, `value` needs to be a * boolean to add/remove the item from the set. */ - setIn(path19, value) { - const [key, ...rest] = path19; + setIn(path20, value) { + const [key, ...rest] = path20; if (rest.length === 0) { this.set(key, value); } else { @@ -258990,9 +260493,9 @@ var require_Document = __commonJS({ this.contents.add(value); } /** Adds a value to the document. */ - addIn(path19, value) { + addIn(path20, value) { if (assertCollection(this.contents)) - this.contents.addIn(path19, value); + this.contents.addIn(path20, value); } /** * Create a new `Alias` node, ensuring that the target `node` has the required anchor. @@ -259067,14 +260570,14 @@ var require_Document = __commonJS({ * Removes a value from the document. * @returns `true` if the item was found and removed. */ - deleteIn(path19) { - if (Collection.isEmptyPath(path19)) { + deleteIn(path20) { + if (Collection.isEmptyPath(path20)) { if (this.contents == null) return false; this.contents = null; return true; } - return assertCollection(this.contents) ? this.contents.deleteIn(path19) : false; + return assertCollection(this.contents) ? this.contents.deleteIn(path20) : false; } /** * Returns item at `key`, or `undefined` if not found. By default unwraps @@ -259089,10 +260592,10 @@ var require_Document = __commonJS({ * scalar values from their surrounding node; to disable set `keepScalar` to * `true` (collections are always returned intact). */ - getIn(path19, keepScalar) { - if (Collection.isEmptyPath(path19)) + getIn(path20, keepScalar) { + if (Collection.isEmptyPath(path20)) return !keepScalar && identity2.isScalar(this.contents) ? this.contents.value : this.contents; - return identity2.isCollection(this.contents) ? this.contents.getIn(path19, keepScalar) : void 0; + return identity2.isCollection(this.contents) ? this.contents.getIn(path20, keepScalar) : void 0; } /** * Checks if the document includes a value with the key `key`. @@ -259103,10 +260606,10 @@ var require_Document = __commonJS({ /** * Checks if the document includes a value at `path`. */ - hasIn(path19) { - if (Collection.isEmptyPath(path19)) + hasIn(path20) { + if (Collection.isEmptyPath(path20)) return this.contents !== void 0; - return identity2.isCollection(this.contents) ? this.contents.hasIn(path19) : false; + return identity2.isCollection(this.contents) ? this.contents.hasIn(path20) : false; } /** * Sets a value in this document. For `!!set`, `value` needs to be a @@ -259123,13 +260626,13 @@ var require_Document = __commonJS({ * Sets a value in this document. For `!!set`, `value` needs to be a * boolean to add/remove the item from the set. */ - setIn(path19, value) { - if (Collection.isEmptyPath(path19)) { + setIn(path20, value) { + if (Collection.isEmptyPath(path20)) { this.contents = value; } else if (this.contents == null) { - this.contents = Collection.collectionFromPath(this.schema, Array.from(path19), value); + this.contents = Collection.collectionFromPath(this.schema, Array.from(path20), value); } else if (assertCollection(this.contents)) { - this.contents.setIn(path19, value); + this.contents.setIn(path20, value); } } /** @@ -261011,9 +262514,9 @@ var require_cst_visit = __commonJS({ visit.BREAK = BREAK; visit.SKIP = SKIP; visit.REMOVE = REMOVE; - visit.itemAtPath = (cst, path19) => { + visit.itemAtPath = (cst, path20) => { let item = cst; - for (const [field, index] of path19) { + for (const [field, index] of path20) { const tok = item?.[field]; if (tok && "items" in tok) { item = tok.items[index]; @@ -261022,23 +262525,23 @@ var require_cst_visit = __commonJS({ } return item; }; - visit.parentCollection = (cst, path19) => { - const parent = visit.itemAtPath(cst, path19.slice(0, -1)); - const field = path19[path19.length - 1][0]; + visit.parentCollection = (cst, path20) => { + const parent = visit.itemAtPath(cst, path20.slice(0, -1)); + const field = path20[path20.length - 1][0]; const coll = parent?.[field]; if (coll && "items" in coll) return coll; throw new Error("Parent collection not found"); }; - function _visit(path19, item, visitor) { - let ctrl = visitor(item, path19); + function _visit(path20, item, visitor) { + let ctrl = visitor(item, path20); if (typeof ctrl === "symbol") return ctrl; for (const field of ["key", "value"]) { const token = item[field]; if (token && "items" in token) { for (let i = 0; i < token.items.length; ++i) { - const ci = _visit(Object.freeze(path19.concat([[field, i]])), token.items[i], visitor); + const ci = _visit(Object.freeze(path20.concat([[field, i]])), token.items[i], visitor); if (typeof ci === "number") i = ci - 1; else if (ci === BREAK) @@ -261049,10 +262552,10 @@ var require_cst_visit = __commonJS({ } } if (typeof ctrl === "function" && field === "key") - ctrl = ctrl(item, path19); + ctrl = ctrl(item, path20); } } - return typeof ctrl === "function" ? ctrl(item, path19) : ctrl; + return typeof ctrl === "function" ? ctrl(item, path20) : ctrl; } exports2.visit = visit; } @@ -263139,6 +264642,9 @@ var init_root = __esm({ // src/index.ts console.log = console.error; var rootCommand2 = (init_root(), __toCommonJS(root_exports)).rootCommand; +process.on("uncaughtException", (e) => { + console.error("Uncaught exception:", e); +}); var args2 = process.argv.slice(2); var { operands } = rootCommand2.parseOptions(args2); if (operands.length === 0) { diff --git a/lua/sg/cody/commands.lua b/lua/sg/cody/commands.lua index bc425e6b..977c497d 100644 --- a/lua/sg/cody/commands.lua +++ b/lua/sg/cody/commands.lua @@ -2,14 +2,10 @@ ---@config { module = "sg.cody.commands" } local auth = require "sg.auth" +local chat = require "sg.cody.rpc.chat" local util = require "sg.utils" -local CodyBase = require "sg.components.layout.base" -local CodyFloat = require "sg.components.layout.float" -local CodySplit = require "sg.components.layout.split" -local CodyHover = require "sg.components.layout.hover" local Message = require "sg.cody.message" -local State = require "sg.cody.state" local protocol = require "sg.cody.protocol" local CodySpeaker = require("sg.types").CodySpeaker @@ -17,11 +13,13 @@ local commands = {} --- Ask Cody a question, without any selection ---@param message string[] -commands.ask = function(message) - local layout = CodySplit.init {} - +---@param opts? cody.ChatOpts +commands.ask = function(message, opts) local contents = vim.tbl_flatten(message) - layout:request_user_message(contents) + + chat.new(opts, function(_, id) + chat.submit_message(id, Message.init(CodySpeaker.human, contents):to_submit_message()) + end) end --- Ask Cody about the selected code @@ -29,8 +27,8 @@ end ---@param start_row number ---@param end_row number ---@param message string +---@param opts cody.ChatOpts commands.ask_range = function(bufnr, start_row, end_row, message, opts) - local chat = require "sg.cody.rpc.chat" local selection = vim.api.nvim_buf_get_lines(bufnr, start_row, end_row, false) local contents = vim.tbl_flatten { message, @@ -100,19 +98,7 @@ end --- Open a selection to get an existing Cody conversation commands.history = function() - local states = State.history() - - vim.ui.select(states, { - prompt = "Cody History: ", - format_item = function(state) - return string.format("%s (%d)", state.name, #state.messages) - end, - }, function(state) - vim.schedule(function() - local layout = CodyFloat.init { state = state } - layout:show() - end) - end) + error "NOT YET IMPLEMENTED. PLEASE REPORT IF YOU WERE USING THIS" end --- Focus the currently active history window. diff --git a/lua/sg/cody/protocol.lua b/lua/sg/cody/protocol.lua index c3a7027b..9a49bc69 100644 --- a/lua/sg/cody/protocol.lua +++ b/lua/sg/cody/protocol.lua @@ -1,6 +1,4 @@ -local config = require "sg.config" local debounce = require "sg.vendored.debounce" -local document = require "sg.document" local proto = {} @@ -57,7 +55,7 @@ proto.did_open = function(bufnr) return end - if not document.is_useful(bufnr) then + if not proto.document.is_useful(bufnr) then return end @@ -90,7 +88,7 @@ proto.did_close = function(bufnr) debounce_handles[bufnr] = nil end - if not document.is_useful(bufnr) then + if not proto.document.is_useful(bufnr) then return end @@ -103,11 +101,14 @@ proto.did_close = function(bufnr) end proto.did_focus = function(bufnr) - if not document.is_useful(bufnr) then + if not proto.document.is_useful(bufnr) then return end - require("sg.cody.rpc").notify("textDocument/didFocus", proto.get_text_document(bufnr, { content = false })) + require("sg.cody.rpc").notify( + "textDocument/didFocus", + proto.get_text_document(bufnr, { content = false }) + ) end proto.exit = function() @@ -121,4 +122,26 @@ proto.exit = function() rpc.exit() end +proto.document = { + --- Determines if buffer is useful + ---@param bufnr any + is_useful = function(bufnr) + if not vim.api.nvim_buf_is_valid(bufnr) then + return false + end + + local bo = vim.bo[bufnr] + if not bo.buflisted then + return false + end + + local name = vim.api.nvim_buf_get_name(bufnr) + if not name or name == "" then + return false + end + + return true + end, +} + return proto diff --git a/lua/sg/cody/rpc.lua b/lua/sg/cody/rpc.lua index 98ddf85c..a0adc571 100644 --- a/lua/sg/cody/rpc.lua +++ b/lua/sg/cody/rpc.lua @@ -61,6 +61,9 @@ local get_server_config = function(creds, remote_url) -- ["cody.debug.enable"] = true, -- ["cody.debug.verbose"] = true, }, + -- TODO: Which should I put here? I cannot get multi-line completions anymore + autocompleteAdvancedProvider = "fireworks", + autocompleteAdvancedModel = "starcoder-7b", }, capabilities = { chat = "streaming", diff --git a/lua/sg/cody/rpc/chat.lua b/lua/sg/cody/rpc/chat.lua index 0b719a1a..e5ed8e04 100644 --- a/lua/sg/cody/rpc/chat.lua +++ b/lua/sg/cody/rpc/chat.lua @@ -1,6 +1,8 @@ +local keymaps = require "sg.keymaps" local log = require "sg.log" local rpc = require "sg.cody.rpc" local shared = require "sg.components.shared" +local util = require "sg.utils" local CodySpeaker = require("sg.types").CodySpeaker local Mark = require "sg.mark" @@ -77,27 +79,88 @@ function Chat:reopen() end function Chat:_add_prompt_keymaps() - local set = function(mode, key, cb) - vim.keymap.set(mode, key, cb, { buffer = self.windows.prompt_bufnr }) + local bufnr = self.windows.prompt_bufnr + + keymaps.map(bufnr, "n", "", "Submit Message", function() + self:complete() + end) + + keymaps.map(bufnr, "i", "", "Submit Message", function() + self:complete() + end) + + keymaps.map(bufnr, { "i", "n" }, "", "Quit Chat", function() + self:close() + end) + + local with_history = function(key, mapped) + if not mapped then + mapped = key + end + + local desc = "Execute '" .. key .. "' in history" + keymaps.map(bufnr, { "n", "i" }, key, desc, function() + if vim.api.nvim_win_is_valid(self.windows.history_win) then + vim.api.nvim_win_call(self.windows.history_win, function() + util.execute_keystrokes(mapped) + end) + end + end) end - -- stylua: ignore start - set("i", "", function() self:complete() end) - set({"i", "n"}, "", function() self:close() end) - -- stylua: ignore end - - set("n", "m", function() - rpc.request("webview/receiveMessage", { - id = self.id, - message = { - command = "chatModel", - model = "openai/gpt-4-1106-preview", - }, - }, function(err, data) - self:set_current_model "openai/gpt-4-1106-preview" - self:render() + with_history "" + with_history "" + with_history "" + with_history "" + + keymaps.map(bufnr, "n", "M", "Select Model", function() + require("sg.cody.rpc.chat").models(self.id, function(err, data) + if err then + return + end + + ---@type cody.ChatModelProvider[] + local models = data.models or {} + vim.ui.select(models, { + prompt = "Select a model for conversation", + + --- Format an item + ---@param item cody.ChatModelProvider + format_item = function(item) + return item.model + end, + }, function(choice) + rpc.request("webview/receiveMessage", { + id = self.id, + message = { + command = "chatModel", + model = choice.model, + }, + }, function() + self:set_current_model(choice.model) + self:render() + end) + end) end) end) + + keymaps.map(bufnr, "n", "?", "Show Keymaps", function() + keymaps.help(bufnr) + end) + + -- TODO: Need to write a bit more stuff to manage this + -- keymaps.map(bufnr, "n", "m", function() + -- rpc.request("webview/receiveMessage", { + -- id = self.id, + -- message = { + -- command = "chatModel", + -- model = "openai/gpt-4-1106-preview", + -- }, + -- }, function(err, data) + -- self:set_current_model "openai/gpt-4-1106-preview" + -- self:render() + -- end) + -- end) end function Chat:set_current_model(model) @@ -110,13 +173,14 @@ function Chat:close() if self.windows.settings_win then pcall(vim.api.nvim_win_close, self.windows.settings_win, true) end + + pcall(vim.api.nvim_buf_delete, self.windows.prompt_bufnr) end --- Add a new message and return its id ---@param message sg.cody.Message function Chat:submit(message, callback) callback = callback or function() end - -- require("sg.cody.rpc.chat").submit_message(self.id, message:to_submit_message(), callback) rpc.request( "chat/submitMessage", @@ -198,6 +262,34 @@ function Chat:render() ) end + if self.transcript then + -- Had some weird errors here + pcall(function() + table.insert(lines, "") + table.insert(lines, "Context Files:") + table.insert(lines, "") + for _, context_file in ipairs(self.transcript:context_files()) do + local range = context_file.range + local start = range.start + + table.insert( + lines, + string.format( + "%s:%s:%s", + vim.fn.fnamemodify(context_file.uri.path, ":."), + start.line, + start.character + ) + ) + end + end) + end + + -- Add keymaps + table.insert(lines, "") + table.insert(lines, "Cody Keymaps:") + vim.list_extend(lines, keymaps.help_lines(self.windows.prompt_bufnr)) + vim.api.nvim_buf_set_lines(self.windows.settings_bufnr, 0, -1, false, lines) end @@ -338,6 +430,8 @@ function Chat._make_windows(opts) shared.make_buf_minimal(settings_bufnr) shared.make_win_minimal(settings_win) + + vim.wo[settings_win].wrap = false end local prompt_bufnr = vim.api.nvim_create_buf(false, true) @@ -345,7 +439,7 @@ function Chat._make_windows(opts) shared.make_buf_minimal(prompt_bufnr) shared.make_win_minimal(prompt_win) - vim.api.nvim_create_autocmd("BufLeave", { + vim.api.nvim_create_autocmd("BufDelete", { buffer = prompt_bufnr, once = true, callback = function() diff --git a/lua/sg/cody/transcript.lua b/lua/sg/cody/transcript.lua index c0898e0a..f3c255ae 100644 --- a/lua/sg/cody/transcript.lua +++ b/lua/sg/cody/transcript.lua @@ -80,4 +80,18 @@ function Transcript:is_message_in_progress() return self._transcript.isMessageIn function Transcript:last_message() return self.messages[#self.messages] end -- stylua: ignore stop +--- Get context files +---@return cody.ContextFile[] +function Transcript:context_files() + local context = {} + for _, message in ipairs(self._transcript.messages) do + local files = message.contextFiles or {} + for _, file in ipairs(files) do + table.insert(context, file) + end + end + + return context +end + return Transcript diff --git a/lua/sg/document.lua b/lua/sg/document.lua deleted file mode 100644 index 92b0e15d..00000000 --- a/lua/sg/document.lua +++ /dev/null @@ -1,23 +0,0 @@ -local document = {} - ---- Determines if buffer is useful ----@param bufnr any -document.is_useful = function(bufnr) - if not vim.api.nvim_buf_is_valid(bufnr) then - return false - end - - local bo = vim.bo[bufnr] - if not bo.buflisted then - return false - end - - local name = vim.api.nvim_buf_get_name(bufnr) - if not name or name == "" then - return false - end - - return true -end - -return document diff --git a/lua/sg/extensions/cmp.lua b/lua/sg/extensions/cmp.lua index de448b52..46a8221a 100644 --- a/lua/sg/extensions/cmp.lua +++ b/lua/sg/extensions/cmp.lua @@ -94,7 +94,7 @@ function source:complete(params, callback) -- Delay loading until first complete, this makes sure that -- we can handle auth and everything beforehand local commands = require "sg.cody.commands" - local document = require "sg.document" + local document = require("sg.cody.protocol").document _ = self _ = params @@ -139,8 +139,10 @@ function source:complete(params, callback) end local items = {} + local range = nil for _, item in ipairs(data.items) do local trimmed = vim.trim(item.insertText) + range = item.range ---@type lsp.CompletionItem local completion_item = { @@ -171,6 +173,21 @@ function source:complete(params, callback) table.insert(items, completion_item) end + local completion_item = { + detail = "hello\nworld\nthis\nis", + label = "hello\nworld\nthis\nis", + + cmp = { + kind_hl_group = "CmpItemKindCody", + kind_text = "Cody", + }, + + -- Attempt to adjust indentation + } + if range then + table.insert(items, completion_item) + end + callback { items = items, isIncomplete = false, diff --git a/lua/sg/keymaps.lua b/lua/sg/keymaps.lua index 8f66f38f..030f21f8 100644 --- a/lua/sg/keymaps.lua +++ b/lua/sg/keymaps.lua @@ -31,11 +31,10 @@ M.map = function(bufnr, mode, key, desc, cb) }) end -M.help = function(bufnr) +M.help_lines = function(bufnr) local maps = store[bufnr] if not maps then - print "no keymaps for this bufnr" - return + return {} end local sorted_maps = {} @@ -47,14 +46,24 @@ M.help = function(bufnr) table.insert(sorted_maps[map.mode], map) end - local lines = {} + local lines = { "mode | key | description" } for _, map_list in pairs(sorted_maps) do for _, map in ipairs(map_list) do - local line = string.format(" mode: %s, key: %6s | %s", map.mode, map.key, map.desc) + local line = string.format("%s | %6s | %s", map.mode, map.key, map.desc) table.insert(lines, line) end end + return lines +end + +M.help = function(bufnr) + local maps = store[bufnr] + if not maps then + return + end + + local lines = M.help_lines(bufnr) local width = math.floor(vim.o.columns * 0.8) local height = math.floor(vim.o.lines * 0.8) diff --git a/lua/sg/log.lua b/lua/sg/log.lua index 6a422fe5..39d3cf58 100644 --- a/lua/sg/log.lua +++ b/lua/sg/log.lua @@ -11,7 +11,7 @@ end local logger = require("plenary.log").new { plugin = "sg", - level = "debug", + level = "warn", use_console = false, info_level = 3, } diff --git a/lua/sg/types.lua b/lua/sg/types.lua index 231342c0..2f38e398 100644 --- a/lua/sg/types.lua +++ b/lua/sg/types.lua @@ -52,6 +52,8 @@ local M = {} ---@field codebase string? ---@field customHeaders table ---@field eventProperties CodyEventProperties +---@field autocompleteAdvancedProvider? string +---@field autocompleteAdvancedModel? string ---@class CodyEventProperties ---@field anonymousUserID string @@ -75,7 +77,7 @@ local M = {} ---@class CodyTextDocument ---@field filePath string ---@field content string? ----@field selection CodyRange? +---@field selection cody.Range? ---@class CodyPosition ---@field line number @@ -83,16 +85,25 @@ local M = {} ---@field character number --- 0-indexed ----@class CodyRange +---@class cody.Range ---@field start CodyPosition ---@field end CodyPosition --- TODO: This is out of date +---@class cody.URI +---@field authority string +---@field fragment string +---@field path string +---@field query string +---@field scheme string + ---@class cody.ContextFile ----@field fileName string ----@field repoName string? ----@field revision string? ----@field source string? +---@field type string +---@field uri cody.URI +---@field range cody.Range +---@field repoName? string +---@field revision? string +---@field source? string +---@field content? string ---@class cody.ChatButton --[[ TODO @@ -184,7 +195,7 @@ export interface PreciseContext { ---@class CodyAutocompleteItem ---@field insertText string ----@field range CodyRange +---@field range cody.Range ---@class CodyAutocompleteResult ---@field items CodyAutocompleteItem[] diff --git a/scratch/chatter.lua b/scratch/chatter.lua deleted file mode 100644 index 3ff7761e..00000000 --- a/scratch/chatter.lua +++ /dev/null @@ -1,3 +0,0 @@ -R("sg.cody.rpc.chat").new({}, function(...) - print(vim.inspect { ... }) -end)