diff --git a/docs/configuration/README.md b/docs/configuration/README.md index cf14999..8831f1c 100644 --- a/docs/configuration/README.md +++ b/docs/configuration/README.md @@ -146,6 +146,10 @@ You can click on a paper-like icon in the top right corner of VS Code or right-c vscode will open a temporary text to show you the converted code. +#### Configuration - `aide.aide.autoRememberConvertLanguagePairs` + +This setting allows you to specify whether to automatically remember the language pairs used for code conversion. Default is `true`. + #### Configuration - `aide.convertLanguagePairs` This setting allows you to specify the language mapping for code conversion. The mapping should be in the form of `sourceLanguage: targetLanguage`. diff --git a/docs/configuration/README_CN.md b/docs/configuration/README_CN.md index c6cfecb..5d10b87 100644 --- a/docs/configuration/README_CN.md +++ b/docs/configuration/README_CN.md @@ -146,6 +146,10 @@ VSCode 将打开一个临时文本以显示转换后的代码。 +#### 配置 - `aide.aide.autoRememberConvertLanguagePairs` + +此设置允许你指定是否自动记住代码转换的语言映射。默认为 `true`。 + #### 配置 - `aide.convertLanguagePairs` 此设置允许你指定代码转换的语言映射。映射应采用 `sourceLanguage: targetLanguage` 的形式。 diff --git a/package.json b/package.json index e1a3022..802bd3b 100644 --- a/package.json +++ b/package.json @@ -174,6 +174,11 @@ "scope": "resource", "description": "%config.ignorePatterns.description%" }, + "aide.autoRememberConvertLanguagePairs": { + "type": "boolean", + "default": true, + "description": "%config.autoRememberConvertLanguagePairs.description%" + }, "aide.convertLanguagePairs": { "type": "object", "default": {}, @@ -224,16 +229,16 @@ "@commitlint/cli": "^19.3.0", "@commitlint/config-conventional": "^19.2.2", "@commitlint/cz-commitlint": "^19.2.0", - "@ianvs/prettier-plugin-sort-imports": "^4.3.0", - "@langchain/core": "0.2.15", - "@langchain/openai": "^0.2.1", + "@ianvs/prettier-plugin-sort-imports": "^4.3.1", + "@langchain/core": "0.2.16", + "@langchain/openai": "^0.2.2", "@types/fs-extra": "^11.0.4", "@types/global-agent": "^2.1.3", "@types/node": "^20.14.10", "@types/shell-quote": "^1.7.5", "@types/vscode": "1.82.0", - "@typescript-eslint/eslint-plugin": "^7.16.0", - "@typescript-eslint/parser": "^7.16.0", + "@typescript-eslint/eslint-plugin": "^7.16.1", + "@typescript-eslint/parser": "^7.16.1", "@vscode/vsce": "^2.30.0", "commitizen": "^4.3.0", "dotenv": "^16.4.5", @@ -256,24 +261,24 @@ "husky": "^9.0.11", "ignore": "^5.3.1", "inquirer": "^9.3.4", - "knip": "^5.25.2", - "langchain": "^0.2.9", + "knip": "^5.26.0", + "langchain": "^0.2.10", "lint-staged": "^15.2.7", "minimatch": "^9.0.5", "pnpm": "^9.5.0", - "prettier": "^3.3.2", + "prettier": "^3.3.3", "rimraf": "^6.0.1", "shell-quote": "^1.8.1", "tsup": "^8.1.0", "typescript": "5.4.5", "undici": "^6.19.2", "vite": "^5.3.3", - "vitest": "^2.0.2", + "vitest": "^2.0.3", "zod": "^3.23.8" }, "pnpm": { "overrides": { - "@langchain/core": "0.2.15" + "@langchain/core": "0.2.16" } }, "commitlint": { diff --git a/package.nls.en.json b/package.nls.en.json index 0b6c5ac..fe3d77c 100644 --- a/package.nls.en.json +++ b/package.nls.en.json @@ -10,6 +10,7 @@ "config.aiCommandCopyBeforeRun.description": "Copy AI command to clipboard before running", "config.ignorePatterns.description": "Ignored file name patterns, supports glob syntax", "config.respectGitIgnore.description": "Respect .gitignore file", + "config.autoRememberConvertLanguagePairs.description": "Automatically remember convert language pairs", "config.convertLanguagePairs.description": "Default convert language pairs", "config.codeViewerHelperPrompt.description": "Code viewer helper prompt template", "config.openaiKey.description": "OpenAI Key", @@ -22,6 +23,8 @@ "error.failedToUpdateConfig": "Failed to update configuration", "error.invalidJson": "Invalid JSON format", "error.invalidNumber": "Invalid number", + "error.invalidBaseUrl": "Invalid Base URL", + "error.invalidAzureOpenaiBaseUrl": "Invalid Azure OpenAI Base URL", "error.configKeyRequired": "{0} configuration key is required", "error.vscodeLLMModelNotFound": "VSCode LLM model not found, please check configuration", "error.noSelection": "No file or folder selected", @@ -32,6 +35,10 @@ "info.customLanguage": "Custom language", "info.noAiSuggestionsVariableName": "AI thinks your variable name is already good", "info.processing": "Aide is processing...", + "info.continueMessage": "Continue? I'm not sure if it's done yet, if there's still content not generated, you can click continue.", + "info.iconContinueMessage": "(You can also click the original generate icon to continue)", + "info.continue": "Continue", + "info.cancel": "Cancel", "input.array.promptEnding": "Enter comma separated values", "input.json.promptEnding": "Enter JSON formatted value", "input.aiCommand.prompt": "Enter question for AI command", diff --git a/package.nls.json b/package.nls.json index 0b6c5ac..fe3d77c 100644 --- a/package.nls.json +++ b/package.nls.json @@ -10,6 +10,7 @@ "config.aiCommandCopyBeforeRun.description": "Copy AI command to clipboard before running", "config.ignorePatterns.description": "Ignored file name patterns, supports glob syntax", "config.respectGitIgnore.description": "Respect .gitignore file", + "config.autoRememberConvertLanguagePairs.description": "Automatically remember convert language pairs", "config.convertLanguagePairs.description": "Default convert language pairs", "config.codeViewerHelperPrompt.description": "Code viewer helper prompt template", "config.openaiKey.description": "OpenAI Key", @@ -22,6 +23,8 @@ "error.failedToUpdateConfig": "Failed to update configuration", "error.invalidJson": "Invalid JSON format", "error.invalidNumber": "Invalid number", + "error.invalidBaseUrl": "Invalid Base URL", + "error.invalidAzureOpenaiBaseUrl": "Invalid Azure OpenAI Base URL", "error.configKeyRequired": "{0} configuration key is required", "error.vscodeLLMModelNotFound": "VSCode LLM model not found, please check configuration", "error.noSelection": "No file or folder selected", @@ -32,6 +35,10 @@ "info.customLanguage": "Custom language", "info.noAiSuggestionsVariableName": "AI thinks your variable name is already good", "info.processing": "Aide is processing...", + "info.continueMessage": "Continue? I'm not sure if it's done yet, if there's still content not generated, you can click continue.", + "info.iconContinueMessage": "(You can also click the original generate icon to continue)", + "info.continue": "Continue", + "info.cancel": "Cancel", "input.array.promptEnding": "Enter comma separated values", "input.json.promptEnding": "Enter JSON formatted value", "input.aiCommand.prompt": "Enter question for AI command", diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index d81ad0e..f091a44 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -10,6 +10,7 @@ "config.aiCommandCopyBeforeRun.description": "运行前将 AI 命令复制到剪贴板", "config.ignorePatterns.description": "忽略的文件名模式, 支持 glob 语法", "config.respectGitIgnore.description": "是否尊重 .gitignore 文件", + "config.autoRememberConvertLanguagePairs.description": "是否自动记住转换语言对照表", "config.convertLanguagePairs.description": "默认转换语言对照表", "config.codeViewerHelperPrompt.description": "代码查看器助手 prompt 模板", "config.openaiKey.description": "OpenAI Key", @@ -22,6 +23,8 @@ "error.failedToUpdateConfig": "更新配置失败", "error.invalidJson": "无效的 JSON 格式", "error.invalidNumber": "无效的数字", + "error.invalidBaseUrl": "无效的 Base URL", + "error.invalidAzureOpenaiBaseUrl": "无效的 Azure OpenAI Base URL", "error.configKeyRequired": "{0} 配置键是必需的", "error.vscodeLLMModelNotFound": "未找到 VSCode LLM 模型,请检查配置", "error.noSelection": "未选择任何文件或文件夹", @@ -32,6 +35,10 @@ "info.customLanguage": "自定义语言", "info.noAiSuggestionsVariableName": " AI 觉得你这个变量名字已经很好了", "info.processing": "Aide 正在处理中...", + "info.continueMessage": "继续吗?我不确定是否已经完成了,如果还有内容没生成,你可以点击继续。", + "info.iconContinueMessage": "(你也可以点击原来的生成 icon 以继续)", + "info.continue": "继续", + "info.cancel": "取消", "input.array.promptEnding": "输入逗号分隔的值", "input.json.promptEnding": "输入 JSON 格式的值", "input.aiCommand.prompt": "输入 AI 命令的问题", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 810bf5a..b866025 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,7 +5,7 @@ settings: excludeLinksFromLockfile: false overrides: - '@langchain/core': 0.2.15 + '@langchain/core': 0.2.16 importers: @@ -24,14 +24,14 @@ importers: specifier: ^19.2.0 version: 19.2.0(@types/node@20.14.10)(commitizen@4.3.0(@types/node@20.14.10)(typescript@5.4.5))(inquirer@9.3.4)(typescript@5.4.5) '@ianvs/prettier-plugin-sort-imports': - specifier: ^4.3.0 - version: 4.3.0(@vue/compiler-sfc@3.4.31)(prettier@3.3.2) + specifier: ^4.3.1 + version: 4.3.1(@vue/compiler-sfc@3.4.31)(prettier@3.3.3) '@langchain/core': - specifier: 0.2.15 - version: 0.2.15(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3) + specifier: 0.2.16 + version: 0.2.16(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3) '@langchain/openai': - specifier: ^0.2.1 - version: 0.2.1(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1)) + specifier: ^0.2.2 + version: 0.2.2(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1)) '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 @@ -48,11 +48,11 @@ importers: specifier: 1.82.0 version: 1.82.0 '@typescript-eslint/eslint-plugin': - specifier: ^7.16.0 - version: 7.16.0(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + specifier: ^7.16.1 + version: 7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': - specifier: ^7.16.0 - version: 7.16.0(eslint@8.57.0)(typescript@5.4.5) + specifier: ^7.16.1 + version: 7.16.1(eslint@8.57.0)(typescript@5.4.5) '@vscode/vsce': specifier: ^2.30.0 version: 2.30.0 @@ -67,34 +67,34 @@ importers: version: 8.57.0 eslint-config-airbnb-base: specifier: ^15.0.0 - version: 15.0.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0) + version: 15.0.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0) eslint-config-airbnb-typescript: specifier: ^18.0.0 - version: 18.0.0(@typescript-eslint/eslint-plugin@7.16.0(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0) + version: 18.0.0(@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) eslint-import-resolver-alias: specifier: ^1.1.2 - version: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)) + version: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)) eslint-import-resolver-typescript: specifier: ^3.6.1 - version: 3.6.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) + version: 3.6.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-json: specifier: ^4.0.0 version: 4.0.0 eslint-plugin-prettier: specifier: ^5.1.3 - version: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.2) + version: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3) eslint-plugin-simple-import-sort: specifier: ^12.1.1 version: 12.1.1(eslint@8.57.0) eslint-plugin-unused-imports: specifier: ^3.2.0 - version: 3.2.0(@typescript-eslint/eslint-plugin@7.16.0(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) + version: 3.2.0(@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) esno: specifier: ^4.7.0 version: 4.7.0 @@ -120,11 +120,11 @@ importers: specifier: ^9.3.4 version: 9.3.4 knip: - specifier: ^5.25.2 - version: 5.25.2(@types/node@20.14.10)(typescript@5.4.5) + specifier: ^5.26.0 + version: 5.26.0(@types/node@20.14.10)(typescript@5.4.5) langchain: - specifier: ^0.2.9 - version: 0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1) + specifier: ^0.2.10 + version: 0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1) lint-staged: specifier: ^15.2.7 version: 15.2.7 @@ -135,8 +135,8 @@ importers: specifier: ^9.5.0 version: 9.5.0 prettier: - specifier: ^3.3.2 - version: 3.3.2 + specifier: ^3.3.3 + version: 3.3.3 rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -156,8 +156,8 @@ importers: specifier: ^5.3.3 version: 5.3.3(@types/node@20.14.10) vitest: - specifier: ^2.0.2 - version: 2.0.2(@types/node@20.14.10) + specifier: ^2.0.3 + version: 2.0.3(@types/node@20.14.10) zod: specifier: ^3.23.8 version: 3.23.8 @@ -229,10 +229,6 @@ packages: resolution: {integrity: sha512-JxsSE0464a8IA/+q5EHKmchwNyUFJHtCH00tSXsLaOddwLjG6yVvTH6lGgPcWMhO7YWUXj/XVgVgeE9kZtsPUQ==} engines: {node: '>=16'} - '@babel/code-frame@7.22.13': - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} @@ -283,18 +279,10 @@ packages: resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.1': - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.7': resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.5': - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} @@ -307,19 +295,10 @@ packages: resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.22.20': - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} - engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.5': - resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.24.7': resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} engines: {node: '>=6.0.0'} @@ -337,10 +316,6 @@ packages: resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.5': - resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} - engines: {node: '>=6.9.0'} - '@babel/types@7.24.7': resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} engines: {node: '>=6.9.0'} @@ -728,8 +703,8 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@ianvs/prettier-plugin-sort-imports@4.3.0': - resolution: {integrity: sha512-OOMtUcO4J3LoL63dOKAe7bn+lSRRPeit2DqNHpx+wvBp3Grejo2PMaK4Mp1mwy8pnat64ccSgk/lBZbsAdLErw==} + '@ianvs/prettier-plugin-sort-imports@4.3.1': + resolution: {integrity: sha512-ZHwbyjkANZOjaBm3ZosADD2OUYGFzQGxfy67HmGZU94mHqe7g1LCMA7YYKB1Cq+UTPCBqlAYapY0KXAjKEw8Sg==} peerDependencies: '@vue/compiler-sfc': 2.7.x || 3.x prettier: 2 || 3 @@ -768,18 +743,15 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - '@jridgewell/trace-mapping@0.3.20': - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} - '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@langchain/core@0.2.15': - resolution: {integrity: sha512-L096itIBQ5XNsy5BCCPqIQEk/x4rzI+U4BhYT+fDBYtljESshIi/WzXdmiGfY/6MpVjB76jNuaRgMDmo1m9NeQ==} + '@langchain/core@0.2.16': + resolution: {integrity: sha512-mPmQi0ecJ81QwhvUQX4cwGVAqsM30ly3ygIlWoeUwDOXv9UW/IB2LAq8KKoVYIHTyEsIWJiyMP9Sv3e0xwjV8g==} engines: {node: '>=18'} - '@langchain/openai@0.2.1': - resolution: {integrity: sha512-Ti3C6ZIUPaueIPAfMljMnLu3GSGNq5KmrlHeWkIbrLShOBlzj4xj7mRfR73oWgAC0qivfxdkfbB0e+WCY+oRJw==} + '@langchain/openai@0.2.2': + resolution: {integrity: sha512-1V7GZbRf8srdgfHV8C3W63BlYMf6/hsjTKh5ozZQaQDQ6bWMJwDjauvISvSVA+A0tqLAzf017C4+QVvy1kxjsw==} engines: {node: '>=18'} '@langchain/textsplitters@0.0.3': @@ -943,8 +915,8 @@ packages: '@types/vscode@1.82.0': resolution: {integrity: sha512-VSHV+VnpF8DEm8LNrn8OJ8VuUNcBzN3tMvKrNpbhhfuVjFm82+6v44AbDhLvVFgCzn6vs94EJNTp7w8S6+Q1Rw==} - '@typescript-eslint/eslint-plugin@7.16.0': - resolution: {integrity: sha512-py1miT6iQpJcs1BiJjm54AMzeuMPBSPuKPlnT8HlfudbcS5rYeX5jajpLf3mrdRh9dA/Ec2FVUY0ifeVNDIhZw==} + '@typescript-eslint/eslint-plugin@7.16.1': + resolution: {integrity: sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -954,8 +926,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.16.0': - resolution: {integrity: sha512-ar9E+k7CU8rWi2e5ErzQiC93KKEFAXA2Kky0scAlPcxYblLt8+XZuHUZwlyfXILyQa95P6lQg+eZgh/dDs3+Vw==} + '@typescript-eslint/parser@7.16.1': + resolution: {integrity: sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -964,12 +936,12 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@7.16.0': - resolution: {integrity: sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==} + '@typescript-eslint/scope-manager@7.16.1': + resolution: {integrity: sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/type-utils@7.16.0': - resolution: {integrity: sha512-j0fuUswUjDHfqV/UdW6mLtOQQseORqfdmoBNDFOqs9rvNVR2e+cmu6zJu/Ku4SDuqiJko6YnhwcL8x45r8Oqxg==} + '@typescript-eslint/type-utils@7.16.1': + resolution: {integrity: sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -978,12 +950,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@7.16.0': - resolution: {integrity: sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==} + '@typescript-eslint/types@7.16.1': + resolution: {integrity: sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/typescript-estree@7.16.0': - resolution: {integrity: sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==} + '@typescript-eslint/typescript-estree@7.16.1': + resolution: {integrity: sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -991,36 +963,36 @@ packages: typescript: optional: true - '@typescript-eslint/utils@7.16.0': - resolution: {integrity: sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==} + '@typescript-eslint/utils@7.16.1': + resolution: {integrity: sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/visitor-keys@7.16.0': - resolution: {integrity: sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==} + '@typescript-eslint/visitor-keys@7.16.1': + resolution: {integrity: sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==} engines: {node: ^18.18.0 || >=20.0.0} '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@vitest/expect@2.0.2': - resolution: {integrity: sha512-nKAvxBYqcDugYZ4nJvnm5OR8eDJdgWjk4XM9owQKUjzW70q0icGV2HVnQOyYsp906xJaBDUXw0+9EHw2T8e0mQ==} + '@vitest/expect@2.0.3': + resolution: {integrity: sha512-X6AepoOYePM0lDNUPsGXTxgXZAl3EXd0GYe/MZyVE4HzkUqyUVC6S3PrY5mClDJ6/7/7vALLMV3+xD/Ko60Hqg==} - '@vitest/pretty-format@2.0.2': - resolution: {integrity: sha512-SBCyOXfGVvddRd9r2PwoVR0fonQjh9BMIcBMlSzbcNwFfGr6ZhOhvBzurjvi2F4ryut2HcqiFhNeDVGwru8tLg==} + '@vitest/pretty-format@2.0.3': + resolution: {integrity: sha512-URM4GLsB2xD37nnTyvf6kfObFafxmycCL8un3OC9gaCs5cti2u+5rJdIflZ2fUJUen4NbvF6jCufwViAFLvz1g==} - '@vitest/runner@2.0.2': - resolution: {integrity: sha512-OCh437Vi8Wdbif1e0OvQcbfM3sW4s2lpmOjAE7qfLrpzJX2M7J1IQlNvEcb/fu6kaIB9n9n35wS0G2Q3en5kHg==} + '@vitest/runner@2.0.3': + resolution: {integrity: sha512-EmSP4mcjYhAcuBWwqgpjR3FYVeiA4ROzRunqKltWjBfLNs1tnMLtF+qtgd5ClTwkDP6/DGlKJTNa6WxNK0bNYQ==} - '@vitest/snapshot@2.0.2': - resolution: {integrity: sha512-Yc2ewhhZhx+0f9cSUdfzPRcsM6PhIb+S43wxE7OG0kTxqgqzo8tHkXFuFlndXeDMp09G3sY/X5OAo/RfYydf1g==} + '@vitest/snapshot@2.0.3': + resolution: {integrity: sha512-6OyA6v65Oe3tTzoSuRPcU6kh9m+mPL1vQ2jDlPdn9IQoUxl8rXhBnfICNOC+vwxWY684Vt5UPgtcA2aPFBb6wg==} - '@vitest/spy@2.0.2': - resolution: {integrity: sha512-MgwJ4AZtCgqyp2d7WcQVE8aNG5vQ9zu9qMPYQHjsld/QVsrvg78beNrXdO4HYkP0lDahCO3P4F27aagIag+SGQ==} + '@vitest/spy@2.0.3': + resolution: {integrity: sha512-sfqyAw/ypOXlaj4S+w8689qKM1OyPOqnonqOc9T91DsoHbfN5mU7FdifWWv3MtQFf0lEUstEwR9L/q/M390C+A==} - '@vitest/utils@2.0.2': - resolution: {integrity: sha512-pxCY1v7kmOCWYWjzc0zfjGTA3Wmn8PKnlPvSrsA643P1NHl1fOyXj2Q9SaNlrlFE+ivCsxM80Ov3AR82RmHCWQ==} + '@vitest/utils@2.0.3': + resolution: {integrity: sha512-c/UdELMuHitQbbc/EVctlBaxoYAwQPQdSNwv7z/vHyBKy2edYZaFgptE27BRueZB7eW8po+cllotMNTDpL3HWg==} '@vscode/vsce-sign-alpine-arm64@2.0.2': resolution: {integrity: sha512-E80YvqhtZCLUv3YAf9+tIbbqoinWLCO/B3j03yQPbjT3ZIHCliKZlsy1peNc4XNZ5uIb87Jn0HWx/ZbPXviuAQ==} @@ -2522,16 +2494,16 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - knip@5.25.2: - resolution: {integrity: sha512-ivo01AK3f6Afj00/8j+3Nfdv2md+a6/ASfuurY2Nun1ni2oYS1Y1t6f05q4CldigaMjOMC7oWbgANRIG+McxGQ==} + knip@5.26.0: + resolution: {integrity: sha512-vOp+Wk86aqlPwElrUpxXyg6Q8w+j0j6wuzyu5p6k/mBWUI8iP91PCAz1Jzz9PGq5JYdptV7rFBYB9vHr7AFgqg==} engines: {node: '>=18.6.0'} hasBin: true peerDependencies: '@types/node': '>=18' typescript: '>=5.0.4' - langchain@0.2.9: - resolution: {integrity: sha512-iZ0l7BDVfoifqZlDl1gy3JP5mIdhYjWiToPlDnlmfHD748cw3okvF0gZo0ruT4nbftnQcaM7JzPUiNC43UPfgg==} + langchain@0.2.10: + resolution: {integrity: sha512-i0fC+RlX/6w6HKPWL3N5zrhrkijvpe2Xu4t/qbWzq4uFf8WBfPwmNFom3RtO2RatuPnHLm8mViU6nw8YBDiVwA==} engines: {node: '>=18'} peerDependencies: '@aws-sdk/client-s3': ^3.310.0 @@ -2692,7 +2664,7 @@ packages: langsmith@0.1.36: resolution: {integrity: sha512-D5hhkFl31uxFdffx0lA6pin0lt8Pv2dpHFZYpSgEzvQ26PQ/Y/tnniQ+aCNokIXuLhMa7uqLtb6tfwjfiZXgdg==} peerDependencies: - '@langchain/core': 0.2.15 + '@langchain/core': 0.2.16 langchain: '*' openai: '*' peerDependenciesMeta: @@ -3249,8 +3221,8 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier@3.3.2: - resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} engines: {node: '>=14'} hasBin: true @@ -3687,10 +3659,6 @@ packages: tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} - engines: {node: '>=6'} - tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -3820,8 +3788,8 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true - vite-node@2.0.2: - resolution: {integrity: sha512-w4vkSz1Wo+NIQg8pjlEn0jQbcM/0D+xVaYjhw3cvarTanLLBh54oNiRbsT8PNK5GfuST0IlVXjsNRoNlqvY/fw==} + vite-node@2.0.3: + resolution: {integrity: sha512-14jzwMx7XTcMB+9BhGQyoEAmSl0eOr3nrnn+Z12WNERtOvLN+d2scbRUvyni05rT3997Bg+rZb47NyP4IQPKXg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -3853,15 +3821,15 @@ packages: terser: optional: true - vitest@2.0.2: - resolution: {integrity: sha512-WlpZ9neRIjNBIOQwBYfBSr0+of5ZCbxT2TVGKW4Lv0c8+srCFIiRdsP7U009t8mMn821HQ4XKgkx5dVWpyoyLw==} + vitest@2.0.3: + resolution: {integrity: sha512-o3HRvU93q6qZK4rI2JrhKyZMMuxg/JRt30E6qeQs6ueaiz5hr1cPj+Sk2kATgQzMMqsa2DiNI0TIK++1ULx8Jw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.0.2 - '@vitest/ui': 2.0.2 + '@vitest/browser': 2.0.3 + '@vitest/ui': 2.0.3 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -4139,11 +4107,6 @@ snapshots: jsonwebtoken: 9.0.2 uuid: 8.3.2 - '@babel/code-frame@7.22.13': - dependencies: - '@babel/highlight': 7.22.20 - chalk: 2.4.2 - '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 @@ -4164,7 +4127,7 @@ snapshots: '@babel/traverse': 7.24.7 '@babel/types': 7.24.7 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.5 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -4228,12 +4191,8 @@ snapshots: dependencies: '@babel/types': 7.24.7 - '@babel/helper-string-parser@7.24.1': {} - '@babel/helper-string-parser@7.24.7': {} - '@babel/helper-validator-identifier@7.24.5': {} - '@babel/helper-validator-identifier@7.24.7': {} '@babel/helper-validator-option@7.24.7': {} @@ -4243,12 +4202,6 @@ snapshots: '@babel/template': 7.24.7 '@babel/types': 7.24.7 - '@babel/highlight@7.22.20': - dependencies: - '@babel/helper-validator-identifier': 7.24.5 - chalk: 2.4.2 - js-tokens: 4.0.0 - '@babel/highlight@7.24.7': dependencies: '@babel/helper-validator-identifier': 7.24.7 @@ -4256,10 +4209,6 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.1 - '@babel/parser@7.24.5': - dependencies: - '@babel/types': 7.24.5 - '@babel/parser@7.24.7': dependencies: '@babel/types': 7.24.7 @@ -4284,17 +4233,11 @@ snapshots: '@babel/helper-split-export-declaration': 7.24.7 '@babel/parser': 7.24.7 '@babel/types': 7.24.7 - debug: 4.3.4 + debug: 4.3.5 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.24.5': - dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.24.5 - to-fast-properties: 2.0.0 - '@babel/types@7.24.7': dependencies: '@babel/helper-string-parser': 7.24.7 @@ -4599,14 +4542,14 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@ianvs/prettier-plugin-sort-imports@4.3.0(@vue/compiler-sfc@3.4.31)(prettier@3.3.2)': + '@ianvs/prettier-plugin-sort-imports@4.3.1(@vue/compiler-sfc@3.4.31)(prettier@3.3.3)': dependencies: '@babel/core': 7.24.7 '@babel/generator': 7.24.7 - '@babel/parser': 7.24.5 + '@babel/parser': 7.24.7 '@babel/traverse': 7.24.7 - '@babel/types': 7.24.5 - prettier: 3.3.2 + '@babel/types': 7.24.7 + prettier: 3.3.3 semver: 7.6.2 optionalDependencies: '@vue/compiler-sfc': 3.4.31 @@ -4628,7 +4571,7 @@ snapshots: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/gen-mapping@0.3.5': dependencies: @@ -4644,23 +4587,18 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} - '@jridgewell/trace-mapping@0.3.20': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@langchain/core@0.2.15(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3)': + '@langchain/core@0.2.16(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3)': dependencies: ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.12 - langsmith: 0.1.36(@langchain/core@0.2.15(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3))(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3) + langsmith: 0.1.36(@langchain/core@0.2.16(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3))(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3) ml-distance: 4.0.1 mustache: 4.2.0 p-queue: 6.6.2 @@ -4672,9 +4610,9 @@ snapshots: - langchain - openai - '@langchain/openai@0.2.1(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))': + '@langchain/openai@0.2.2(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))': dependencies: - '@langchain/core': 0.2.15(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3) + '@langchain/core': 0.2.16(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3) js-tiktoken: 1.0.12 openai: 4.52.3 zod: 3.23.8 @@ -4683,9 +4621,9 @@ snapshots: - encoding - langchain - '@langchain/textsplitters@0.0.3(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3)': + '@langchain/textsplitters@0.0.3(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3)': dependencies: - '@langchain/core': 0.2.15(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3) + '@langchain/core': 0.2.16(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3) js-tiktoken: 1.0.12 transitivePeerDependencies: - langchain @@ -4815,14 +4753,14 @@ snapshots: '@types/vscode@1.82.0': {} - '@typescript-eslint/eslint-plugin@7.16.0(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.16.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.16.0 - '@typescript-eslint/type-utils': 7.16.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.16.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.16.0 + '@typescript-eslint/parser': 7.16.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.16.1 + '@typescript-eslint/type-utils': 7.16.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.16.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.16.1 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -4833,29 +4771,29 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 7.16.0 - '@typescript-eslint/types': 7.16.0 - '@typescript-eslint/typescript-estree': 7.16.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.16.0 - debug: 4.3.4 + '@typescript-eslint/scope-manager': 7.16.1 + '@typescript-eslint/types': 7.16.1 + '@typescript-eslint/typescript-estree': 7.16.1(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.16.1 + debug: 4.3.5 eslint: 8.57.0 optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.16.0': + '@typescript-eslint/scope-manager@7.16.1': dependencies: - '@typescript-eslint/types': 7.16.0 - '@typescript-eslint/visitor-keys': 7.16.0 + '@typescript-eslint/types': 7.16.1 + '@typescript-eslint/visitor-keys': 7.16.1 - '@typescript-eslint/type-utils@7.16.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/type-utils@7.16.1(eslint@8.57.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/typescript-estree': 7.16.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.16.0(eslint@8.57.0)(typescript@5.4.5) - debug: 4.3.4 + '@typescript-eslint/typescript-estree': 7.16.1(typescript@5.4.5) + '@typescript-eslint/utils': 7.16.1(eslint@8.57.0)(typescript@5.4.5) + debug: 4.3.5 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: @@ -4863,13 +4801,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@7.16.0': {} + '@typescript-eslint/types@7.16.1': {} - '@typescript-eslint/typescript-estree@7.16.0(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@7.16.1(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 7.16.0 - '@typescript-eslint/visitor-keys': 7.16.0 - debug: 4.3.4 + '@typescript-eslint/types': 7.16.1 + '@typescript-eslint/visitor-keys': 7.16.1 + debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 @@ -4880,53 +4818,53 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.16.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/utils@7.16.1(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.16.0 - '@typescript-eslint/types': 7.16.0 - '@typescript-eslint/typescript-estree': 7.16.0(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.16.1 + '@typescript-eslint/types': 7.16.1 + '@typescript-eslint/typescript-estree': 7.16.1(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@7.16.0': + '@typescript-eslint/visitor-keys@7.16.1': dependencies: - '@typescript-eslint/types': 7.16.0 + '@typescript-eslint/types': 7.16.1 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} - '@vitest/expect@2.0.2': + '@vitest/expect@2.0.3': dependencies: - '@vitest/spy': 2.0.2 - '@vitest/utils': 2.0.2 + '@vitest/spy': 2.0.3 + '@vitest/utils': 2.0.3 chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/pretty-format@2.0.2': + '@vitest/pretty-format@2.0.3': dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@2.0.2': + '@vitest/runner@2.0.3': dependencies: - '@vitest/utils': 2.0.2 + '@vitest/utils': 2.0.3 pathe: 1.1.2 - '@vitest/snapshot@2.0.2': + '@vitest/snapshot@2.0.3': dependencies: - '@vitest/pretty-format': 2.0.2 + '@vitest/pretty-format': 2.0.3 magic-string: 0.30.10 pathe: 1.1.2 - '@vitest/spy@2.0.2': + '@vitest/spy@2.0.3': dependencies: tinyspy: 3.0.0 - '@vitest/utils@2.0.2': + '@vitest/utils@2.0.3': dependencies: - '@vitest/pretty-format': 2.0.2 + '@vitest/pretty-format': 2.0.3 estree-walker: 3.0.3 loupe: 3.1.1 tinyrainbow: 1.2.0 @@ -5774,21 +5712,21 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0): dependencies: confusing-browser-globals: 1.0.11 eslint: 8.57.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) object.assign: 4.1.5 object.entries: 1.1.8 semver: 6.3.1 - eslint-config-airbnb-typescript@18.0.0(@typescript-eslint/eslint-plugin@7.16.0(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-config-airbnb-typescript@18.0.0(@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0): dependencies: - '@typescript-eslint/eslint-plugin': 7.16.0(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 7.16.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.16.1(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0) transitivePeerDependencies: - eslint-plugin-import @@ -5796,9 +5734,9 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)): dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-import-resolver-node@0.3.9: dependencies: @@ -5808,13 +5746,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0): dependencies: debug: 4.3.4 enhanced-resolve: 5.17.0 eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.5 is-core-module: 2.13.1 @@ -5825,18 +5763,18 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.16.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.16.1(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -5846,7 +5784,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -5857,7 +5795,7 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.16.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.16.1(eslint@8.57.0)(typescript@5.4.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -5868,10 +5806,10 @@ snapshots: lodash: 4.17.21 vscode-json-languageservice: 4.2.1 - eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.2): + eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3): dependencies: eslint: 8.57.0 - prettier: 3.3.2 + prettier: 3.3.3 prettier-linter-helpers: 1.0.0 synckit: 0.8.8 optionalDependencies: @@ -5882,12 +5820,12 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.16.0(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0): + eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0): dependencies: eslint: 8.57.0 eslint-rule-composer: 0.3.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.16.0(@typescript-eslint/parser@7.16.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) eslint-rule-composer@0.3.0: {} @@ -6680,7 +6618,7 @@ snapshots: dependencies: json-buffer: 3.0.1 - knip@5.25.2(@types/node@20.14.10)(typescript@5.4.5): + knip@5.26.0(@types/node@20.14.10)(typescript@5.4.5): dependencies: '@nodelib/fs.walk': 1.2.8 '@snyk/github-codeowners': 1.1.0 @@ -6697,22 +6635,21 @@ snapshots: smol-toml: 1.2.2 strip-json-comments: 5.0.1 summary: 2.1.0 - tsconfig-paths: 4.2.0 typescript: 5.4.5 zod: 3.23.8 zod-validation-error: 3.3.0(zod@3.23.8) - langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1): + langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1): dependencies: - '@langchain/core': 0.2.15(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3) - '@langchain/openai': 0.2.1(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1)) - '@langchain/textsplitters': 0.0.3(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3) + '@langchain/core': 0.2.16(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3) + '@langchain/openai': 0.2.2(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1)) + '@langchain/textsplitters': 0.0.3(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3) binary-extensions: 2.2.0 js-tiktoken: 1.0.12 js-yaml: 4.1.0 jsonpointer: 5.0.1 langchainhub: 0.0.11 - langsmith: 0.1.36(@langchain/core@0.2.15(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3))(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3) + langsmith: 0.1.36(@langchain/core@0.2.16(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3))(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3) ml-distance: 4.0.1 openapi-types: 12.1.3 p-retry: 4.6.2 @@ -6730,7 +6667,7 @@ snapshots: langchainhub@0.0.11: {} - langsmith@0.1.36(@langchain/core@0.2.15(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3))(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3): + langsmith@0.1.36(@langchain/core@0.2.16(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3))(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3): dependencies: '@types/uuid': 9.0.8 commander: 10.0.1 @@ -6738,8 +6675,8 @@ snapshots: p-retry: 4.6.2 uuid: 9.0.1 optionalDependencies: - '@langchain/core': 0.2.15(langchain@0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3) - langchain: 0.2.9(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1) + '@langchain/core': 0.2.16(langchain@0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1))(openai@4.52.3) + langchain: 0.2.10(cheerio@1.0.0-rc.12)(ignore@5.3.1)(openai@4.52.3)(playwright@1.45.1) openai: 4.52.3 leven@3.1.0: {} @@ -7150,7 +7087,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -7261,7 +7198,7 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@3.3.2: {} + prettier@3.3.3: {} pretty-ms@9.0.0: dependencies: @@ -7705,12 +7642,6 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tsconfig-paths@4.2.0: - dependencies: - json5: 2.2.3 - minimist: 1.2.8 - strip-bom: 3.0.0 - tslib@2.6.2: {} tsup@8.1.0(postcss@8.4.39)(typescript@5.4.5): @@ -7841,7 +7772,7 @@ snapshots: uuid@9.0.1: {} - vite-node@2.0.2(@types/node@20.14.10): + vite-node@2.0.3(@types/node@20.14.10): dependencies: cac: 6.7.14 debug: 4.3.5 @@ -7867,15 +7798,15 @@ snapshots: '@types/node': 20.14.10 fsevents: 2.3.3 - vitest@2.0.2(@types/node@20.14.10): + vitest@2.0.3(@types/node@20.14.10): dependencies: '@ampproject/remapping': 2.3.0 - '@vitest/expect': 2.0.2 - '@vitest/pretty-format': 2.0.2 - '@vitest/runner': 2.0.2 - '@vitest/snapshot': 2.0.2 - '@vitest/spy': 2.0.2 - '@vitest/utils': 2.0.2 + '@vitest/expect': 2.0.3 + '@vitest/pretty-format': 2.0.3 + '@vitest/runner': 2.0.3 + '@vitest/snapshot': 2.0.3 + '@vitest/spy': 2.0.3 + '@vitest/utils': 2.0.3 chai: 5.1.1 debug: 4.3.5 execa: 8.0.1 @@ -7886,7 +7817,7 @@ snapshots: tinypool: 1.0.0 tinyrainbow: 1.2.0 vite: 5.3.3(@types/node@20.14.10) - vite-node: 2.0.2(@types/node@20.14.10) + vite-node: 2.0.3(@types/node@20.14.10) why-is-node-running: 2.2.2 optionalDependencies: '@types/node': 20.14.10 diff --git a/src/ai/helpers.ts b/src/ai/helpers.ts new file mode 100644 index 0000000..114ab02 --- /dev/null +++ b/src/ai/helpers.ts @@ -0,0 +1,28 @@ +import type { BaseChatModel } from '@langchain/core/language_models/chat_models' + +import { AzureOpenAIModelProvider } from './model-providers/azure-openai' +import type { BaseModelProvider } from './model-providers/base' +import { OpenAIModelProvider } from './model-providers/openai' +import { parseModelBaseUrl, type ModelUrlType } from './parse-model-base-url' + +export const getCurrentModelProvider = async () => { + const { urlType } = await parseModelBaseUrl() + + const urlTypeProviderMap = { + openai: OpenAIModelProvider, + 'azure-openai': AzureOpenAIModelProvider + } satisfies Record> + + return urlTypeProviderMap[urlType] || OpenAIModelProvider +} + +export const getCurrentSessionIdHistoriesMap = async () => { + const ModelProvider = await getCurrentModelProvider() + return ModelProvider.sessionIdHistoriesMap +} + +export const createModelProvider = async () => { + const ModelProvider = await getCurrentModelProvider() + const modelProvider = new ModelProvider() + return modelProvider +} diff --git a/src/ai/model-providers/azure-openai.ts b/src/ai/model-providers/azure-openai.ts index f228046..3dacc29 100644 --- a/src/ai/model-providers/azure-openai.ts +++ b/src/ai/model-providers/azure-openai.ts @@ -1,6 +1,7 @@ /* eslint-disable no-useless-escape */ import { getConfigKey } from '@/config' import { getContext } from '@/context' +import { t } from '@/i18n' import { AzureChatOpenAI, ChatOpenAI, @@ -8,6 +9,7 @@ import { } from '@langchain/openai' import * as vscode from 'vscode' +import { parseModelBaseUrl } from '../parse-model-base-url' import { BaseModelProvider } from './base' export class AzureOpenAIModelProvider extends BaseModelProvider< @@ -15,33 +17,33 @@ export class AzureOpenAIModelProvider extends BaseModelProvider< > { async createModel() { const isDev = getContext().extensionMode !== vscode.ExtensionMode.Production - const openaiBaseUrl = await getConfigKey('openaiBaseUrl') + const { url: openaiBaseUrl } = await parseModelBaseUrl() const openaiKey = await getConfigKey('openaiKey') - const openaiModel = await getConfigKey('openaiModel') const regex = /https:\/\/(.+?)\/openai\/deployments\/([^\/]+)(?:\/[^?]+)?\?api-version=(.+)/ const match = openaiBaseUrl.match(regex) - if (!match) throw new Error('Invalid Azure OpenAI API URL') + if (!match) throw new Error(t('error.invalidAzureOpenaiBaseUrl')) const azureOpenAIBasePath = `https://${match[1]}/openai/deployments` const azureOpenAIApiDeploymentName = match[2] || '' const azureOpenAIApiVersion = match[3] || '' // final request url example: + // https://azure-llm.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2022-12-01 // https://westeurope.api.microsoft.com/openai/deployments/[azureOpenAIApiDeploymentName]/chat/completions?api-version=[azureOpenAIApiVersion] // basePath is: // https://westeurope.api.microsoft.com/openai/deployments // so user need to configure modelApiBaseUrl to: // https://westeurope.api.microsoft.com/openai/deployments/[azureOpenAIApiDeploymentName]?api-version=[azureOpenAIApiVersion] + // https://westeurope.api.microsoft.com/openai/deployments/gpt-4o-xxx/chat/completions?api-version=2024-07-15 const model = new AzureChatOpenAI({ azureOpenAIBasePath, azureOpenAIApiKey: openaiKey, azureOpenAIApiVersion, azureOpenAIApiDeploymentName, - model: openaiModel, configuration: { fetch }, diff --git a/src/ai/model-providers/index.ts b/src/ai/model-providers/index.ts deleted file mode 100644 index 666db64..0000000 --- a/src/ai/model-providers/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { getConfigKey } from '@/config' - -import { AzureOpenAIModelProvider } from './azure-openai' -import { OpenAIModelProvider } from './openai' - -export const getCurrentModelProvider = async () => { - const baseUrl = await getConfigKey('openaiBaseUrl') - - if (baseUrl.includes('api.microsoft.com')) { - return AzureOpenAIModelProvider - } - - return OpenAIModelProvider -} - -export const getCurrentSessionIdHistoriesMap = async () => { - const ModelProvider = await getCurrentModelProvider() - return ModelProvider.sessionIdHistoriesMap -} - -export const createModelProvider = async () => { - const ModelProvider = await getCurrentModelProvider() - const modelProvider = new ModelProvider() - return modelProvider -} diff --git a/src/ai/model-providers/openai.ts b/src/ai/model-providers/openai.ts index 07ed489..a8d4c8b 100644 --- a/src/ai/model-providers/openai.ts +++ b/src/ai/model-providers/openai.ts @@ -3,6 +3,7 @@ import { getContext } from '@/context' import { ChatOpenAI, type ChatOpenAICallOptions } from '@langchain/openai' import * as vscode from 'vscode' +import { parseModelBaseUrl } from '../parse-model-base-url' import { BaseModelProvider } from './base' export class OpenAIModelProvider extends BaseModelProvider< @@ -10,7 +11,7 @@ export class OpenAIModelProvider extends BaseModelProvider< > { async createModel() { const isDev = getContext().extensionMode !== vscode.ExtensionMode.Production - const openaiBaseUrl = await getConfigKey('openaiBaseUrl') + const { url: openaiBaseUrl } = await parseModelBaseUrl() const openaiKey = await getConfigKey('openaiKey') const openaiModel = await getConfigKey('openaiModel') diff --git a/src/ai/parse-model-base-url.ts b/src/ai/parse-model-base-url.ts new file mode 100644 index 0000000..c1ffd50 --- /dev/null +++ b/src/ai/parse-model-base-url.ts @@ -0,0 +1,37 @@ +/* eslint-disable prefer-destructuring */ +import { getConfigKey } from '@/config' +import { t } from '@/i18n' + +export type ModelUrlType = 'openai' | 'azure-openai' +export const parseModelBaseUrl = async (): Promise<{ + urlType: ModelUrlType + url: string +}> => { + // https://api.openai.com/v1 + // openai@https://api.openai.com/v1 + // azure-openai@https://westeurope.api.microsoft.com/openai/deployments/[azureOpenAIApiDeploymentName] + // copilot + // Fetch the baseUrl from the config + const baseUrl = await getConfigKey('openaiBaseUrl') + + // Default values + let urlType: ModelUrlType = 'openai' + let url = '' + + // Use regexp to parse the urlType + const regex = /^(openai|azure-openai|copilot)?@?(https?:\/\/[^\s]+)?$/ + const match = baseUrl.trim().match(regex) + + if (match) { + if (match[1]) { + urlType = match[1] as ModelUrlType + } + if (match[2]) { + url = match[2] + } + } else { + throw new Error(t('error.invalidBaseUrl')) + } + + return { urlType, url } +} diff --git a/src/commands/code-convert.ts b/src/commands/code-convert.ts index e15b7eb..1d1a1ba 100644 --- a/src/commands/code-convert.ts +++ b/src/commands/code-convert.ts @@ -1,10 +1,11 @@ import { createModelProvider, getCurrentSessionIdHistoriesMap -} from '@/ai/model-providers' +} from '@/ai/helpers' import { getConfigKey, setConfigKey } from '@/config' import { languageIds } from '@/constants' import { createTmpFileInfo } from '@/file-utils/create-tmp-file' +import { showContinueMessage } from '@/file-utils/show-continue-message' import { tmpFileWriter } from '@/file-utils/tmp-file-writer' import { t } from '@/i18n' import type { BaseLanguageModelInput } from '@langchain/core/language_models/base' @@ -63,17 +64,23 @@ const getTargetLanguageId = async (originalFileLanguageId: string) => { if (!targetLanguageId) throw new Error(t('error.noTargetLanguage')) - await setConfigKey( - 'convertLanguagePairs', - { - ...convertLanguagePairs, - [originalFileLanguageId]: targetLanguageId - }, - { - targetForSet: vscode.ConfigurationTarget.WorkspaceFolder, - allowCustomOptionValue: true - } + const autoRememberConvertLanguagePairs = await getConfigKey( + 'autoRememberConvertLanguagePairs' ) + + if (autoRememberConvertLanguagePairs) { + await setConfigKey( + 'convertLanguagePairs', + { + ...convertLanguagePairs, + [originalFileLanguageId]: targetLanguageId + }, + { + targetForSet: vscode.ConfigurationTarget.WorkspaceFolder, + allowCustomOptionValue: true + } + ) + } } return targetLanguageId @@ -123,7 +130,7 @@ export const handleCodeConvert = async () => { sourceCode: originalFileContent }) - await tmpFileWriter({ + const tmpFileWriterReturns = await tmpFileWriter({ languageId: targetLanguageId, buildAiStream: async () => { if (!isContinue) { @@ -151,4 +158,13 @@ export const handleCodeConvert = async () => { ) } }) + + await showContinueMessage({ + tmpFileUri: tmpFileWriterReturns.tmpFileUri, + originalFileContentLineCount: originalFileContent.split('\n').length, + continueMessage: t('info.continueMessage') + t('info.iconContinueMessage'), + onContinue: async () => { + await handleCodeConvert() + } + }) } diff --git a/src/commands/code-viewer-helper.ts b/src/commands/code-viewer-helper.ts index 056cfb9..f3810ee 100644 --- a/src/commands/code-viewer-helper.ts +++ b/src/commands/code-viewer-helper.ts @@ -1,10 +1,12 @@ import { createModelProvider, getCurrentSessionIdHistoriesMap -} from '@/ai/model-providers' +} from '@/ai/helpers' import { getConfigKey } from '@/config' import { createTmpFileInfo } from '@/file-utils/create-tmp-file' +import { showContinueMessage } from '@/file-utils/show-continue-message' import { tmpFileWriter } from '@/file-utils/tmp-file-writer' +import { t } from '@/i18n' import type { BaseLanguageModelInput } from '@langchain/core/language_models/base' import type { RunnableConfig } from '@langchain/core/runnables' import * as vscode from 'vscode' @@ -65,7 +67,7 @@ export const handleCodeViewerHelper = async () => { code: originalFileContent }) - await tmpFileWriter({ + const tmpFileWriterReturns = await tmpFileWriter({ languageId: originalFileLanguageId, buildAiStream: async () => { if (!isContinue) { @@ -93,4 +95,13 @@ export const handleCodeViewerHelper = async () => { ) } }) + + await showContinueMessage({ + tmpFileUri: tmpFileWriterReturns?.tmpFileUri, + originalFileContentLineCount: originalFileContent.split('\n').length, + continueMessage: t('info.continueMessage') + t('info.iconContinueMessage'), + onContinue: async () => { + await handleCodeViewerHelper() + } + }) } diff --git a/src/commands/rename-variable.ts b/src/commands/rename-variable.ts index 88ffedb..8bcbe5b 100644 --- a/src/commands/rename-variable.ts +++ b/src/commands/rename-variable.ts @@ -2,9 +2,9 @@ import path from 'path' import { createModelProvider, getCurrentSessionIdHistoriesMap -} from '@/ai/model-providers' +} from '@/ai/helpers' import { t } from '@/i18n' -import { hideProcessLoading, showProcessLoading } from '@/loading' +import { createLoading } from '@/loading' import { getActiveEditorContent, getCurrentWorkspaceFolder } from '@/utils' import type { BaseLanguageModelInput } from '@langchain/core/language_models/base' import type { RunnableConfig } from '@langchain/core/runnables' @@ -122,6 +122,7 @@ export const handleRenameVariable = async () => { const { selection } = activeEditor const variableName = activeEditor.document.getText(selection) const modelProvider = await createModelProvider() + const { showProcessLoading, hideProcessLoading } = createLoading() const aiRunnable = await modelProvider.createStructuredOutputRunnable({ zodSchema: renameSuggestionZodSchema diff --git a/src/config.ts b/src/config.ts index 9124989..17ca110 100644 --- a/src/config.ts +++ b/src/config.ts @@ -55,6 +55,10 @@ const configKey = { ...pkgConfig['aide.aiCommandCopyBeforeRun'], type: 'boolean' }, + autoRememberConvertLanguagePairs: { + ...pkgConfig['aide.autoRememberConvertLanguagePairs'], + type: 'boolean' + }, convertLanguagePairs: { ...pkgConfig['aide.convertLanguagePairs'], default: pkgConfig['aide.convertLanguagePairs'].default as Record< diff --git a/src/file-utils/create-tmp-file.ts b/src/file-utils/create-tmp-file.ts index 9348fe3..ae049fc 100644 --- a/src/file-utils/create-tmp-file.ts +++ b/src/file-utils/create-tmp-file.ts @@ -103,6 +103,8 @@ export interface CreateTmpFileOptions { } export interface WriteTmpFileResult { + originalFileUri: vscode.Uri + tmpFileUri: vscode.Uri tmpDocument: vscode.TextDocument writeText: (text: string) => Promise writeTextPart: (textPart: string) => Promise @@ -166,6 +168,8 @@ export const createTmpFileAndWriter = async ( } return { + originalFileUri, + tmpFileUri, tmpDocument, writeText, writeTextPart, diff --git a/src/file-utils/show-continue-message.ts b/src/file-utils/show-continue-message.ts new file mode 100644 index 0000000..c0bad9d --- /dev/null +++ b/src/file-utils/show-continue-message.ts @@ -0,0 +1,43 @@ +import { t } from '@/i18n' +import type { MaybePromise } from '@/types' +import * as vscode from 'vscode' + +export const showContinueMessage = async ({ + tmpFileUri, + originalFileContentLineCount, + lineCountDiffThreshold = 100, + continueMessage = t('info.continueMessage'), + onContinue +}: { + tmpFileUri: vscode.Uri + originalFileContentLineCount: number + lineCountDiffThreshold?: number + continueMessage?: string + onContinue: () => MaybePromise +}) => { + const tmpFileDocument = vscode.workspace.textDocuments.find( + document => document.uri.fsPath === tmpFileUri.fsPath + ) + + if (!tmpFileDocument) return + + // if the number of lines in the output file is more than xx lines less than the number of lines in the original file, + // it may need to continue + if ( + tmpFileDocument.lineCount < + originalFileContentLineCount - lineCountDiffThreshold + ) { + const continueAction = t('info.continue') + const cancelAction = t('info.cancel') + + const continueOption = await vscode.window.showInformationMessage( + continueMessage, + continueAction, + cancelAction + ) + + if (continueOption === continueAction) { + await onContinue() + } + } +} diff --git a/src/file-utils/tmp-file-writer.ts b/src/file-utils/tmp-file-writer.ts index f86a176..9d47eaa 100644 --- a/src/file-utils/tmp-file-writer.ts +++ b/src/file-utils/tmp-file-writer.ts @@ -1,5 +1,5 @@ -import { getCurrentModelProvider } from '@/ai/model-providers' -import { hideProcessLoading, showProcessLoading } from '@/loading' +import { getCurrentModelProvider } from '@/ai/helpers' +import { createLoading } from '@/loading' import { removeCodeBlockEndSyntax, removeCodeBlockStartSyntax, @@ -10,18 +10,26 @@ import type { AIMessageChunk } from '@langchain/core/messages' import { createTmpFileAndWriter, - type CreateTmpFileOptions + type CreateTmpFileOptions, + type WriteTmpFileResult } from './create-tmp-file' export interface TmpFileWriterOptions extends CreateTmpFileOptions { buildAiStream: () => Promise> } -export const tmpFileWriter = async (options: TmpFileWriterOptions) => { +export const tmpFileWriter = async ( + options: TmpFileWriterOptions +): Promise => { const { buildAiStream, ...createTmpFileOptions } = options - const { writeTextPart, getText, writeText, isClosedWithoutSaving } = + + const createTmpFileAndWriterReturns = await createTmpFileAndWriter(createTmpFileOptions) + const { writeTextPart, getText, writeText, isClosedWithoutSaving } = + createTmpFileAndWriterReturns + const ModelProvider = await getCurrentModelProvider() + const { showProcessLoading, hideProcessLoading } = createLoading() try { showProcessLoading() @@ -30,7 +38,7 @@ export const tmpFileWriter = async (options: TmpFileWriterOptions) => { for await (const chunk of aiStream) { if (isClosedWithoutSaving()) { hideProcessLoading() - return + return createTmpFileAndWriterReturns } // convert openai answer content to text @@ -67,4 +75,6 @@ export const tmpFileWriter = async (options: TmpFileWriterOptions) => { } finally { hideProcessLoading() } + + return createTmpFileAndWriterReturns } diff --git a/src/loading.ts b/src/loading.ts index 8b4149c..144f12c 100644 --- a/src/loading.ts +++ b/src/loading.ts @@ -2,58 +2,65 @@ import * as vscode from 'vscode' import { t } from './i18n' -let progressResolve: (() => void) | undefined +export const createLoading = () => { + let progressResolve: (() => void) | undefined -export const showProcessLoading = async (title = t('info.processing')) => { - if (progressResolve) { - // if there is already a progress bar showing, close it first - progressResolve() - } + const showProcessLoading = async (title = t('info.processing')) => { + if (progressResolve) { + // if there is already a progress bar showing, close it first + progressResolve() + } + + await vscode.window.withProgress( + { + location: vscode.ProgressLocation.Notification, + title, + cancellable: true + }, + async progress => + new Promise(resolve => { + progressResolve = resolve + + const updateProgress = () => { + let currentProgress = 0 + const increment = 1 // 1% each time, increment can be adjusted as needed + + const progressInterval = setInterval(() => { + if (progressResolve) { + currentProgress += increment + + if (currentProgress > 100) { + currentProgress = 0 + progress.report({ + increment: -100 + }) + } - await vscode.window.withProgress( - { - location: vscode.ProgressLocation.Notification, - title, - cancellable: true - }, - async progress => - new Promise(resolve => { - progressResolve = resolve - - const updateProgress = () => { - let currentProgress = 0 - const increment = 1 // 1% each time, increment can be adjusted as needed - - const progressInterval = setInterval(() => { - if (progressResolve) { - currentProgress += increment - - if (currentProgress > 100) { - currentProgress = 0 progress.report({ - increment: -100 + increment + // message: `${currentProgress}%` }) + } else { + clearInterval(progressInterval) + resolve() } + }, 50) // Update every 100 milliseconds, can be adjusted as needed + } - progress.report({ - increment - // message: `${currentProgress}%` - }) - } else { - clearInterval(progressInterval) - resolve() - } - }, 50) // Update every 100 milliseconds, can be adjusted as needed - } - - updateProgress() - }) - ) -} + updateProgress() + }) + ) + } + + const hideProcessLoading = () => { + if (progressResolve) { + progressResolve() + progressResolve = undefined + } + } -export const hideProcessLoading = () => { - if (progressResolve) { - progressResolve() - progressResolve = undefined + return { + showProcessLoading, + hideProcessLoading } }