diff --git a/.gitignore b/.gitignore index ec4d78a3a..bbbe5c204 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,4 @@ coverage # But don't ignore the coverage scripts in .github/scripts/ !.github/scripts/coverage/ -*evals.env \ No newline at end of file +*evals.env diff --git a/.vscode/launch.json b/.vscode/launch.json index 8f1c3e50e..97febd33f 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -38,6 +38,23 @@ "IS_DEV": "true", "DEV_WORKSPACE_FOLDER": "${workspaceFolder}" } + }, + { + "type": "node", + "request": "launch", + "name": "Run Standalone Extension", + "skipFiles": ["/**"], + "sourceMaps": true, + "resolveSourceMapLocations": ["${workspaceFolder}/**", "!**/node_modules/**"], + "cwd": "${workspaceFolder}/dist-standalone", + "outFiles": ["${workspaceFolder}/dist-standalone/**/*.js"], + "preLaunchTask": "compile-standalone", + "env": { + "GRPC_TRACE": "all", + "GRPC_VERBOSITY": "DEBUG", + "NODE_PATH": "${workspaceFolder}/dist-standalone/node_modules" + }, + "program": "standalone.js" } ] } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 90906e7ba..25d7c4254 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -3,6 +3,16 @@ { "version": "2.0.0", "tasks": [ + { + "label": "compile-standalone", + "type": "npm", + "script": "compile-standalone", + "group": "build", + "problemMatcher": [], + "presentation": { + "reveal": "always" + } + }, { "label": "npm: protos", "type": "npm", diff --git a/esbuild.js b/esbuild.js index ada6c817f..a71a07ae3 100644 --- a/esbuild.js +++ b/esbuild.js @@ -4,6 +4,8 @@ const path = require("path") const production = process.argv.includes("--production") const watch = process.argv.includes("--watch") +const standalone = process.argv.includes("--standalone") +const destDir = standalone ? "dist-standalone" : "dist" /** * @type {import('esbuild').Plugin} @@ -85,7 +87,7 @@ const copyWasmFiles = { build.onEnd(() => { // tree sitter const sourceDir = path.join(__dirname, "node_modules", "web-tree-sitter") - const targetDir = path.join(__dirname, "dist") + const targetDir = path.join(__dirname, destDir) // Copy tree-sitter.wasm fs.copyFileSync(path.join(sourceDir, "tree-sitter.wasm"), path.join(targetDir, "tree-sitter.wasm")) @@ -117,7 +119,8 @@ const copyWasmFiles = { }, } -const extensionConfig = { +// Base configuration shared between extension and standalone builds +const baseConfig = { bundle: true, minify: production, sourcemap: !production, @@ -140,16 +143,32 @@ const extensionConfig = { }, }, ], - entryPoints: ["src/extension.ts"], format: "cjs", sourcesContent: false, platform: "node", - outfile: "dist/extension.js", +} + +// Extension-specific configuration +const extensionConfig = { + ...baseConfig, + entryPoints: ["src/extension.ts"], + outfile: `${destDir}/extension.js`, external: ["vscode"], } +// Standalone-specific configuration +const standaloneConfig = { + ...baseConfig, + entryPoints: ["src/standalone/standalone.ts"], + outfile: `${destDir}/standalone.js`, + // These gRPC protos need to load files from the module directory at runtime, + // so they cannot be bundled. + external: ["vscode", "@grpc/reflection", "grpc-health-check"], +} + async function main() { - const extensionCtx = await esbuild.context(extensionConfig) + const config = standalone ? standaloneConfig : extensionConfig + const extensionCtx = await esbuild.context(config) if (watch) { await extensionCtx.watch() } else { diff --git a/package-lock.json b/package-lock.json index 852ed145a..74ea5cad5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "@google-cloud/vertexai": "^1.9.3", "@google/genai": "^0.9.0", "@grpc/grpc-js": "^1.9.15", + "@grpc/reflection": "^1.0.4", "@mistralai/mistralai": "^1.5.0", "@modelcontextprotocol/sdk": "^1.7.0", "@opentelemetry/api": "^1.4.1", @@ -27,6 +28,7 @@ "@opentelemetry/semantic-conventions": "^1.30.0", "@sentry/browser": "^9.12.0", "@vscode/codicons": "^0.0.36", + "archiver": "^7.0.1", "axios": "^1.8.2", "cheerio": "^1.0.0", "chokidar": "^4.0.1", @@ -40,6 +42,7 @@ "fzf": "^0.5.2", "get-folder-size": "^5.0.0", "globby": "^14.0.2", + "grpc-health-check": "^2.0.2", "iconv-lite": "^0.6.3", "ignore": "^7.0.3", "image-size": "^2.0.2", @@ -48,6 +51,7 @@ "mammoth": "^1.8.0", "monaco-vscode-textmate-theme-converter": "^0.1.7", "ollama": "^0.5.13", + "open": "^10.1.2", "open-graph-scraper": "^6.9.0", "openai": "^4.83.0", "os-name": "^6.0.0", @@ -61,6 +65,7 @@ "simple-git": "^3.27.0", "strip-ansi": "^7.1.0", "tree-sitter-wasms": "^0.1.11", + "ts-morph": "^25.0.1", "turndown": "^7.2.0", "web-tree-sitter": "^0.22.6", "zod": "^3.24.2" @@ -5334,6 +5339,19 @@ "node": ">=6" } }, + "node_modules/@grpc/reflection": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@grpc/reflection/-/reflection-1.0.4.tgz", + "integrity": "sha512-znA8v4AviOD3OPOxy11pxrtP8k8DanpefeTymS8iGW1fVr1U2cHuzfhYqDPHnVNDf4qvF9E25KtSihPy2DBWfQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "protobufjs": "^7.2.5" + }, + "peerDependencies": { + "@grpc/grpc-js": "^1.8.21" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -6111,7 +6129,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -8450,7 +8467,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "license": "MIT", "optional": true, "engines": { @@ -10897,6 +10913,17 @@ "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", "license": "MIT" }, + "node_modules/@ts-morph/common": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.26.1.tgz", + "integrity": "sha512-Sn28TGl/4cFpcM+jwsH1wLncYq3FtN/BIpem+HOygfBWPT5pAeS5dB4VFVzV8FbnOKHpDLZmvAl4AjPEev5idA==", + "license": "MIT", + "dependencies": { + "fast-glob": "^3.3.2", + "minimatch": "^9.0.4", + "path-browserify": "^1.0.1" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", @@ -11816,6 +11843,159 @@ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "license": "ISC" }, + "node_modules/archiver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", + "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^5.0.2", + "async": "^3.2.4", + "buffer-crc32": "^1.0.0", + "readable-stream": "^4.0.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^6.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", + "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", + "license": "MIT", + "dependencies": { + "glob": "^10.0.0", + "graceful-fs": "^4.2.0", + "is-stream": "^2.0.1", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils/node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/archiver/node_modules/buffer-crc32": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", + "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/archiver/node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/archiver/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/archiver/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/archiver/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/are-we-there-yet": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", @@ -11961,6 +12141,12 @@ "astring": "bin/astring" } }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -12023,7 +12209,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, "license": "MIT" }, "node_modules/bare-events": { @@ -12148,6 +12333,34 @@ "node": ">=12.0.0" } }, + "node_modules/better-opn/node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/better-opn/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/better-path-resolve": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", @@ -12277,7 +12490,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -12306,7 +12518,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, "funding": [ { "type": "github", @@ -12355,6 +12566,21 @@ "node": ">= 0.10.x" } }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -12879,6 +13105,12 @@ "node": ">=6" } }, + "node_modules/code-block-writer": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", + "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==", + "license": "MIT" + }, "node_modules/collapse-white-space": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", @@ -12970,6 +13202,76 @@ "node": ">= 12" } }, + "node_modules/compress-commons": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", + "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "crc32-stream": "^6.0.0", + "is-stream": "^2.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/compress-commons/node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/compress-commons/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/compress-commons/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/compress-commons/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -13112,6 +13414,85 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", + "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/crc32-stream/node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/crc32-stream/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/crc32-stream/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/crc32-stream/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -13320,6 +13701,34 @@ "dev": true, "license": "MIT" }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/default-shell": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/default-shell/-/default-shell-2.2.0.tgz", @@ -13381,12 +13790,15 @@ } }, "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/define-properties": { @@ -13698,7 +14110,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, "license": "MIT" }, "node_modules/ecdsa-sig-formatter": { @@ -13725,7 +14136,6 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, "license": "MIT" }, "node_modules/encodeurl": { @@ -14573,6 +14983,15 @@ "node": ">=6" } }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/eventsource": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.5.tgz", @@ -15245,7 +15664,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", @@ -15672,7 +16090,6 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.3.tgz", "integrity": "sha512-Q38SGlYRpVtDBPSWEylRyctn7uDeTp4NQERTLiCT1FqA9JXPYWqAVmQU6qh4r/zMM5ehxTcbaO8EjhWnvEhmyg==", - "dev": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -15900,6 +16317,15 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/grpc-health-check": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/grpc-health-check/-/grpc-health-check-2.0.2.tgz", + "integrity": "sha512-5XKOdg/gIlTsZZR+8QJjzmW2CHBnn+NfM8zevIpzg+96i9dAuoH+Guu/L/5vuUkSbVZG69wVPnLpEnW+Smon1A==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.13" + } + }, "node_modules/grpc-tools": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/grpc-tools/-/grpc-tools-1.13.0.tgz", @@ -16977,6 +17403,39 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-interactive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", @@ -17405,7 +17864,6 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -17656,6 +18114,18 @@ "node": ">=0.10.0" } }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, "node_modules/lcm": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/lcm/-/lcm-0.0.3.tgz", @@ -17766,8 +18236,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.camelcase": { "version": "4.3.0", @@ -17912,7 +18381,6 @@ "version": "10.3.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", - "dev": true, "license": "ISC", "engines": { "node": "14 || >=16.14" @@ -19256,7 +19724,6 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -19281,7 +19748,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -19858,7 +20324,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -20290,17 +20755,18 @@ } }, "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz", + "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", + "license": "MIT", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -20327,6 +20793,21 @@ "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", "license": "MIT" }, + "node_modules/open/node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/openai": { "version": "4.83.0", "resolved": "https://registry.npmjs.org/openai/-/openai-4.83.0.tgz", @@ -20685,7 +21166,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/package-manager-detector": { @@ -20829,6 +21309,12 @@ "node": ">= 0.8" } }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -20867,7 +21353,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -21588,6 +22073,27 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/readdirp": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", @@ -22231,6 +22737,18 @@ "node": ">= 18" } }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-async": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", @@ -23156,7 +23674,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -23175,7 +23692,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -23190,14 +23706,12 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -23311,7 +23825,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -23696,6 +24209,16 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-morph": { + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-25.0.1.tgz", + "integrity": "sha512-QJEiTdnz1YjrB3JFhd626gX4rKHDLSjSVMvGGG4v7ONc3RBwa0Eei98G9AT9uNFDMtV54JyuXsFeC+OH0n6bXQ==", + "license": "MIT", + "dependencies": { + "@ts-morph/common": "~0.26.0", + "code-block-writer": "^13.0.3" + } + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -24758,7 +25281,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -24777,7 +25299,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -24795,14 +25316,12 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -24817,7 +25336,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -24830,7 +25348,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -25072,6 +25589,74 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zip-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", + "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^5.0.0", + "compress-commons": "^6.0.2", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/zip-stream/node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/zip-stream/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/zip-stream/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/zip-stream/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/zod": { "version": "3.24.2", "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", @@ -29369,6 +29954,15 @@ "yargs": "^17.7.2" } }, + "@grpc/reflection": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@grpc/reflection/-/reflection-1.0.4.tgz", + "integrity": "sha512-znA8v4AviOD3OPOxy11pxrtP8k8DanpefeTymS8iGW1fVr1U2cHuzfhYqDPHnVNDf4qvF9E25KtSihPy2DBWfQ==", + "requires": { + "@grpc/proto-loader": "^0.7.13", + "protobufjs": "^7.2.5" + } + }, "@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -29775,7 +30369,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "requires": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -31460,7 +32053,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "optional": true }, "@protobufjs/aspromise": { @@ -33514,6 +34106,16 @@ "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" }, + "@ts-morph/common": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.26.1.tgz", + "integrity": "sha512-Sn28TGl/4cFpcM+jwsH1wLncYq3FtN/BIpem+HOygfBWPT5pAeS5dB4VFVzV8FbnOKHpDLZmvAl4AjPEev5idA==", + "requires": { + "fast-glob": "^3.3.2", + "minimatch": "^9.0.4", + "path-browserify": "^1.0.1" + } + }, "@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", @@ -34183,6 +34785,103 @@ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, + "archiver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", + "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", + "requires": { + "archiver-utils": "^5.0.2", + "async": "^3.2.4", + "buffer-crc32": "^1.0.0", + "readable-stream": "^4.0.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^6.0.1" + }, + "dependencies": { + "buffer-crc32": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", + "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "archiver-utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", + "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", + "requires": { + "glob": "^10.0.0", + "graceful-fs": "^4.2.0", + "is-stream": "^2.0.1", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "dependencies": { + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, "are-we-there-yet": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", @@ -34289,6 +34988,11 @@ "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", "dev": true }, + "async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -34333,8 +35037,7 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "bare-events": { "version": "2.5.4", @@ -34400,6 +35103,25 @@ "dev": true, "requires": { "open": "^8.0.4" + }, + "dependencies": { + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + } } }, "better-path-resolve": { @@ -34499,7 +35221,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "requires": { "balanced-match": "^1.0.0" } @@ -34522,7 +35243,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -34549,6 +35269,14 @@ "xtend": "^4.0.0" } }, + "bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "requires": { + "run-applescript": "^7.0.0" + } + }, "bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -34889,6 +35617,11 @@ "shallow-clone": "^3.0.0" } }, + "code-block-writer": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", + "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==" + }, "collapse-white-space": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", @@ -34952,6 +35685,50 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" }, + "compress-commons": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", + "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", + "requires": { + "crc-32": "^1.2.0", + "crc32-stream": "^6.0.0", + "is-stream": "^2.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "dependencies": { + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -35039,6 +35816,52 @@ } } }, + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" + }, + "crc32-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", + "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", + "requires": { + "crc-32": "^1.2.0", + "readable-stream": "^4.0.0" + }, + "dependencies": { + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -35172,6 +35995,20 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "requires": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + } + }, + "default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==" + }, "default-shell": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/default-shell/-/default-shell-2.2.0.tgz", @@ -35212,10 +36049,9 @@ } }, "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==" }, "define-properties": { "version": "1.2.1", @@ -35424,8 +36260,7 @@ "eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "ecdsa-sig-formatter": { "version": "1.0.11", @@ -35448,8 +36283,7 @@ "emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "encodeurl": { "version": "2.0.0", @@ -36044,6 +36878,11 @@ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, "eventsource": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.5.tgz", @@ -36494,7 +37333,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "dev": true, "requires": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -36787,7 +37625,6 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.3.tgz", "integrity": "sha512-Q38SGlYRpVtDBPSWEylRyctn7uDeTp4NQERTLiCT1FqA9JXPYWqAVmQU6qh4r/zMM5ehxTcbaO8EjhWnvEhmyg==", - "dev": true, "requires": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -36944,6 +37781,14 @@ } } }, + "grpc-health-check": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/grpc-health-check/-/grpc-health-check-2.0.2.tgz", + "integrity": "sha512-5XKOdg/gIlTsZZR+8QJjzmW2CHBnn+NfM8zevIpzg+96i9dAuoH+Guu/L/5vuUkSbVZG69wVPnLpEnW+Smon1A==", + "requires": { + "@grpc/proto-loader": "^0.7.13" + } + }, "grpc-tools": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/grpc-tools/-/grpc-tools-1.13.0.tgz", @@ -37668,6 +38513,21 @@ "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "dev": true }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "requires": { + "is-docker": "^3.0.0" + }, + "dependencies": { + "is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==" + } + } + }, "is-interactive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", @@ -37936,7 +38796,6 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", - "dev": true, "requires": { "@isaacs/cliui": "^8.0.2", "@pkgjs/parseargs": "^0.11.0" @@ -38126,6 +38985,14 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, + "lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "requires": { + "readable-stream": "^2.0.5" + } + }, "lcm": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/lcm/-/lcm-0.0.3.tgz", @@ -38213,8 +39080,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.camelcase": { "version": "4.3.0", @@ -38324,8 +39190,7 @@ "lru-cache": { "version": "10.3.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", - "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", - "dev": true + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==" }, "macos-release": { "version": "3.2.0", @@ -39205,7 +40070,6 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, "requires": { "brace-expansion": "^2.0.1" } @@ -39218,8 +40082,7 @@ "minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" }, "minizlib": { "version": "2.1.2", @@ -39613,8 +40476,7 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-url": { "version": "8.0.1", @@ -39913,14 +40775,24 @@ } }, "open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz", + "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "requires": { + "is-inside-container": "^1.0.0" + } + } } }, "open-graph-scraper": { @@ -40173,8 +41045,7 @@ "package-json-from-dist": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" }, "package-manager-detector": { "version": "0.2.8", @@ -40278,6 +41149,11 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -40303,7 +41179,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, "requires": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -40799,6 +41674,24 @@ "util-deprecate": "~1.0.1" } }, + "readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "requires": { + "minimatch": "^5.1.0" + }, + "dependencies": { + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "readdirp": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", @@ -41267,6 +42160,11 @@ "path-to-regexp": "^8.0.0" } }, + "run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==" + }, "run-async": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", @@ -41939,7 +42837,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "requires": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -41950,7 +42847,6 @@ "version": "npm:string-width@4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -41960,14 +42856,12 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -42049,7 +42943,6 @@ "version": "npm:strip-ansi@6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -42305,6 +43198,15 @@ "dev": true, "requires": {} }, + "ts-morph": { + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-25.0.1.tgz", + "integrity": "sha512-QJEiTdnz1YjrB3JFhd626gX4rKHDLSjSVMvGGG4v7ONc3RBwa0Eei98G9AT9uNFDMtV54JyuXsFeC+OH0n6bXQ==", + "requires": { + "@ts-morph/common": "~0.26.0", + "code-block-writer": "^13.0.3" + } + }, "ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -43029,7 +43931,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "requires": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -43039,8 +43940,7 @@ "ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" } } }, @@ -43048,7 +43948,6 @@ "version": "npm:wrap-ansi@7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -43058,14 +43957,12 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -43076,7 +43973,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -43232,6 +44128,48 @@ "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", "dev": true }, + "zip-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", + "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", + "requires": { + "archiver-utils": "^5.0.0", + "compress-commons": "^6.0.2", + "readable-stream": "^4.0.0" + }, + "dependencies": { + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, "zod": { "version": "3.24.2", "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", diff --git a/package.json b/package.json index 0c688ec9c..3545fa39e 100644 --- a/package.json +++ b/package.json @@ -242,11 +242,14 @@ "scripts": { "vscode:prepublish": "npm run package", "compile": "npm run check-types && npm run lint && node esbuild.js", + "compile-standalone": "npm run protos && npm run check-types && npm run lint && node esbuild.js --standalone", + "postcompile-standalone": "node scripts/package-standalone.mjs", "watch": "npm-run-all -p watch:*", "watch:esbuild": "node esbuild.js --watch", "watch:tsc": "tsc --noEmit --watch --project tsconfig.json", "package": "npm run build:webview && npm run check-types && npm run lint && node esbuild.js --production", - "protos": "node proto/build-proto.js && prettier src/shared/proto src/core/controller webview-ui/src/services --write", + "protos": "node proto/build-proto.js && node scripts/generate-server-setup.mjs", + "postprotos": "prettier src/shared/proto src/core/controller webview-ui/src/services src/standalone/server-setup.ts --write --log-level silent", "compile-tests": "node ./scripts/build-tests.js", "watch-tests": "tsc -p . -w --outDir out", "pretest": "npm run compile-tests && npm run compile && npm run lint", @@ -318,6 +321,7 @@ "@google-cloud/vertexai": "^1.9.3", "@google/genai": "^0.9.0", "@grpc/grpc-js": "^1.9.15", + "@grpc/reflection": "^1.0.4", "@mistralai/mistralai": "^1.5.0", "@modelcontextprotocol/sdk": "^1.7.0", "@opentelemetry/api": "^1.4.1", @@ -328,6 +332,7 @@ "@opentelemetry/semantic-conventions": "^1.30.0", "@sentry/browser": "^9.12.0", "@vscode/codicons": "^0.0.36", + "archiver": "^7.0.1", "axios": "^1.8.2", "cheerio": "^1.0.0", "chokidar": "^4.0.1", @@ -341,6 +346,7 @@ "fzf": "^0.5.2", "get-folder-size": "^5.0.0", "globby": "^14.0.2", + "grpc-health-check": "^2.0.2", "iconv-lite": "^0.6.3", "ignore": "^7.0.3", "image-size": "^2.0.2", @@ -349,6 +355,7 @@ "mammoth": "^1.8.0", "monaco-vscode-textmate-theme-converter": "^0.1.7", "ollama": "^0.5.13", + "open": "^10.1.2", "open-graph-scraper": "^6.9.0", "openai": "^4.83.0", "os-name": "^6.0.0", @@ -362,6 +369,7 @@ "simple-git": "^3.27.0", "strip-ansi": "^7.1.0", "tree-sitter-wasms": "^0.1.11", + "ts-morph": "^25.0.1", "turndown": "^7.2.0", "web-tree-sitter": "^0.22.6", "zod": "^3.24.2" diff --git a/scripts/generate-server-setup.mjs b/scripts/generate-server-setup.mjs new file mode 100644 index 000000000..2e17d9b13 --- /dev/null +++ b/scripts/generate-server-setup.mjs @@ -0,0 +1,79 @@ +import * as fs from "fs" +import * as grpc from "@grpc/grpc-js" +import * as protoLoader from "@grpc/proto-loader" +import * as health from "grpc-health-check" +import { fileURLToPath } from "url" +import path from "path" + +const OUT_FILE = path.resolve("src/standalone/server-setup.ts") +const DESCRIPTOR_SET = path.resolve("dist-standalone/proto/descriptor_set.pb") + +// Load service definitions. +const clineDef = protoLoader.loadFileDescriptorSetFromBuffer(fs.readFileSync(DESCRIPTOR_SET)) +const healthDef = protoLoader.loadSync(health.protoPath) +const packageDefinition = { ...clineDef, ...healthDef } +const proto = grpc.loadPackageDefinition(packageDefinition) + +/** + * Generate imports and function to add all the handlers to the server for all services defined in the proto files. + */ +function generateHandlersAndExports() { + let imports = [] + let handlerSetup = [] + + for (const [name, def] of Object.entries(proto.cline)) { + if (!def || !("service" in def)) { + continue + } + const domain = name.replace(/Service$/, "") + const dir = domain.charAt(0).toLowerCase() + domain.slice(1) + imports.push(`// ${domain} Service`) + handlerSetup.push(` // ${domain} Service`) + handlerSetup.push(` server.addService(proto.cline.${name}.service, {`) + for (const [rpcName, rpc] of Object.entries(def.service)) { + imports.push(`import { ${rpcName} } from "../core/controller/${dir}/${rpcName}"`) + if (rpc.requestStream) { + throw new Error("Request streaming is not supported") + } + if (rpc.responseStream) { + handlerSetup.push(` ${rpcName}: wrapStreamingResponse(${rpcName}, controller),`) + } else { + handlerSetup.push(` ${rpcName}: wrapper(${rpcName}, controller),`) + } + } + handlerSetup.push(` });`) + imports.push("") + handlerSetup.push("") + } + return { + imports: imports.join("\n"), + handlerSetup: handlerSetup.join("\n"), + } +} + +const { imports, handlerSetup } = generateHandlersAndExports() +const scriptName = path.basename(fileURLToPath(import.meta.url)) + +// Create output file +let output = `// GENERATED CODE -- DO NOT EDIT! +// Generated by ${scriptName} +import * as grpc from "@grpc/grpc-js" +import { Controller } from "../core/controller" +import { GrpcHandlerWrapper, GrpcStreamingResponseHandlerWrapper } from "./grpc-types" + +${imports} + +export function addServices( + server: grpc.Server, + proto: any, + controller: Controller, + wrapper: GrpcHandlerWrapper, + wrapStreamingResponse: GrpcStreamingResponseHandlerWrapper, +): void { +${handlerSetup} +} +` +// Write output file +fs.writeFileSync(OUT_FILE, output) + +console.log(`Generated service handlers in ${OUT_FILE}.`) diff --git a/scripts/generate-stubs.js b/scripts/generate-stubs.js new file mode 100644 index 000000000..6096bdd3a --- /dev/null +++ b/scripts/generate-stubs.js @@ -0,0 +1,96 @@ +const fs = require("fs") +const path = require("path") +const { Project, SyntaxKind } = require("ts-morph") + +function traverse(container, output, prefix = "") { + for (const node of container.getStatements()) { + const kind = node.getKind() + + if (kind === SyntaxKind.ModuleDeclaration) { + const name = node.getName().replace(/^['"]|['"]$/g, "") + var fullPrefix + if (prefix) { + fullPrefix = `${prefix}.${name}` + } else { + fullPrefix = name + } + output.push(`${fullPrefix} = {};`) + const body = node.getBody() + if (body && body.getKind() === SyntaxKind.ModuleBlock) { + traverse(body, output, fullPrefix) + } + } else if (kind === SyntaxKind.FunctionDeclaration) { + const name = node.getName() + const params = node.getParameters().map((p, i) => sanitizeParam(p.getName(), i)) + const typeNode = node.getReturnTypeNode() + const returnType = typeNode ? typeNode.getText() : "" + const ret = mapReturn(returnType) + output.push( + `${prefix}.${name} = function(${params.join(", ")}) { console.log('Called stubbed function: ${prefix}.${name}'); ${ret} };`, + ) + } else if (kind === SyntaxKind.EnumDeclaration) { + const name = node.getName() + const members = node.getMembers().map((m) => m.getName()) + output.push(`${prefix}.${name} = { ${members.map((m) => `${m}: 0`).join(", ")} };`) + } else if (kind === SyntaxKind.VariableStatement) { + for (const decl of node.getDeclarations()) { + const name = decl.getName() + output.push(`${prefix}.${name} = createStub("${prefix}.${name}");`) + } + } else if (kind == SyntaxKind.ClassDeclaration) { + const name = node.getName() + output.push( + `${prefix}.${name} = class { constructor(...args) { + console.log('Constructed stubbed class: new ${prefix}.${name}(', args, ')'); + return createStub(${prefix}.${name}); +}};`, + ) + } else if (kind === SyntaxKind.TypeAliasDeclaration || kind === SyntaxKind.InterfaceDeclaration) { + //console.log("Skipping", SyntaxKind[kind], node.getName()) + // Skip interfaces and type aliases because they are only used at compile time by typescript. + } else { + console.log("Can't handle: ", SyntaxKind[kind]) + } + } +} + +function mapReturn(typeStr) { + if (!typeStr) return "" + if (typeStr.includes("void")) return "" + if (typeStr.includes("string")) return `return '';` + if (typeStr.includes("number")) return `return 0;` + if (typeStr.includes("boolean")) return `return false;` + if (typeStr.includes("[]")) return `return [];` + if (typeStr.includes("Thenable")) return `return Promise.resolve(null);` + return `return createStub("unknown");` +} + +function sanitizeParam(name, index) { + return name || `arg${index}` +} + +async function main() { + const inputPath = "node_modules/@types/vscode/index.d.ts" + const outputPath = "standalone/runtime-files/vscode/vscode-stubs.js" + + const project = new Project() + const sourceFile = project.addSourceFileAtPath(inputPath) + + const output = [] + output.push("// GENERATED CODE -- DO NOT EDIT!") + output.push('console.log("Loading stubs...");') + output.push('const { createStub } = require("./stub-utils")') + traverse(sourceFile, output) + output.push("module.exports = vscode;") + output.push('console.log("Finished loading stubs");') + + fs.mkdirSync(path.dirname(outputPath), { recursive: true }) + fs.writeFileSync(outputPath, output.join("\n")) + + console.log(`Wrote vscode SDK stubs to ${outputPath}`) +} + +main().catch((err) => { + console.error(err) + process.exit(1) +}) diff --git a/scripts/get-vscode-usages.sh b/scripts/get-vscode-usages.sh new file mode 100755 index 000000000..02c2d1205 --- /dev/null +++ b/scripts/get-vscode-usages.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -eu + +DIR=${1:-src/} +DEST_DIR=dist-standalone +DEST=dist-standalone/vscode-uses.txt +mkdir -p $DEST_DIR + +{ +git grep -h 'vscode\.' $DIR | +grep -Ev '//.*vscode' | # remove commented out code +sed 's|.*vscode\.|vscode.|'| # remove everything before vscode. +sed 's/[^a-zA-Z0-9_.].*$//' | # remove everything after last identifier +sort | uniq > $DEST +} + +echo Done, wrote uses of the vscode SDK to $(realpath $DEST) + diff --git a/scripts/package-standalone.mjs b/scripts/package-standalone.mjs new file mode 100644 index 000000000..52b261879 --- /dev/null +++ b/scripts/package-standalone.mjs @@ -0,0 +1,51 @@ +import fs from "fs" +import path from "path" +import { glob } from "glob" +import archiver from "archiver" +import { cp } from "fs/promises" +import { execSync } from "child_process" + +const BUILD_DIR = "dist-standalone" +const SOURCE_DIR = "standalone/runtime-files" + +await cp(SOURCE_DIR, BUILD_DIR, { recursive: true }) + +// Run npm install in the distribution directory +console.log("Running npm install in distribution directory...") +const cwd = process.cwd() +process.chdir(BUILD_DIR) +try { + execSync("npm install", { stdio: "inherit" }) +} catch (error) { + console.error("Error running npm install:", error) + process.exit(1) +} finally { + process.chdir(cwd) +} + +// Check for native .node modules. +const nativeModules = await glob("**/*.node", { cwd: BUILD_DIR, nodir: true }) +if (nativeModules.length > 0) { + console.error("Native node modules cannot be included in the standalone distribution:\n", nativeModules.join("\n")) + process.exit(1) +} + +// Zip the build directory (excluding any pre-existing output zip). +const zipPath = path.join(BUILD_DIR, "standalone.zip") +const output = fs.createWriteStream(zipPath) +const archive = archiver("zip", { zlib: { level: 9 } }) + +output.on("close", () => { + console.log(`Created ${zipPath} (${archive.pointer()} bytes)`) +}) + +archive.on("error", (err) => { + throw err +}) + +archive.pipe(output) +archive.glob("**/*", { + cwd: BUILD_DIR, + ignore: ["standalone.zip"], +}) +await archive.finalize() diff --git a/src/standalone/grpc-types.ts b/src/standalone/grpc-types.ts new file mode 100644 index 000000000..83c835431 --- /dev/null +++ b/src/standalone/grpc-types.ts @@ -0,0 +1,38 @@ +import * as grpc from "@grpc/grpc-js" +import { Controller } from "../core/controller" + +/** + * Type definition for a gRPC handler function. + * This represents a function that takes a Controller instance and a request object, + * and returns a Promise of the response type. + * + * @template TRequest - The type of the request object + * @template TResponse - The type of the response object + */ +export type GrpcHandler = (controller: Controller, req: TRequest) => Promise + +export type GrpcStreamingResponseHandler = ( + controller: Controller, + req: TRequest, + streamResponseHandler: StreamingResponseWriter, + requestId?: string, +) => Promise + +/** + * Type definition for the wrapper function that converts a Promise-based handler + * to a gRPC callback-style handler. + * + * @template TRequest - The type of the request object + * @template TResponse - The type of the response object + */ +export type GrpcHandlerWrapper = ( + handler: GrpcHandler, + controller: Controller, +) => grpc.handleUnaryCall + +export type GrpcStreamingResponseHandlerWrapper = ( + handler: GrpcStreamingResponseHandler, + controller: Controller, +) => grpc.handleServerStreamingCall + +export type StreamingResponseWriter = (response: TResponse, isLast?: boolean, sequenceNumber?: number) => Promise diff --git a/src/standalone/server-setup.ts b/src/standalone/server-setup.ts new file mode 100644 index 000000000..5f9aa6330 --- /dev/null +++ b/src/standalone/server-setup.ts @@ -0,0 +1,153 @@ +// GENERATED CODE -- DO NOT EDIT! +// Generated by generate-server-setup.mjs +import * as grpc from "@grpc/grpc-js" +import { Controller } from "../core/controller" +import { GrpcHandlerWrapper, GrpcStreamingResponseHandlerWrapper } from "./grpc-types" + +// Account Service +import { accountLoginClicked } from "../core/controller/account/accountLoginClicked" + +// Browser Service +import { getBrowserConnectionInfo } from "../core/controller/browser/getBrowserConnectionInfo" +import { testBrowserConnection } from "../core/controller/browser/testBrowserConnection" +import { discoverBrowser } from "../core/controller/browser/discoverBrowser" +import { getDetectedChromePath } from "../core/controller/browser/getDetectedChromePath" +import { updateBrowserSettings } from "../core/controller/browser/updateBrowserSettings" + +// Checkpoints Service +import { checkpointDiff } from "../core/controller/checkpoints/checkpointDiff" +import { checkpointRestore } from "../core/controller/checkpoints/checkpointRestore" + +// File Service +import { openFile } from "../core/controller/file/openFile" +import { openImage } from "../core/controller/file/openImage" +import { deleteRuleFile } from "../core/controller/file/deleteRuleFile" +import { createRuleFile } from "../core/controller/file/createRuleFile" +import { searchCommits } from "../core/controller/file/searchCommits" +import { getRelativePaths } from "../core/controller/file/getRelativePaths" +import { searchFiles } from "../core/controller/file/searchFiles" + +// Mcp Service +import { toggleMcpServer } from "../core/controller/mcp/toggleMcpServer" +import { updateMcpTimeout } from "../core/controller/mcp/updateMcpTimeout" +import { addRemoteMcpServer } from "../core/controller/mcp/addRemoteMcpServer" +import { downloadMcp } from "../core/controller/mcp/downloadMcp" + +// Models Service +import { getOllamaModels } from "../core/controller/models/getOllamaModels" +import { getLmStudioModels } from "../core/controller/models/getLmStudioModels" +import { getVsCodeLmModels } from "../core/controller/models/getVsCodeLmModels" +import { refreshOpenRouterModels } from "../core/controller/models/refreshOpenRouterModels" +import { refreshOpenAiModels } from "../core/controller/models/refreshOpenAiModels" +import { refreshRequestyModels } from "../core/controller/models/refreshRequestyModels" + +// Slash Service +import { reportBug } from "../core/controller/slash/reportBug" +import { condense } from "../core/controller/slash/condense" + +// State Service +import { getLatestState } from "../core/controller/state/getLatestState" +import { subscribeToState } from "../core/controller/state/subscribeToState" +import { toggleFavoriteModel } from "../core/controller/state/toggleFavoriteModel" + +// Task Service +import { cancelTask } from "../core/controller/task/cancelTask" +import { clearTask } from "../core/controller/task/clearTask" +import { deleteTasksWithIds } from "../core/controller/task/deleteTasksWithIds" +import { newTask } from "../core/controller/task/newTask" +import { showTaskWithId } from "../core/controller/task/showTaskWithId" +import { exportTaskWithId } from "../core/controller/task/exportTaskWithId" +import { toggleTaskFavorite } from "../core/controller/task/toggleTaskFavorite" +import { deleteNonFavoritedTasks } from "../core/controller/task/deleteNonFavoritedTasks" +import { getTaskHistory } from "../core/controller/task/getTaskHistory" + +// Web Service +import { checkIsImageUrl } from "../core/controller/web/checkIsImageUrl" + +export function addServices( + server: grpc.Server, + proto: any, + controller: Controller, + wrapper: GrpcHandlerWrapper, + wrapStreamingResponse: GrpcStreamingResponseHandlerWrapper, +): void { + // Account Service + server.addService(proto.cline.AccountService.service, { + accountLoginClicked: wrapper(accountLoginClicked, controller), + }) + + // Browser Service + server.addService(proto.cline.BrowserService.service, { + getBrowserConnectionInfo: wrapper(getBrowserConnectionInfo, controller), + testBrowserConnection: wrapper(testBrowserConnection, controller), + discoverBrowser: wrapper(discoverBrowser, controller), + getDetectedChromePath: wrapper(getDetectedChromePath, controller), + updateBrowserSettings: wrapper(updateBrowserSettings, controller), + }) + + // Checkpoints Service + server.addService(proto.cline.CheckpointsService.service, { + checkpointDiff: wrapper(checkpointDiff, controller), + checkpointRestore: wrapper(checkpointRestore, controller), + }) + + // File Service + server.addService(proto.cline.FileService.service, { + openFile: wrapper(openFile, controller), + openImage: wrapper(openImage, controller), + deleteRuleFile: wrapper(deleteRuleFile, controller), + createRuleFile: wrapper(createRuleFile, controller), + searchCommits: wrapper(searchCommits, controller), + getRelativePaths: wrapper(getRelativePaths, controller), + searchFiles: wrapper(searchFiles, controller), + }) + + // Mcp Service + server.addService(proto.cline.McpService.service, { + toggleMcpServer: wrapper(toggleMcpServer, controller), + updateMcpTimeout: wrapper(updateMcpTimeout, controller), + addRemoteMcpServer: wrapper(addRemoteMcpServer, controller), + downloadMcp: wrapper(downloadMcp, controller), + }) + + // Models Service + server.addService(proto.cline.ModelsService.service, { + getOllamaModels: wrapper(getOllamaModels, controller), + getLmStudioModels: wrapper(getLmStudioModels, controller), + getVsCodeLmModels: wrapper(getVsCodeLmModels, controller), + refreshOpenRouterModels: wrapper(refreshOpenRouterModels, controller), + refreshOpenAiModels: wrapper(refreshOpenAiModels, controller), + refreshRequestyModels: wrapper(refreshRequestyModels, controller), + }) + + // Slash Service + server.addService(proto.cline.SlashService.service, { + reportBug: wrapper(reportBug, controller), + condense: wrapper(condense, controller), + }) + + // State Service + server.addService(proto.cline.StateService.service, { + getLatestState: wrapper(getLatestState, controller), + subscribeToState: wrapStreamingResponse(subscribeToState, controller), + toggleFavoriteModel: wrapper(toggleFavoriteModel, controller), + }) + + // Task Service + server.addService(proto.cline.TaskService.service, { + cancelTask: wrapper(cancelTask, controller), + clearTask: wrapper(clearTask, controller), + deleteTasksWithIds: wrapper(deleteTasksWithIds, controller), + newTask: wrapper(newTask, controller), + showTaskWithId: wrapper(showTaskWithId, controller), + exportTaskWithId: wrapper(exportTaskWithId, controller), + toggleTaskFavorite: wrapper(toggleTaskFavorite, controller), + deleteNonFavoritedTasks: wrapper(deleteNonFavoritedTasks, controller), + getTaskHistory: wrapper(getTaskHistory, controller), + }) + + // Web Service + server.addService(proto.cline.WebService.service, { + checkIsImageUrl: wrapper(checkIsImageUrl, controller), + }) +} diff --git a/src/standalone/standalone.ts b/src/standalone/standalone.ts new file mode 100644 index 000000000..f9cba4794 --- /dev/null +++ b/src/standalone/standalone.ts @@ -0,0 +1,111 @@ +import * as grpc from "@grpc/grpc-js" +import { ReflectionService } from "@grpc/reflection" +import * as health from "grpc-health-check" + +import { activate } from "../extension" +import { Controller } from "../core/controller" +import { extensionContext, outputChannel, postMessage } from "./vscode-context" +import { packageDefinition, proto, log, camelToSnakeCase, snakeToCamelCase } from "./utils" +import { GrpcHandler, GrpcStreamingResponseHandler } from "./grpc-types" +import { addServices } from "./server-setup" +import { StreamingResponseHandler } from "@/core/controller/grpc-handler" + +function main() { + log("Starting service...") + + activate(extensionContext) + const controller = new Controller(extensionContext, outputChannel, postMessage) + const server = new grpc.Server() + + // Set up health check. + const healthImpl = new health.HealthImplementation({ "": "SERVING" }) + healthImpl.addToServer(server) + + // Add all the handlers for the ProtoBus services to the server. + addServices(server, proto, controller, wrapHandler, wrapStreamingResponseHandler) + + // Set up reflection. + const reflection = new ReflectionService(packageDefinition) + reflection.addToServer(server) + + // Start the server. + const host = "127.0.0.1:50051" + server.bindAsync(host, grpc.ServerCredentials.createInsecure(), (err) => { + if (err) { + log(`Error: Failed to bind to ${host}, port may be unavailable ${err.message}`) + process.exit(1) + } else { + server.start() + log(`gRPC server listening on ${host}`) + } + }) +} + +/** + * Wraps a Promise-based handler function to make it compatible with gRPC's callback-based API. + * This function converts an async handler that returns a Promise into a function that uses + * the gRPC callback pattern. + * + * @template TRequest - The type of the request object + * @template TResponse - The type of the response object + * @param handler - The Promise-based handler function to wrap + * @param controllerInstance - The controller instance to pass to the handler + * @returns A gRPC-compatible callback-style handler function + */ +function wrapHandler( + handler: GrpcHandler, + controller: Controller, +): grpc.handleUnaryCall { + return async (call: grpc.ServerUnaryCall, callback: grpc.sendUnaryData) => { + try { + log(`gRPC request: ${call.getPath()}`) + const result = await handler(controller, snakeToCamelCase(call.request)) + // The grpc-js serializer expects the proto message to be in the same + // case as the proto file. This is a work around until we find a solution. + callback(null, camelToSnakeCase(result)) + } catch (err: any) { + log(`gRPC handler error: ${call.getPath()}\n${err.stack}`) + callback({ + code: grpc.status.INTERNAL, + message: err.message || "Internal error", + } as grpc.ServiceError) + } + } +} + +function wrapStreamingResponseHandler( + handler: GrpcStreamingResponseHandler, + controller: Controller, +): grpc.handleServerStreamingCall { + return async (call: grpc.ServerWritableStream) => { + try { + const requestId = call.metadata.get("request-id").pop()?.toString() + log(`gRPC streaming request: ${call.getPath()}`) + + const responseHandler: StreamingResponseHandler = (response, isLast, sequenceNumber) => { + try { + // The grpc-js serializer expects the proto message to be in the same + // case as the proto file. This is a work around until we find a solution. + call.write(camelToSnakeCase(response)) // Use a bound version of call.write to maintain proper 'this' context + + if (isLast === true) { + log(`Closing stream for ${requestId}`) + call.end() + } + return Promise.resolve() + } catch (error) { + return Promise.reject(error) + } + } + await handler(controller, snakeToCamelCase(call.request), responseHandler, requestId) + } catch (err: any) { + log(`gRPC handler error: ${call.getPath()}\n${err.stack}`) + call.destroy({ + code: grpc.status.INTERNAL, + message: err.message || "Internal error", + } as grpc.ServiceError) + } + } +} + +main() diff --git a/src/standalone/utils.ts b/src/standalone/utils.ts new file mode 100644 index 000000000..451ae9afb --- /dev/null +++ b/src/standalone/utils.ts @@ -0,0 +1,65 @@ +import * as fs from "fs" +import * as grpc from "@grpc/grpc-js" +import * as protoLoader from "@grpc/proto-loader" +import * as health from "grpc-health-check" + +const log = (...args: unknown[]) => { + const timestamp = new Date().toISOString() + console.log(`[${timestamp}]`, "#bot.cline.server.ts", ...args) +} + +// Load service definitions. +const descriptorSet = fs.readFileSync("proto/descriptor_set.pb") +const clineDef = protoLoader.loadFileDescriptorSetFromBuffer(descriptorSet) +const healthDef = protoLoader.loadSync(health.protoPath) +const packageDefinition = { ...clineDef, ...healthDef } +const proto = grpc.loadPackageDefinition(packageDefinition) as unknown + +// Helper function to convert camelCase to snake_case +function camelToSnakeCase(obj: any): any { + if (obj === null || typeof obj !== "object") { + return obj + } + + if (Array.isArray(obj)) { + return obj.map(camelToSnakeCase) + } + + return Object.keys(obj).reduce((acc: any, key: string) => { + // Convert key from camelCase to snake_case + const snakeKey = key + .replace(/([A-Z])/g, "_$1") + .replace(/^_+/, "") + .toLowerCase() + + // Convert value recursively if it's an object + const value = obj[key] + acc[snakeKey] = camelToSnakeCase(value) + + return acc + }, {}) +} + +// Helper function to convert snake_case to camelCase +function snakeToCamelCase(obj: any): any { + if (obj === null || typeof obj !== "object") { + return obj + } + + if (Array.isArray(obj)) { + return obj.map(snakeToCamelCase) + } + + return Object.keys(obj).reduce((acc: any, key: string) => { + // Convert key from snake_case to camelCase + const camelKey = key.replace(/_([a-z0-9])/g, (_, char) => char.toUpperCase()) + + // Convert value recursively if it's an object + const value = obj[key] + acc[camelKey] = snakeToCamelCase(value) + + return acc + }, {}) +} + +export { packageDefinition, proto, log, camelToSnakeCase, snakeToCamelCase } diff --git a/src/standalone/vscode-context.ts b/src/standalone/vscode-context.ts new file mode 100644 index 000000000..ce65782fe --- /dev/null +++ b/src/standalone/vscode-context.ts @@ -0,0 +1,164 @@ +// @ts-nocheck +import * as vscode from "vscode" +import open from "open" +import { log } from "./utils" + +function stubUri(path: string): vscode.Uri { + console.log(`Using file path: ${path}`) + return { + fsPath: path, + scheme: "", + authority: "", + path: "", + query: "", + fragment: "", + with: function (change: { + scheme?: string + authority?: string + path?: string + query?: string + fragment?: string + }): vscode.Uri { + return stubUri(path) + }, + toString: function (skipEncoding?: boolean): string { + return path + }, + toJSON: function () { + return {} + }, + } +} + +function createMemento(): vscode.Memento { + const store = {} + return { + keys: function (): readonly string[] { + return Object.keys(store) + }, + get: function (key: string): T | undefined { + return key in store ? store[key] : undefined + }, + update: function (key: string, value: any): Thenable { + store[key] = value + return Promise.resolve() + }, + } +} + +const extensionContext: vscode.ExtensionContext = { + extensionPath: "/tmp/vscode/extension", + extensionUri: stubUri("/tmp/vscode/extension"), + + globalStoragePath: "/tmp/vscode/global", + globalStorageUri: stubUri("/tmp/vscode/global"), + + storagePath: "/tmp/vscode/storage", + storageUri: stubUri("/tmp/vscode/storage"), + + logPath: "/tmp/vscode/log", + logUri: stubUri("/tmp/vscode/log"), + + globalState: createMemento(), + workspaceState: createMemento(), + storageState: createMemento(), + + environmentVariableCollection: { + getScoped: function (scope: vscode.EnvironmentVariableScope): vscode.EnvironmentVariableCollection { + return { + persistent: false, + description: undefined, + replace: function (variable: string, value: string, options?: vscode.EnvironmentVariableMutatorOptions): void {}, + append: function (variable: string, value: string, options?: vscode.EnvironmentVariableMutatorOptions): void {}, + prepend: function (variable: string, value: string, options?: vscode.EnvironmentVariableMutatorOptions): void {}, + get: function (variable: string): vscode.EnvironmentVariableMutator | undefined { + return undefined + }, + forEach: function ( + callback: ( + variable: string, + mutator: vscode.EnvironmentVariableMutator, + collection: vscode.EnvironmentVariableCollection, + ) => any, + thisArg?: any, + ): void {}, + delete: function (variable: string): void {}, + clear: function (): void {}, + [Symbol.iterator]: function (): Iterator< + [variable: string, mutator: vscode.EnvironmentVariableMutator], + any, + any + > { + throw new Error("environmentVariableCollection.getScoped.Iterator not implemented") + }, + } + }, + persistent: false, + description: undefined, + replace: function (variable: string, value: string, options?: vscode.EnvironmentVariableMutatorOptions): void {}, + append: function (variable: string, value: string, options?: vscode.EnvironmentVariableMutatorOptions): void {}, + prepend: function (variable: string, value: string, options?: vscode.EnvironmentVariableMutatorOptions): void {}, + get: function (variable: string): vscode.EnvironmentVariableMutator | undefined { + return undefined + }, + forEach: function ( + callback: ( + variable: string, + mutator: vscode.EnvironmentVariableMutator, + collection: vscode.EnvironmentVariableCollection, + ) => any, + thisArg?: any, + ): void { + throw new Error("environmentVariableCollection.forEach not implemented") + }, + delete: function (variable: string): void {}, + clear: function (): void {}, + [Symbol.iterator]: function (): Iterator<[variable: string, mutator: vscode.EnvironmentVariableMutator], any, any> { + throw new Error("environmentVariableCollection.Iterator not implemented") + }, + }, + + extensionMode: 1, // Development + + extension: { + id: "your.extension.id", + isActive: true, + extensionPath: "/tmp/vscode/extension", + extensionUri: stubUri("/tmp/vscode/extension"), + packageJSON: {}, + exports: {}, + activate: async () => {}, + extensionKind: vscode.ExtensionKind.UI, + }, + + subscriptions: [], + + asAbsolutePath: (relPath) => `/tmp/vscode/extension/${relPath}`, + + secrets: { + store: async () => {}, + get: async () => undefined, + delete: async () => {}, + onDidChange: {}, + }, +} + +const outputChannel: vscode.OutputChannel = { + append: (text) => process.stdout.write(text), + appendLine: (line) => console.log(line), + clear: () => {}, + show: () => {}, + hide: () => {}, + dispose: () => {}, + name: "", + replace: function (value: string): void {}, +} + +function postMessage(message: ExtensionMessage): Promise { + log("postMessage called:", message) + return Promise.resolve(true) +} + +console.log("Finished loading vscode context...") + +export { extensionContext, outputChannel, postMessage } diff --git a/standalone/runtime-files/package-lock.json b/standalone/runtime-files/package-lock.json new file mode 100644 index 000000000..e2fdef1c0 --- /dev/null +++ b/standalone/runtime-files/package-lock.json @@ -0,0 +1,514 @@ +{ + "name": "Cline standalone", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "Cline standalone", + "version": "1.0.0", + "dependencies": { + "@grpc/grpc-js": "^1.13.3", + "@grpc/reflection": "^1.0.4", + "grpc-health-check": "^2.0.2", + "open": "^10.1.2", + "vscode": "file:./vscode" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.3.tgz", + "integrity": "sha512-FTXHdOoPbZrBjlVLHuKbDZnsTxXv2BlHF57xw6LuThXacXvtkahEPED0CKMk6obZDf65Hv4k3z62eyPNpvinIg==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@grpc/reflection": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@grpc/reflection/-/reflection-1.0.4.tgz", + "integrity": "sha512-znA8v4AviOD3OPOxy11pxrtP8k8DanpefeTymS8iGW1fVr1U2cHuzfhYqDPHnVNDf4qvF9E25KtSihPy2DBWfQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "protobufjs": "^7.2.5" + }, + "peerDependencies": { + "@grpc/grpc-js": "^1.8.21" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@types/node": { + "version": "22.15.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.18.tgz", + "integrity": "sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/grpc-health-check": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/grpc-health-check/-/grpc-health-check-2.0.2.tgz", + "integrity": "sha512-5XKOdg/gIlTsZZR+8QJjzmW2CHBnn+NfM8zevIpzg+96i9dAuoH+Guu/L/5vuUkSbVZG69wVPnLpEnW+Smon1A==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.13" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/open": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz", + "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/protobufjs": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.2.tgz", + "integrity": "sha512-f2ls6rpO6G153Cy+o2XQ+Y0sARLOZ17+OGVLHrc3VUKcLHYKEKWbkSujdBWQXM7gKn5NTfp0XnRPZn1MIu8n9w==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/vscode": { + "resolved": "vscode", + "link": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "vscode": { + "version": "1.0.0" + } + } +} diff --git a/standalone/runtime-files/package.json b/standalone/runtime-files/package.json new file mode 100644 index 000000000..3b139f1d4 --- /dev/null +++ b/standalone/runtime-files/package.json @@ -0,0 +1,12 @@ +{ + "name": "Cline standalone", + "version": "1.0.0", + "main": "standalone.js", + "dependencies": { + "@grpc/grpc-js": "^1.13.3", + "@grpc/reflection": "^1.0.4", + "grpc-health-check": "^2.0.2", + "open": "^10.1.2", + "vscode": "file:./vscode" + } +} diff --git a/standalone/runtime-files/vscode/index.js b/standalone/runtime-files/vscode/index.js new file mode 100644 index 000000000..8638fc7bb --- /dev/null +++ b/standalone/runtime-files/vscode/index.js @@ -0,0 +1,7 @@ +const stubs = require("./vscode-stubs.js") +const impls = require("./vscode-impls.js") + +module.exports = { + ...stubs, + ...impls, +} diff --git a/standalone/runtime-files/vscode/package.json b/standalone/runtime-files/vscode/package.json new file mode 100644 index 000000000..7b06c363c --- /dev/null +++ b/standalone/runtime-files/vscode/package.json @@ -0,0 +1,5 @@ +{ + "name": "vscode", + "version": "1.0.0", + "main": "index.js" +} diff --git a/standalone/runtime-files/vscode/stub-utils.js b/standalone/runtime-files/vscode/stub-utils.js new file mode 100644 index 000000000..1d98654ae --- /dev/null +++ b/standalone/runtime-files/vscode/stub-utils.js @@ -0,0 +1,19 @@ +function createStub(path) { + return new Proxy(function () {}, { + get: (target, prop) => { + const fullPath = `${path}.${String(prop)}` + console.log(`Accessed stub: ${fullPath}`) + return createStub(fullPath) + }, + apply: (target, thisArg, args) => { + console.log(`Called stub: ${path} with args:`, args) + return createStub(path) + }, + construct: (target, args) => { + console.log(`Constructed stub: ${path} with args:`, args) + return createStub(path) + }, + }) +} + +module.exports = { createStub } diff --git a/standalone/runtime-files/vscode/vscode-impls.js b/standalone/runtime-files/vscode/vscode-impls.js new file mode 100644 index 000000000..e2b221972 --- /dev/null +++ b/standalone/runtime-files/vscode/vscode-impls.js @@ -0,0 +1,149 @@ +console.log("Loading stub impls...") + +const { createStub } = require("./stub-utils") +const open = require("open").default + +vscode.window = { + showInformationMessage: (...args) => { + console.log("Stubbed showInformationMessage:", ...args) + return Promise.resolve(undefined) + }, + showWarningMessage: (...args) => { + console.log("Stubbed showWarningMessage:", ...args) + return Promise.resolve(undefined) + }, + showErrorMessage: (...args) => { + console.log("Stubbed showErrorMessage:", ...args) + return Promise.resolve(undefined) + }, + showInputBox: async (options) => { + console.log("Stubbed showInputBox:", options) + return "" + }, + showOpenDialog: async (options) => { + console.log("Stubbed showOpenDialog:", options) + return [] + }, + showSaveDialog: async (options) => { + console.log("Stubbed showSaveDialog:", options) + return undefined + }, + showTextDocument: async (...args) => { + console.log("Stubbed showTextDocument:", ...args) + return {} + }, + createOutputChannel: (name) => { + console.log("Stubbed createOutputChannel:", name) + return { + appendLine: console.log, + show: () => {}, + dispose: () => {}, + } + }, + createTerminal: (...args) => { + console.log("Stubbed createTerminal:", ...args) + return { + sendText: console.log, + show: () => {}, + dispose: () => {}, + } + }, + activeTextEditor: undefined, + visibleTextEditors: [], + tabGroups: { + all: [], + close: async () => {}, + }, + withProgress: async (_options, task) => { + console.log("Stubbed withProgress") + return task({ report: () => {} }) + }, + registerUriHandler: () => ({ dispose: () => {} }), + registerWebviewViewProvider: () => ({ dispose: () => {} }), + onDidChangeActiveTextEditor: () => ({ dispose: () => {} }), + createTextEditorDecorationType: () => ({ dispose: () => {} }), + createWebviewPanel: (...args) => { + console.log("Stubbed createWebviewPanel:", ...args) + return { + webview: {}, + reveal: () => {}, + dispose: () => {}, + } + }, +} + +vscode.env = { + uriScheme: "vscode", + appName: "Visual Studio Code", + appRoot: "/tmp/vscode/appRoot", + language: "en", + machineId: "stub-machine-id", + remoteName: undefined, + sessionId: "stub-session-id", + shell: "/bin/bash", + + clipboard: createStub("vscode.env.clipboard"), + openExternal: createStub("vscode.env.openExternal"), + getQueryParameter: createStub("vscode.env.getQueryParameter"), + onDidChangeTelemetryEnabled: createStub("vscode.env.onDidChangeTelemetryEnabled"), + isTelemetryEnabled: createStub("vscode.env.isTelemetryEnabled"), + telemetryConfiguration: createStub("vscode.env.telemetryConfiguration"), + onDidChangeTelemetryConfiguration: createStub("vscode.env.onDidChangeTelemetryConfiguration"), + createTelemetryLogger: createStub("vscode.env.createTelemetryLogger"), +} + +vscode.Uri = { + parse: (uriString) => { + const url = new URL(uriString) + return { + scheme: url.protocol.replace(":", ""), + authority: url.hostname, + path: url.pathname, + query: url.search.slice(1), + fragment: url.hash.slice(1), + fsPath: `/tmp${url.pathname}`, + toString: () => uriString, + toJSON: () => uriString, + with: (change) => { + const newUrl = new URL(uriString) + if (change.scheme) newUrl.protocol = change.scheme + ":" + if (change.authority) newUrl.hostname = change.authority + if (change.path) newUrl.pathname = change.path + if (change.query) newUrl.search = "?" + change.query + if (change.fragment) newUrl.hash = "#" + change.fragment + return vscode.Uri.parse(newUrl.toString()) + }, + } + }, + + file: (path) => { + return { + scheme: "file", + authority: "", + path, + fsPath: path, + query: "", + fragment: "", + toString: () => `file://${path}`, + toJSON: () => `file://${path}`, + with: (change) => { + const modified = Object.assign({}, vscode.Uri.file(path), change) + return modified + }, + } + }, + + joinPath: (...segments) => { + const joined = segments.map((s) => (typeof s === "string" ? s : s.path)).join("/") + return vscode.Uri.file("/" + joined.replace(/\/+/g, "/")) + }, +} + +vscode.env.openExternal = async (uri) => { + const url = typeof uri === "string" ? uri : (uri.toString?.() ?? "") + console.log("Opening browser:", url) + await open(url) + return true +} + +console.log("Finished loading stub impls...") diff --git a/standalone/runtime-files/vscode/vscode-stubs.js b/standalone/runtime-files/vscode/vscode-stubs.js new file mode 100644 index 000000000..86ad8b875 --- /dev/null +++ b/standalone/runtime-files/vscode/vscode-stubs.js @@ -0,0 +1,1341 @@ +// GENERATED CODE -- DO NOT EDIT! +console.log("Loading stubs...") +const { createStub } = require("./stub-utils") +vscode = {} +vscode.version = createStub("vscode.version") +vscode.Position = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.Position(", args, ")") + return createStub(vscode.Position) + } +} +vscode.Range = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.Range(", args, ")") + return createStub(vscode.Range) + } +} +vscode.Selection = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.Selection(", args, ")") + return createStub(vscode.Selection) + } +} +vscode.TextEditorSelectionChangeKind = { Keyboard: 0, Mouse: 0, Command: 0 } +vscode.TextEditorCursorStyle = { Line: 0, Block: 0, Underline: 0, LineThin: 0, BlockOutline: 0, UnderlineThin: 0 } +vscode.TextEditorLineNumbersStyle = { Off: 0, On: 0, Relative: 0 } +vscode.TextEditorRevealType = { Default: 0, InCenter: 0, InCenterIfOutsideViewport: 0, AtTop: 0 } +vscode.OverviewRulerLane = { Left: 0, Center: 0, Right: 0, Full: 0 } +vscode.DecorationRangeBehavior = { OpenOpen: 0, ClosedClosed: 0, OpenClosed: 0, ClosedOpen: 0 } +vscode.ThemeColor = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.ThemeColor(", args, ")") + return createStub(vscode.ThemeColor) + } +} +vscode.ThemeIcon = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.ThemeIcon(", args, ")") + return createStub(vscode.ThemeIcon) + } +} +vscode.EndOfLine = { LF: 0, CRLF: 0 } +vscode.Uri = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.Uri(", args, ")") + return createStub(vscode.Uri) + } +} +vscode.CancellationTokenSource = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.CancellationTokenSource(", args, ")") + return createStub(vscode.CancellationTokenSource) + } +} +vscode.CancellationError = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.CancellationError(", args, ")") + return createStub(vscode.CancellationError) + } +} +vscode.Disposable = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.Disposable(", args, ")") + return createStub(vscode.Disposable) + } +} +vscode.EventEmitter = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.EventEmitter(", args, ")") + return createStub(vscode.EventEmitter) + } +} +vscode.QuickPickItemKind = { Separator: 0, Default: 0 } +vscode.InputBoxValidationSeverity = { Info: 0, Warning: 0, Error: 0 } +vscode.RelativePattern = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.RelativePattern(", args, ")") + return createStub(vscode.RelativePattern) + } +} +vscode.CodeActionKind = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.CodeActionKind(", args, ")") + return createStub(vscode.CodeActionKind) + } +} +vscode.CodeActionTriggerKind = { Invoke: 0, Automatic: 0 } +vscode.CodeAction = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.CodeAction(", args, ")") + return createStub(vscode.CodeAction) + } +} +vscode.CodeLens = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.CodeLens(", args, ")") + return createStub(vscode.CodeLens) + } +} +vscode.MarkdownString = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.MarkdownString(", args, ")") + return createStub(vscode.MarkdownString) + } +} +vscode.Hover = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.Hover(", args, ")") + return createStub(vscode.Hover) + } +} +vscode.EvaluatableExpression = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.EvaluatableExpression(", args, ")") + return createStub(vscode.EvaluatableExpression) + } +} +vscode.InlineValueText = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.InlineValueText(", args, ")") + return createStub(vscode.InlineValueText) + } +} +vscode.InlineValueVariableLookup = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.InlineValueVariableLookup(", args, ")") + return createStub(vscode.InlineValueVariableLookup) + } +} +vscode.InlineValueEvaluatableExpression = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.InlineValueEvaluatableExpression(", args, ")") + return createStub(vscode.InlineValueEvaluatableExpression) + } +} +vscode.DocumentHighlightKind = { Text: 0, Read: 0, Write: 0 } +vscode.DocumentHighlight = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.DocumentHighlight(", args, ")") + return createStub(vscode.DocumentHighlight) + } +} +vscode.SymbolKind = { + File: 0, + Module: 0, + Namespace: 0, + Package: 0, + Class: 0, + Method: 0, + Property: 0, + Field: 0, + Constructor: 0, + Enum: 0, + Interface: 0, + Function: 0, + Variable: 0, + Constant: 0, + String: 0, + Number: 0, + Boolean: 0, + Array: 0, + Object: 0, + Key: 0, + Null: 0, + EnumMember: 0, + Struct: 0, + Event: 0, + Operator: 0, + TypeParameter: 0, +} +vscode.SymbolTag = { Deprecated: 0 } +vscode.SymbolInformation = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.SymbolInformation(", args, ")") + return createStub(vscode.SymbolInformation) + } +} +vscode.DocumentSymbol = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.DocumentSymbol(", args, ")") + return createStub(vscode.DocumentSymbol) + } +} +vscode.TextEdit = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TextEdit(", args, ")") + return createStub(vscode.TextEdit) + } +} +vscode.SnippetTextEdit = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.SnippetTextEdit(", args, ")") + return createStub(vscode.SnippetTextEdit) + } +} +vscode.NotebookEdit = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.NotebookEdit(", args, ")") + return createStub(vscode.NotebookEdit) + } +} +vscode.WorkspaceEdit = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.WorkspaceEdit(", args, ")") + return createStub(vscode.WorkspaceEdit) + } +} +vscode.SnippetString = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.SnippetString(", args, ")") + return createStub(vscode.SnippetString) + } +} +vscode.SemanticTokensLegend = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.SemanticTokensLegend(", args, ")") + return createStub(vscode.SemanticTokensLegend) + } +} +vscode.SemanticTokensBuilder = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.SemanticTokensBuilder(", args, ")") + return createStub(vscode.SemanticTokensBuilder) + } +} +vscode.SemanticTokens = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.SemanticTokens(", args, ")") + return createStub(vscode.SemanticTokens) + } +} +vscode.SemanticTokensEdits = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.SemanticTokensEdits(", args, ")") + return createStub(vscode.SemanticTokensEdits) + } +} +vscode.SemanticTokensEdit = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.SemanticTokensEdit(", args, ")") + return createStub(vscode.SemanticTokensEdit) + } +} +vscode.ParameterInformation = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.ParameterInformation(", args, ")") + return createStub(vscode.ParameterInformation) + } +} +vscode.SignatureInformation = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.SignatureInformation(", args, ")") + return createStub(vscode.SignatureInformation) + } +} +vscode.SignatureHelp = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.SignatureHelp(", args, ")") + return createStub(vscode.SignatureHelp) + } +} +vscode.SignatureHelpTriggerKind = { Invoke: 0, TriggerCharacter: 0, ContentChange: 0 } +vscode.CompletionItemKind = { + Text: 0, + Method: 0, + Function: 0, + Constructor: 0, + Field: 0, + Variable: 0, + Class: 0, + Interface: 0, + Module: 0, + Property: 0, + Unit: 0, + Value: 0, + Enum: 0, + Keyword: 0, + Snippet: 0, + Color: 0, + Reference: 0, + File: 0, + Folder: 0, + EnumMember: 0, + Constant: 0, + Struct: 0, + Event: 0, + Operator: 0, + TypeParameter: 0, + User: 0, + Issue: 0, +} +vscode.CompletionItemTag = { Deprecated: 0 } +vscode.CompletionItem = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.CompletionItem(", args, ")") + return createStub(vscode.CompletionItem) + } +} +vscode.CompletionList = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.CompletionList(", args, ")") + return createStub(vscode.CompletionList) + } +} +vscode.CompletionTriggerKind = { Invoke: 0, TriggerCharacter: 0, TriggerForIncompleteCompletions: 0 } +vscode.InlineCompletionList = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.InlineCompletionList(", args, ")") + return createStub(vscode.InlineCompletionList) + } +} +vscode.InlineCompletionTriggerKind = { Invoke: 0, Automatic: 0 } +vscode.InlineCompletionItem = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.InlineCompletionItem(", args, ")") + return createStub(vscode.InlineCompletionItem) + } +} +vscode.DocumentLink = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.DocumentLink(", args, ")") + return createStub(vscode.DocumentLink) + } +} +vscode.Color = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.Color(", args, ")") + return createStub(vscode.Color) + } +} +vscode.ColorInformation = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.ColorInformation(", args, ")") + return createStub(vscode.ColorInformation) + } +} +vscode.ColorPresentation = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.ColorPresentation(", args, ")") + return createStub(vscode.ColorPresentation) + } +} +vscode.InlayHintKind = { Type: 0, Parameter: 0 } +vscode.InlayHintLabelPart = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.InlayHintLabelPart(", args, ")") + return createStub(vscode.InlayHintLabelPart) + } +} +vscode.InlayHint = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.InlayHint(", args, ")") + return createStub(vscode.InlayHint) + } +} +vscode.FoldingRange = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.FoldingRange(", args, ")") + return createStub(vscode.FoldingRange) + } +} +vscode.FoldingRangeKind = { Comment: 0, Imports: 0, Region: 0 } +vscode.SelectionRange = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.SelectionRange(", args, ")") + return createStub(vscode.SelectionRange) + } +} +vscode.CallHierarchyItem = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.CallHierarchyItem(", args, ")") + return createStub(vscode.CallHierarchyItem) + } +} +vscode.CallHierarchyIncomingCall = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.CallHierarchyIncomingCall(", args, ")") + return createStub(vscode.CallHierarchyIncomingCall) + } +} +vscode.CallHierarchyOutgoingCall = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.CallHierarchyOutgoingCall(", args, ")") + return createStub(vscode.CallHierarchyOutgoingCall) + } +} +vscode.TypeHierarchyItem = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TypeHierarchyItem(", args, ")") + return createStub(vscode.TypeHierarchyItem) + } +} +vscode.LinkedEditingRanges = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.LinkedEditingRanges(", args, ")") + return createStub(vscode.LinkedEditingRanges) + } +} +vscode.DocumentDropEdit = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.DocumentDropEdit(", args, ")") + return createStub(vscode.DocumentDropEdit) + } +} +vscode.IndentAction = { None: 0, Indent: 0, IndentOutdent: 0, Outdent: 0 } +vscode.SyntaxTokenType = { Other: 0, Comment: 0, String: 0, RegEx: 0 } +vscode.ConfigurationTarget = { Global: 0, Workspace: 0, WorkspaceFolder: 0 } +vscode.Location = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.Location(", args, ")") + return createStub(vscode.Location) + } +} +vscode.DiagnosticSeverity = { Error: 0, Warning: 0, Information: 0, Hint: 0 } +vscode.DiagnosticRelatedInformation = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.DiagnosticRelatedInformation(", args, ")") + return createStub(vscode.DiagnosticRelatedInformation) + } +} +vscode.DiagnosticTag = { Unnecessary: 0, Deprecated: 0 } +vscode.Diagnostic = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.Diagnostic(", args, ")") + return createStub(vscode.Diagnostic) + } +} +vscode.LanguageStatusSeverity = { Information: 0, Warning: 0, Error: 0 } +vscode.ViewColumn = { Active: 0, Beside: 0, One: 0, Two: 0, Three: 0, Four: 0, Five: 0, Six: 0, Seven: 0, Eight: 0, Nine: 0 } +vscode.StatusBarAlignment = { Left: 0, Right: 0 } +vscode.TerminalLocation = { Panel: 0, Editor: 0 } +vscode.TerminalLink = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TerminalLink(", args, ")") + return createStub(vscode.TerminalLink) + } +} +vscode.TerminalProfile = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TerminalProfile(", args, ")") + return createStub(vscode.TerminalProfile) + } +} +vscode.FileDecoration = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.FileDecoration(", args, ")") + return createStub(vscode.FileDecoration) + } +} +vscode.ExtensionKind = { UI: 0, Workspace: 0 } +vscode.ExtensionMode = { Production: 0, Development: 0, Test: 0 } +vscode.ColorThemeKind = { Light: 0, Dark: 0, HighContrast: 0, HighContrastLight: 0 } +vscode.TaskRevealKind = { Always: 0, Silent: 0, Never: 0 } +vscode.TaskPanelKind = { Shared: 0, Dedicated: 0, New: 0 } +vscode.TaskGroup = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TaskGroup(", args, ")") + return createStub(vscode.TaskGroup) + } +} +vscode.ProcessExecution = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.ProcessExecution(", args, ")") + return createStub(vscode.ProcessExecution) + } +} +vscode.ShellQuoting = { Escape: 0, Strong: 0, Weak: 0 } +vscode.ShellExecution = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.ShellExecution(", args, ")") + return createStub(vscode.ShellExecution) + } +} +vscode.CustomExecution = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.CustomExecution(", args, ")") + return createStub(vscode.CustomExecution) + } +} +vscode.TaskScope = { Global: 0, Workspace: 0 } +vscode.Task = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.Task(", args, ")") + return createStub(vscode.Task) + } +} +vscode.tasks = {} +vscode.tasks.registerTaskProvider = function (type, provider) { + console.log("Called stubbed function: vscode.tasks.registerTaskProvider") + return createStub("unknown") +} +vscode.tasks.fetchTasks = function (filter) { + console.log("Called stubbed function: vscode.tasks.fetchTasks") + return [] +} +vscode.tasks.executeTask = function (task) { + console.log("Called stubbed function: vscode.tasks.executeTask") + return Promise.resolve(null) +} +vscode.tasks.taskExecutions = createStub("vscode.tasks.taskExecutions") +vscode.tasks.onDidStartTask = createStub("vscode.tasks.onDidStartTask") +vscode.tasks.onDidEndTask = createStub("vscode.tasks.onDidEndTask") +vscode.tasks.onDidStartTaskProcess = createStub("vscode.tasks.onDidStartTaskProcess") +vscode.tasks.onDidEndTaskProcess = createStub("vscode.tasks.onDidEndTaskProcess") +vscode.FileType = { Unknown: 0, File: 0, Directory: 0, SymbolicLink: 0 } +vscode.FilePermission = { Readonly: 0 } +vscode.FileSystemError = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.FileSystemError(", args, ")") + return createStub(vscode.FileSystemError) + } +} +vscode.FileChangeType = { Changed: 0, Created: 0, Deleted: 0 } +vscode.UIKind = { Desktop: 0, Web: 0 } +vscode.LogLevel = { Off: 0, Trace: 0, Debug: 0, Info: 0, Warning: 0, Error: 0 } +vscode.env = {} +vscode.env.appName = createStub("vscode.env.appName") +vscode.env.appRoot = createStub("vscode.env.appRoot") +vscode.env.appHost = createStub("vscode.env.appHost") +vscode.env.uriScheme = createStub("vscode.env.uriScheme") +vscode.env.language = createStub("vscode.env.language") +vscode.env.clipboard = createStub("vscode.env.clipboard") +vscode.env.machineId = createStub("vscode.env.machineId") +vscode.env.sessionId = createStub("vscode.env.sessionId") +vscode.env.isNewAppInstall = createStub("vscode.env.isNewAppInstall") +vscode.env.isTelemetryEnabled = createStub("vscode.env.isTelemetryEnabled") +vscode.env.onDidChangeTelemetryEnabled = createStub("vscode.env.onDidChangeTelemetryEnabled") +vscode.env.onDidChangeShell = createStub("vscode.env.onDidChangeShell") +vscode.env.createTelemetryLogger = function (sender, options) { + console.log("Called stubbed function: vscode.env.createTelemetryLogger") + return createStub("unknown") +} +vscode.env.remoteName = createStub("vscode.env.remoteName") +vscode.env.shell = createStub("vscode.env.shell") +vscode.env.uiKind = createStub("vscode.env.uiKind") +vscode.env.openExternal = function (target) { + console.log("Called stubbed function: vscode.env.openExternal") + return false +} +vscode.env.asExternalUri = function (target) { + console.log("Called stubbed function: vscode.env.asExternalUri") + return Promise.resolve(null) +} +vscode.env.logLevel = createStub("vscode.env.logLevel") +vscode.env.onDidChangeLogLevel = createStub("vscode.env.onDidChangeLogLevel") +vscode.commands = {} +vscode.commands.registerCommand = function (command, callback, thisArg) { + console.log("Called stubbed function: vscode.commands.registerCommand") + return createStub("unknown") +} +vscode.commands.registerTextEditorCommand = function (command, callback, thisArg) { + console.log("Called stubbed function: vscode.commands.registerTextEditorCommand") + return createStub("unknown") +} +vscode.commands.executeCommand = function (command, rest) { + console.log("Called stubbed function: vscode.commands.executeCommand") + return Promise.resolve(null) +} +vscode.commands.getCommands = function (filterInternal) { + console.log("Called stubbed function: vscode.commands.getCommands") + return "" +} +vscode.window = {} +vscode.window.tabGroups = createStub("vscode.window.tabGroups") +vscode.window.activeTextEditor = createStub("vscode.window.activeTextEditor") +vscode.window.visibleTextEditors = createStub("vscode.window.visibleTextEditors") +vscode.window.onDidChangeActiveTextEditor = createStub("vscode.window.onDidChangeActiveTextEditor") +vscode.window.onDidChangeVisibleTextEditors = createStub("vscode.window.onDidChangeVisibleTextEditors") +vscode.window.onDidChangeTextEditorSelection = createStub("vscode.window.onDidChangeTextEditorSelection") +vscode.window.onDidChangeTextEditorVisibleRanges = createStub("vscode.window.onDidChangeTextEditorVisibleRanges") +vscode.window.onDidChangeTextEditorOptions = createStub("vscode.window.onDidChangeTextEditorOptions") +vscode.window.onDidChangeTextEditorViewColumn = createStub("vscode.window.onDidChangeTextEditorViewColumn") +vscode.window.visibleNotebookEditors = createStub("vscode.window.visibleNotebookEditors") +vscode.window.onDidChangeVisibleNotebookEditors = createStub("vscode.window.onDidChangeVisibleNotebookEditors") +vscode.window.activeNotebookEditor = createStub("vscode.window.activeNotebookEditor") +vscode.window.onDidChangeActiveNotebookEditor = createStub("vscode.window.onDidChangeActiveNotebookEditor") +vscode.window.onDidChangeNotebookEditorSelection = createStub("vscode.window.onDidChangeNotebookEditorSelection") +vscode.window.onDidChangeNotebookEditorVisibleRanges = createStub("vscode.window.onDidChangeNotebookEditorVisibleRanges") +vscode.window.terminals = createStub("vscode.window.terminals") +vscode.window.activeTerminal = createStub("vscode.window.activeTerminal") +vscode.window.onDidChangeActiveTerminal = createStub("vscode.window.onDidChangeActiveTerminal") +vscode.window.onDidOpenTerminal = createStub("vscode.window.onDidOpenTerminal") +vscode.window.onDidCloseTerminal = createStub("vscode.window.onDidCloseTerminal") +vscode.window.onDidChangeTerminalState = createStub("vscode.window.onDidChangeTerminalState") +vscode.window.state = createStub("vscode.window.state") +vscode.window.onDidChangeWindowState = createStub("vscode.window.onDidChangeWindowState") +vscode.window.showTextDocument = function (document, column, preserveFocus) { + console.log("Called stubbed function: vscode.window.showTextDocument") + return Promise.resolve(null) +} +vscode.window.showTextDocument = function (document, options) { + console.log("Called stubbed function: vscode.window.showTextDocument") + return Promise.resolve(null) +} +vscode.window.showTextDocument = function (uri, options) { + console.log("Called stubbed function: vscode.window.showTextDocument") + return Promise.resolve(null) +} +vscode.window.showNotebookDocument = function (document, options) { + console.log("Called stubbed function: vscode.window.showNotebookDocument") + return Promise.resolve(null) +} +vscode.window.createTextEditorDecorationType = function (options) { + console.log("Called stubbed function: vscode.window.createTextEditorDecorationType") + return createStub("unknown") +} +vscode.window.showInformationMessage = function (message, items) { + console.log("Called stubbed function: vscode.window.showInformationMessage") + return Promise.resolve(null) +} +vscode.window.showInformationMessage = function (message, options, items) { + console.log("Called stubbed function: vscode.window.showInformationMessage") + return Promise.resolve(null) +} +vscode.window.showInformationMessage = function (message, items) { + console.log("Called stubbed function: vscode.window.showInformationMessage") + return Promise.resolve(null) +} +vscode.window.showInformationMessage = function (message, options, items) { + console.log("Called stubbed function: vscode.window.showInformationMessage") + return Promise.resolve(null) +} +vscode.window.showWarningMessage = function (message, items) { + console.log("Called stubbed function: vscode.window.showWarningMessage") + return Promise.resolve(null) +} +vscode.window.showWarningMessage = function (message, options, items) { + console.log("Called stubbed function: vscode.window.showWarningMessage") + return Promise.resolve(null) +} +vscode.window.showWarningMessage = function (message, items) { + console.log("Called stubbed function: vscode.window.showWarningMessage") + return Promise.resolve(null) +} +vscode.window.showWarningMessage = function (message, options, items) { + console.log("Called stubbed function: vscode.window.showWarningMessage") + return Promise.resolve(null) +} +vscode.window.showErrorMessage = function (message, items) { + console.log("Called stubbed function: vscode.window.showErrorMessage") + return Promise.resolve(null) +} +vscode.window.showErrorMessage = function (message, options, items) { + console.log("Called stubbed function: vscode.window.showErrorMessage") + return Promise.resolve(null) +} +vscode.window.showErrorMessage = function (message, items) { + console.log("Called stubbed function: vscode.window.showErrorMessage") + return Promise.resolve(null) +} +vscode.window.showErrorMessage = function (message, options, items) { + console.log("Called stubbed function: vscode.window.showErrorMessage") + return Promise.resolve(null) +} +vscode.window.showQuickPick = function (items, options, token) { + console.log("Called stubbed function: vscode.window.showQuickPick") + return "" +} +vscode.window.showQuickPick = function (items, options, token) { + console.log("Called stubbed function: vscode.window.showQuickPick") + return "" +} +vscode.window.showQuickPick = function (items, options, token) { + console.log("Called stubbed function: vscode.window.showQuickPick") + return [] +} +vscode.window.showQuickPick = function (items, options, token) { + console.log("Called stubbed function: vscode.window.showQuickPick") + return Promise.resolve(null) +} +vscode.window.showWorkspaceFolderPick = function (options) { + console.log("Called stubbed function: vscode.window.showWorkspaceFolderPick") + return Promise.resolve(null) +} +vscode.window.showOpenDialog = function (options) { + console.log("Called stubbed function: vscode.window.showOpenDialog") + return [] +} +vscode.window.showSaveDialog = function (options) { + console.log("Called stubbed function: vscode.window.showSaveDialog") + return Promise.resolve(null) +} +vscode.window.showInputBox = function (options, token) { + console.log("Called stubbed function: vscode.window.showInputBox") + return "" +} +vscode.window.createQuickPick = function () { + console.log("Called stubbed function: vscode.window.createQuickPick") + return createStub("unknown") +} +vscode.window.createInputBox = function () { + console.log("Called stubbed function: vscode.window.createInputBox") + return createStub("unknown") +} +vscode.window.createOutputChannel = function (name, languageId) { + console.log("Called stubbed function: vscode.window.createOutputChannel") + return createStub("unknown") +} +vscode.window.createOutputChannel = function (name, options) { + console.log("Called stubbed function: vscode.window.createOutputChannel") + return createStub("unknown") +} +vscode.window.createWebviewPanel = function (viewType, title, showOptions, options) { + console.log("Called stubbed function: vscode.window.createWebviewPanel") + return createStub("unknown") +} +vscode.window.setStatusBarMessage = function (text, hideAfterTimeout) { + console.log("Called stubbed function: vscode.window.setStatusBarMessage") + return createStub("unknown") +} +vscode.window.setStatusBarMessage = function (text, hideWhenDone) { + console.log("Called stubbed function: vscode.window.setStatusBarMessage") + return createStub("unknown") +} +vscode.window.setStatusBarMessage = function (text) { + console.log("Called stubbed function: vscode.window.setStatusBarMessage") + return createStub("unknown") +} +vscode.window.withScmProgress = function (task) { + console.log("Called stubbed function: vscode.window.withScmProgress") + return Promise.resolve(null) +} +vscode.window.withProgress = function (options, task) { + console.log("Called stubbed function: vscode.window.withProgress") + return Promise.resolve(null) +} +vscode.window.createStatusBarItem = function (id, alignment, priority) { + console.log("Called stubbed function: vscode.window.createStatusBarItem") + return createStub("unknown") +} +vscode.window.createStatusBarItem = function (alignment, priority) { + console.log("Called stubbed function: vscode.window.createStatusBarItem") + return createStub("unknown") +} +vscode.window.createTerminal = function (name, shellPath, shellArgs) { + console.log("Called stubbed function: vscode.window.createTerminal") + return createStub("unknown") +} +vscode.window.createTerminal = function (options) { + console.log("Called stubbed function: vscode.window.createTerminal") + return createStub("unknown") +} +vscode.window.createTerminal = function (options) { + console.log("Called stubbed function: vscode.window.createTerminal") + return createStub("unknown") +} +vscode.window.registerTreeDataProvider = function (viewId, treeDataProvider) { + console.log("Called stubbed function: vscode.window.registerTreeDataProvider") + return createStub("unknown") +} +vscode.window.createTreeView = function (viewId, options) { + console.log("Called stubbed function: vscode.window.createTreeView") + return createStub("unknown") +} +vscode.window.registerUriHandler = function (handler) { + console.log("Called stubbed function: vscode.window.registerUriHandler") + return createStub("unknown") +} +vscode.window.registerWebviewPanelSerializer = function (viewType, serializer) { + console.log("Called stubbed function: vscode.window.registerWebviewPanelSerializer") + return createStub("unknown") +} +vscode.window.registerWebviewViewProvider = function (viewId, provider, options) { + console.log("Called stubbed function: vscode.window.registerWebviewViewProvider") + return createStub("unknown") +} +vscode.window.registerCustomEditorProvider = function (viewType, provider, options) { + console.log("Called stubbed function: vscode.window.registerCustomEditorProvider") + return createStub("unknown") +} +vscode.window.registerTerminalLinkProvider = function (provider) { + console.log("Called stubbed function: vscode.window.registerTerminalLinkProvider") + return createStub("unknown") +} +vscode.window.registerTerminalProfileProvider = function (id, provider) { + console.log("Called stubbed function: vscode.window.registerTerminalProfileProvider") + return createStub("unknown") +} +vscode.window.registerFileDecorationProvider = function (provider) { + console.log("Called stubbed function: vscode.window.registerFileDecorationProvider") + return createStub("unknown") +} +vscode.window.activeColorTheme = createStub("vscode.window.activeColorTheme") +vscode.window.onDidChangeActiveColorTheme = createStub("vscode.window.onDidChangeActiveColorTheme") +vscode.DataTransferItem = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.DataTransferItem(", args, ")") + return createStub(vscode.DataTransferItem) + } +} +vscode.DataTransfer = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.DataTransfer(", args, ")") + return createStub(vscode.DataTransfer) + } +} +vscode.TreeItem = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TreeItem(", args, ")") + return createStub(vscode.TreeItem) + } +} +vscode.TreeItemCollapsibleState = { None: 0, Collapsed: 0, Expanded: 0 } +vscode.TreeItemCheckboxState = { Unchecked: 0, Checked: 0 } +vscode.TerminalExitReason = { Unknown: 0, Shutdown: 0, Process: 0, User: 0, Extension: 0 } +vscode.EnvironmentVariableMutatorType = { Replace: 0, Append: 0, Prepend: 0 } +vscode.ProgressLocation = { SourceControl: 0, Window: 0, Notification: 0 } +vscode.QuickInputButtons = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.QuickInputButtons(", args, ")") + return createStub(vscode.QuickInputButtons) + } +} +vscode.TextDocumentChangeReason = { Undo: 0, Redo: 0 } +vscode.TextDocumentSaveReason = { Manual: 0, AfterDelay: 0, FocusOut: 0 } +vscode.workspace = {} +vscode.workspace.fs = createStub("vscode.workspace.fs") +vscode.workspace.rootPath = createStub("vscode.workspace.rootPath") +vscode.workspace.workspaceFolders = createStub("vscode.workspace.workspaceFolders") +vscode.workspace.name = createStub("vscode.workspace.name") +vscode.workspace.workspaceFile = createStub("vscode.workspace.workspaceFile") +vscode.workspace.onDidChangeWorkspaceFolders = createStub("vscode.workspace.onDidChangeWorkspaceFolders") +vscode.workspace.getWorkspaceFolder = function (uri) { + console.log("Called stubbed function: vscode.workspace.getWorkspaceFolder") + return createStub("unknown") +} +vscode.workspace.asRelativePath = function (pathOrUri, includeWorkspaceFolder) { + console.log("Called stubbed function: vscode.workspace.asRelativePath") + return "" +} +vscode.workspace.updateWorkspaceFolders = function (start, deleteCount, workspaceFoldersToAdd) { + console.log("Called stubbed function: vscode.workspace.updateWorkspaceFolders") + return false +} +vscode.workspace.createFileSystemWatcher = function (globPattern, ignoreCreateEvents, ignoreChangeEvents, ignoreDeleteEvents) { + console.log("Called stubbed function: vscode.workspace.createFileSystemWatcher") + return createStub("unknown") +} +vscode.workspace.findFiles = function (include, exclude, maxResults, token) { + console.log("Called stubbed function: vscode.workspace.findFiles") + return [] +} +vscode.workspace.saveAll = function (includeUntitled) { + console.log("Called stubbed function: vscode.workspace.saveAll") + return false +} +vscode.workspace.applyEdit = function (edit, metadata) { + console.log("Called stubbed function: vscode.workspace.applyEdit") + return false +} +vscode.workspace.textDocuments = createStub("vscode.workspace.textDocuments") +vscode.workspace.openTextDocument = function (uri) { + console.log("Called stubbed function: vscode.workspace.openTextDocument") + return Promise.resolve(null) +} +vscode.workspace.openTextDocument = function (fileName) { + console.log("Called stubbed function: vscode.workspace.openTextDocument") + return Promise.resolve(null) +} +vscode.workspace.openTextDocument = function (options) { + console.log("Called stubbed function: vscode.workspace.openTextDocument") + return Promise.resolve(null) +} +vscode.workspace.registerTextDocumentContentProvider = function (scheme, provider) { + console.log("Called stubbed function: vscode.workspace.registerTextDocumentContentProvider") + return createStub("unknown") +} +vscode.workspace.onDidOpenTextDocument = createStub("vscode.workspace.onDidOpenTextDocument") +vscode.workspace.onDidCloseTextDocument = createStub("vscode.workspace.onDidCloseTextDocument") +vscode.workspace.onDidChangeTextDocument = createStub("vscode.workspace.onDidChangeTextDocument") +vscode.workspace.onWillSaveTextDocument = createStub("vscode.workspace.onWillSaveTextDocument") +vscode.workspace.onDidSaveTextDocument = createStub("vscode.workspace.onDidSaveTextDocument") +vscode.workspace.notebookDocuments = createStub("vscode.workspace.notebookDocuments") +vscode.workspace.openNotebookDocument = function (uri) { + console.log("Called stubbed function: vscode.workspace.openNotebookDocument") + return Promise.resolve(null) +} +vscode.workspace.openNotebookDocument = function (notebookType, content) { + console.log("Called stubbed function: vscode.workspace.openNotebookDocument") + return Promise.resolve(null) +} +vscode.workspace.onDidChangeNotebookDocument = createStub("vscode.workspace.onDidChangeNotebookDocument") +vscode.workspace.onWillSaveNotebookDocument = createStub("vscode.workspace.onWillSaveNotebookDocument") +vscode.workspace.onDidSaveNotebookDocument = createStub("vscode.workspace.onDidSaveNotebookDocument") +vscode.workspace.registerNotebookSerializer = function (notebookType, serializer, options) { + console.log("Called stubbed function: vscode.workspace.registerNotebookSerializer") + return createStub("unknown") +} +vscode.workspace.onDidOpenNotebookDocument = createStub("vscode.workspace.onDidOpenNotebookDocument") +vscode.workspace.onDidCloseNotebookDocument = createStub("vscode.workspace.onDidCloseNotebookDocument") +vscode.workspace.onWillCreateFiles = createStub("vscode.workspace.onWillCreateFiles") +vscode.workspace.onDidCreateFiles = createStub("vscode.workspace.onDidCreateFiles") +vscode.workspace.onWillDeleteFiles = createStub("vscode.workspace.onWillDeleteFiles") +vscode.workspace.onDidDeleteFiles = createStub("vscode.workspace.onDidDeleteFiles") +vscode.workspace.onWillRenameFiles = createStub("vscode.workspace.onWillRenameFiles") +vscode.workspace.onDidRenameFiles = createStub("vscode.workspace.onDidRenameFiles") +vscode.workspace.getConfiguration = function (section, scope) { + console.log("Called stubbed function: vscode.workspace.getConfiguration") + return createStub("unknown") +} +vscode.workspace.onDidChangeConfiguration = createStub("vscode.workspace.onDidChangeConfiguration") +vscode.workspace.registerTaskProvider = function (type, provider) { + console.log("Called stubbed function: vscode.workspace.registerTaskProvider") + return createStub("unknown") +} +vscode.workspace.registerFileSystemProvider = function (scheme, provider, options) { + console.log("Called stubbed function: vscode.workspace.registerFileSystemProvider") + return createStub("unknown") +} +vscode.workspace.isTrusted = createStub("vscode.workspace.isTrusted") +vscode.workspace.onDidGrantWorkspaceTrust = createStub("vscode.workspace.onDidGrantWorkspaceTrust") +vscode.languages = {} +vscode.languages.getLanguages = function () { + console.log("Called stubbed function: vscode.languages.getLanguages") + return "" +} +vscode.languages.setTextDocumentLanguage = function (document, languageId) { + console.log("Called stubbed function: vscode.languages.setTextDocumentLanguage") + return Promise.resolve(null) +} +vscode.languages.match = function (selector, document) { + console.log("Called stubbed function: vscode.languages.match") + return 0 +} +vscode.languages.onDidChangeDiagnostics = createStub("vscode.languages.onDidChangeDiagnostics") +vscode.languages.getDiagnostics = function (resource) { + console.log("Called stubbed function: vscode.languages.getDiagnostics") + return [] +} +vscode.languages.getDiagnostics = function () { + console.log("Called stubbed function: vscode.languages.getDiagnostics") + return [] +} +vscode.languages.createDiagnosticCollection = function (name) { + console.log("Called stubbed function: vscode.languages.createDiagnosticCollection") + return createStub("unknown") +} +vscode.languages.createLanguageStatusItem = function (id, selector) { + console.log("Called stubbed function: vscode.languages.createLanguageStatusItem") + return createStub("unknown") +} +vscode.languages.registerCompletionItemProvider = function (selector, provider, triggerCharacters) { + console.log("Called stubbed function: vscode.languages.registerCompletionItemProvider") + return createStub("unknown") +} +vscode.languages.registerInlineCompletionItemProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerInlineCompletionItemProvider") + return createStub("unknown") +} +vscode.languages.registerCodeActionsProvider = function (selector, provider, metadata) { + console.log("Called stubbed function: vscode.languages.registerCodeActionsProvider") + return createStub("unknown") +} +vscode.languages.registerCodeLensProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerCodeLensProvider") + return createStub("unknown") +} +vscode.languages.registerDefinitionProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerDefinitionProvider") + return createStub("unknown") +} +vscode.languages.registerImplementationProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerImplementationProvider") + return createStub("unknown") +} +vscode.languages.registerTypeDefinitionProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerTypeDefinitionProvider") + return createStub("unknown") +} +vscode.languages.registerDeclarationProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerDeclarationProvider") + return createStub("unknown") +} +vscode.languages.registerHoverProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerHoverProvider") + return createStub("unknown") +} +vscode.languages.registerEvaluatableExpressionProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerEvaluatableExpressionProvider") + return createStub("unknown") +} +vscode.languages.registerInlineValuesProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerInlineValuesProvider") + return createStub("unknown") +} +vscode.languages.registerDocumentHighlightProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerDocumentHighlightProvider") + return createStub("unknown") +} +vscode.languages.registerDocumentSymbolProvider = function (selector, provider, metaData) { + console.log("Called stubbed function: vscode.languages.registerDocumentSymbolProvider") + return createStub("unknown") +} +vscode.languages.registerWorkspaceSymbolProvider = function (provider) { + console.log("Called stubbed function: vscode.languages.registerWorkspaceSymbolProvider") + return createStub("unknown") +} +vscode.languages.registerReferenceProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerReferenceProvider") + return createStub("unknown") +} +vscode.languages.registerRenameProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerRenameProvider") + return createStub("unknown") +} +vscode.languages.registerDocumentSemanticTokensProvider = function (selector, provider, legend) { + console.log("Called stubbed function: vscode.languages.registerDocumentSemanticTokensProvider") + return createStub("unknown") +} +vscode.languages.registerDocumentRangeSemanticTokensProvider = function (selector, provider, legend) { + console.log("Called stubbed function: vscode.languages.registerDocumentRangeSemanticTokensProvider") + return createStub("unknown") +} +vscode.languages.registerDocumentFormattingEditProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerDocumentFormattingEditProvider") + return createStub("unknown") +} +vscode.languages.registerDocumentRangeFormattingEditProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerDocumentRangeFormattingEditProvider") + return createStub("unknown") +} +vscode.languages.registerOnTypeFormattingEditProvider = function ( + selector, + provider, + firstTriggerCharacter, + moreTriggerCharacter, +) { + console.log("Called stubbed function: vscode.languages.registerOnTypeFormattingEditProvider") + return createStub("unknown") +} +vscode.languages.registerSignatureHelpProvider = function (selector, provider, triggerCharacters) { + console.log("Called stubbed function: vscode.languages.registerSignatureHelpProvider") + return createStub("unknown") +} +vscode.languages.registerSignatureHelpProvider = function (selector, provider, metadata) { + console.log("Called stubbed function: vscode.languages.registerSignatureHelpProvider") + return createStub("unknown") +} +vscode.languages.registerDocumentLinkProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerDocumentLinkProvider") + return createStub("unknown") +} +vscode.languages.registerColorProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerColorProvider") + return createStub("unknown") +} +vscode.languages.registerInlayHintsProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerInlayHintsProvider") + return createStub("unknown") +} +vscode.languages.registerFoldingRangeProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerFoldingRangeProvider") + return createStub("unknown") +} +vscode.languages.registerSelectionRangeProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerSelectionRangeProvider") + return createStub("unknown") +} +vscode.languages.registerCallHierarchyProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerCallHierarchyProvider") + return createStub("unknown") +} +vscode.languages.registerTypeHierarchyProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerTypeHierarchyProvider") + return createStub("unknown") +} +vscode.languages.registerLinkedEditingRangeProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerLinkedEditingRangeProvider") + return createStub("unknown") +} +vscode.languages.registerDocumentDropEditProvider = function (selector, provider) { + console.log("Called stubbed function: vscode.languages.registerDocumentDropEditProvider") + return createStub("unknown") +} +vscode.languages.setLanguageConfiguration = function (language, configuration) { + console.log("Called stubbed function: vscode.languages.setLanguageConfiguration") + return createStub("unknown") +} +vscode.NotebookEditorRevealType = { Default: 0, InCenter: 0, InCenterIfOutsideViewport: 0, AtTop: 0 } +vscode.NotebookCellKind = { Markup: 0, Code: 0 } +vscode.NotebookRange = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.NotebookRange(", args, ")") + return createStub(vscode.NotebookRange) + } +} +vscode.NotebookCellOutputItem = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.NotebookCellOutputItem(", args, ")") + return createStub(vscode.NotebookCellOutputItem) + } +} +vscode.NotebookCellOutput = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.NotebookCellOutput(", args, ")") + return createStub(vscode.NotebookCellOutput) + } +} +vscode.NotebookCellData = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.NotebookCellData(", args, ")") + return createStub(vscode.NotebookCellData) + } +} +vscode.NotebookData = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.NotebookData(", args, ")") + return createStub(vscode.NotebookData) + } +} +vscode.NotebookControllerAffinity = { Default: 0, Preferred: 0 } +vscode.NotebookCellStatusBarAlignment = { Left: 0, Right: 0 } +vscode.NotebookCellStatusBarItem = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.NotebookCellStatusBarItem(", args, ")") + return createStub(vscode.NotebookCellStatusBarItem) + } +} +vscode.notebooks = {} +vscode.notebooks.createNotebookController = function (id, notebookType, label, handler) { + console.log("Called stubbed function: vscode.notebooks.createNotebookController") + return createStub("unknown") +} +vscode.notebooks.registerNotebookCellStatusBarItemProvider = function (notebookType, provider) { + console.log("Called stubbed function: vscode.notebooks.registerNotebookCellStatusBarItemProvider") + return createStub("unknown") +} +vscode.notebooks.createRendererMessaging = function (rendererId) { + console.log("Called stubbed function: vscode.notebooks.createRendererMessaging") + return createStub("unknown") +} +vscode.scm = {} +vscode.scm.inputBox = createStub("vscode.scm.inputBox") +vscode.scm.createSourceControl = function (id, label, rootUri) { + console.log("Called stubbed function: vscode.scm.createSourceControl") + return createStub("unknown") +} +vscode.DebugAdapterExecutable = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.DebugAdapterExecutable(", args, ")") + return createStub(vscode.DebugAdapterExecutable) + } +} +vscode.DebugAdapterServer = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.DebugAdapterServer(", args, ")") + return createStub(vscode.DebugAdapterServer) + } +} +vscode.DebugAdapterNamedPipeServer = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.DebugAdapterNamedPipeServer(", args, ")") + return createStub(vscode.DebugAdapterNamedPipeServer) + } +} +vscode.DebugAdapterInlineImplementation = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.DebugAdapterInlineImplementation(", args, ")") + return createStub(vscode.DebugAdapterInlineImplementation) + } +} +vscode.Breakpoint = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.Breakpoint(", args, ")") + return createStub(vscode.Breakpoint) + } +} +vscode.SourceBreakpoint = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.SourceBreakpoint(", args, ")") + return createStub(vscode.SourceBreakpoint) + } +} +vscode.FunctionBreakpoint = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.FunctionBreakpoint(", args, ")") + return createStub(vscode.FunctionBreakpoint) + } +} +vscode.DebugConsoleMode = { Separate: 0, MergeWithParent: 0 } +vscode.DebugConfigurationProviderTriggerKind = { Initial: 0, Dynamic: 0 } +vscode.debug = {} +vscode.debug.activeDebugSession = createStub("vscode.debug.activeDebugSession") +vscode.debug.activeDebugConsole = createStub("vscode.debug.activeDebugConsole") +vscode.debug.breakpoints = createStub("vscode.debug.breakpoints") +vscode.debug.onDidChangeActiveDebugSession = createStub("vscode.debug.onDidChangeActiveDebugSession") +vscode.debug.onDidStartDebugSession = createStub("vscode.debug.onDidStartDebugSession") +vscode.debug.onDidReceiveDebugSessionCustomEvent = createStub("vscode.debug.onDidReceiveDebugSessionCustomEvent") +vscode.debug.onDidTerminateDebugSession = createStub("vscode.debug.onDidTerminateDebugSession") +vscode.debug.onDidChangeBreakpoints = createStub("vscode.debug.onDidChangeBreakpoints") +vscode.debug.registerDebugConfigurationProvider = function (debugType, provider, triggerKind) { + console.log("Called stubbed function: vscode.debug.registerDebugConfigurationProvider") + return createStub("unknown") +} +vscode.debug.registerDebugAdapterDescriptorFactory = function (debugType, factory) { + console.log("Called stubbed function: vscode.debug.registerDebugAdapterDescriptorFactory") + return createStub("unknown") +} +vscode.debug.registerDebugAdapterTrackerFactory = function (debugType, factory) { + console.log("Called stubbed function: vscode.debug.registerDebugAdapterTrackerFactory") + return createStub("unknown") +} +vscode.debug.startDebugging = function (folder, nameOrConfiguration, parentSessionOrOptions) { + console.log("Called stubbed function: vscode.debug.startDebugging") + return false +} +vscode.debug.stopDebugging = function (session) { + console.log("Called stubbed function: vscode.debug.stopDebugging") +} +vscode.debug.addBreakpoints = function (breakpoints) { + console.log("Called stubbed function: vscode.debug.addBreakpoints") +} +vscode.debug.removeBreakpoints = function (breakpoints) { + console.log("Called stubbed function: vscode.debug.removeBreakpoints") +} +vscode.debug.asDebugSourceUri = function (source, session) { + console.log("Called stubbed function: vscode.debug.asDebugSourceUri") + return createStub("unknown") +} +vscode.extensions = {} +vscode.extensions.getExtension = function (extensionId) { + console.log("Called stubbed function: vscode.extensions.getExtension") + return createStub("unknown") +} +vscode.extensions.all = createStub("vscode.extensions.all") +vscode.extensions.onDidChange = createStub("vscode.extensions.onDidChange") +vscode.CommentThreadCollapsibleState = { Collapsed: 0, Expanded: 0 } +vscode.CommentMode = { Editing: 0, Preview: 0 } +vscode.CommentThreadState = { Unresolved: 0, Resolved: 0 } +vscode.comments = {} +vscode.comments.createCommentController = function (id, label) { + console.log("Called stubbed function: vscode.comments.createCommentController") + return createStub("unknown") +} +vscode.authentication = {} +vscode.authentication.getSession = function (providerId, scopes, options) { + console.log("Called stubbed function: vscode.authentication.getSession") + return Promise.resolve(null) +} +vscode.authentication.getSession = function (providerId, scopes, options) { + console.log("Called stubbed function: vscode.authentication.getSession") + return Promise.resolve(null) +} +vscode.authentication.getSession = function (providerId, scopes, options) { + console.log("Called stubbed function: vscode.authentication.getSession") + return Promise.resolve(null) +} +vscode.authentication.onDidChangeSessions = createStub("vscode.authentication.onDidChangeSessions") +vscode.authentication.registerAuthenticationProvider = function (id, label, provider, options) { + console.log("Called stubbed function: vscode.authentication.registerAuthenticationProvider") + return createStub("unknown") +} +vscode.l10n = {} +vscode.l10n.t = function (message, args) { + console.log("Called stubbed function: vscode.l10n.t") + return "" +} +vscode.l10n.t = function (message, args) { + console.log("Called stubbed function: vscode.l10n.t") + return "" +} +vscode.l10n.t = function (options) { + console.log("Called stubbed function: vscode.l10n.t") + return "" +} +vscode.l10n.bundle = createStub("vscode.l10n.bundle") +vscode.l10n.uri = createStub("vscode.l10n.uri") +vscode.tests = {} +vscode.tests.createTestController = function (id, label) { + console.log("Called stubbed function: vscode.tests.createTestController") + return createStub("unknown") +} +vscode.TestRunProfileKind = { Run: 0, Debug: 0, Coverage: 0 } +vscode.TestTag = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TestTag(", args, ")") + return createStub(vscode.TestTag) + } +} +vscode.TestRunRequest = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TestRunRequest(", args, ")") + return createStub(vscode.TestRunRequest) + } +} +vscode.TestMessage = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TestMessage(", args, ")") + return createStub(vscode.TestMessage) + } +} +vscode.TabInputText = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TabInputText(", args, ")") + return createStub(vscode.TabInputText) + } +} +vscode.TabInputTextDiff = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TabInputTextDiff(", args, ")") + return createStub(vscode.TabInputTextDiff) + } +} +vscode.TabInputCustom = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TabInputCustom(", args, ")") + return createStub(vscode.TabInputCustom) + } +} +vscode.TabInputWebview = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TabInputWebview(", args, ")") + return createStub(vscode.TabInputWebview) + } +} +vscode.TabInputNotebook = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TabInputNotebook(", args, ")") + return createStub(vscode.TabInputNotebook) + } +} +vscode.TabInputNotebookDiff = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TabInputNotebookDiff(", args, ")") + return createStub(vscode.TabInputNotebookDiff) + } +} +vscode.TabInputTerminal = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TabInputTerminal(", args, ")") + return createStub(vscode.TabInputTerminal) + } +} +vscode.TelemetryTrustedValue = class { + constructor(...args) { + console.log("Constructed stubbed class: new vscode.TelemetryTrustedValue(", args, ")") + return createStub(vscode.TelemetryTrustedValue) + } +} +module.exports = vscode +console.log("Finished loading stubs")