diff --git a/eslint.config.js b/eslint.config.js index 7a3890e8..5085967a 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -14,6 +14,7 @@ export default [ "*.min.js", "*.config.js", ".github/", + "src/schema.ts", ], }, js.configs.recommended, diff --git a/package-lock.json b/package-lock.json index 64ff41ed..4330fcd8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,49 +8,31 @@ "name": "@agentclientprotocol/sdk", "version": "0.5.1", "license": "Apache-2.0", - "dependencies": { - "zod": "^3.0.0" - }, "devDependencies": { - "@types/node": "^24.9.1", - "@typescript-eslint/eslint-plugin": "^8.46.2", - "@typescript-eslint/parser": "^8.46.2", + "@hey-api/openapi-ts": "^0.88.0", + "@types/node": "^24.10.1", + "@typescript-eslint/eslint-plugin": "^8.48.0", + "@typescript-eslint/parser": "^8.48.0", "concurrently": "^9.2.1", - "eslint": "^9.38.0", + "eslint": "^9.39.1", "eslint-config-prettier": "^10.1.8", "http-server": "^14.1.1", - "json-schema-to-typescript": "^15.0.4", - "prettier": "^3.6.2", - "ts-to-zod": "^3.15.0", + "prettier": "^3.7.1", "tsx": "^4.20.6", "typedoc": "^0.28.14", "typedoc-github-theme": "^0.3.1", "typescript": "^5.9.3", - "vitest": "^4.0.2" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "11.9.3", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.9.3.tgz", - "integrity": "sha512-60vepv88RwcJtSHrD6MjIL6Ta3SOYbgfnkHb+ppAVK+o9mXprRtulx7VlRl3lN3bbvysAfCS7WMVfhUYemB0IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.15", - "js-yaml": "^4.1.0" - }, - "engines": { - "node": ">= 16" + "vitest": "^4.0.14", + "zod": "^3.25.0 || ^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/philsturgeon" + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz", - "integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", "cpu": [ "ppc64" ], @@ -65,9 +47,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.11.tgz", - "integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", "cpu": [ "arm" ], @@ -82,9 +64,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz", - "integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", "cpu": [ "arm64" ], @@ -99,9 +81,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.11.tgz", - "integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", "cpu": [ "x64" ], @@ -116,9 +98,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz", - "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", "cpu": [ "arm64" ], @@ -133,9 +115,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz", - "integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", "cpu": [ "x64" ], @@ -150,9 +132,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz", - "integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", "cpu": [ "arm64" ], @@ -167,9 +149,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz", - "integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", "cpu": [ "x64" ], @@ -184,9 +166,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz", - "integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", "cpu": [ "arm" ], @@ -201,9 +183,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz", - "integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", "cpu": [ "arm64" ], @@ -218,9 +200,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz", - "integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", "cpu": [ "ia32" ], @@ -235,9 +217,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz", - "integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", "cpu": [ "loong64" ], @@ -252,9 +234,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz", - "integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", "cpu": [ "mips64el" ], @@ -269,9 +251,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz", - "integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", "cpu": [ "ppc64" ], @@ -286,9 +268,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz", - "integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", "cpu": [ "riscv64" ], @@ -303,9 +285,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz", - "integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", "cpu": [ "s390x" ], @@ -320,9 +302,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz", - "integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", "cpu": [ "x64" ], @@ -337,9 +319,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz", - "integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", "cpu": [ "arm64" ], @@ -354,9 +336,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz", - "integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", "cpu": [ "x64" ], @@ -371,9 +353,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz", - "integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", "cpu": [ "arm64" ], @@ -388,9 +370,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz", - "integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", "cpu": [ "x64" ], @@ -405,9 +387,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz", - "integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", "cpu": [ "arm64" ], @@ -422,9 +404,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz", - "integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", "cpu": [ "x64" ], @@ -439,9 +421,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz", - "integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", "cpu": [ "arm64" ], @@ -456,9 +438,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz", - "integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", "cpu": [ "ia32" ], @@ -473,9 +455,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz", - "integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", "cpu": [ "x64" ], @@ -558,22 +540,22 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.1.tgz", - "integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.16.0" + "@eslint/core": "^0.17.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", - "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -642,9 +624,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.38.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz", - "integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==", + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", + "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", "dev": true, "license": "MIT", "engines": { @@ -665,13 +647,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", - "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.16.0", + "@eslint/core": "^0.17.0", "levn": "^0.4.1" }, "engines": { @@ -679,19 +661,83 @@ } }, "node_modules/@gerrit0/mini-shiki": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.13.1.tgz", - "integrity": "sha512-fDWM5QQc70jwBIt/WYMybdyXdyBmoJe7r1hpM+V/bHnyla79sygVDK2/LlVxIPc4n5FA3B5Wzt7AQH2+psNphg==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.17.0.tgz", + "integrity": "sha512-Bpf6WuFar20ZXL6qU6VpVl4bVQfyyYiX+6O4xrns4nkU3Mr8paeupDbS1HENpcLOYj7pN4Rkd/yCaPA0vQwKww==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/engine-oniguruma": "^3.13.0", - "@shikijs/langs": "^3.13.0", - "@shikijs/themes": "^3.13.0", - "@shikijs/types": "^3.13.0", + "@shikijs/engine-oniguruma": "^3.17.0", + "@shikijs/langs": "^3.17.0", + "@shikijs/themes": "^3.17.0", + "@shikijs/types": "^3.17.0", "@shikijs/vscode-textmate": "^10.0.2" } }, + "node_modules/@hey-api/codegen-core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@hey-api/codegen-core/-/codegen-core-0.3.3.tgz", + "integrity": "sha512-vArVDtrvdzFewu1hnjUm4jX1NBITlSCeO81EdWq676MxQbyxsGcDPAgohaSA+Wvr4HjPSvsg2/1s2zYxUtXebg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/hey-api" + }, + "peerDependencies": { + "typescript": ">=5.5.3" + } + }, + "node_modules/@hey-api/json-schema-ref-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@hey-api/json-schema-ref-parser/-/json-schema-ref-parser-1.2.1.tgz", + "integrity": "sha512-inPeksRLq+j3ArnuGOzQPQE//YrhezQG0+9Y9yizScBN2qatJ78fIByhEgKdNAbtguDCn4RPxmEhcrePwHxs4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.15", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/hey-api" + } + }, + "node_modules/@hey-api/openapi-ts": { + "version": "0.88.0", + "resolved": "https://registry.npmjs.org/@hey-api/openapi-ts/-/openapi-ts-0.88.0.tgz", + "integrity": "sha512-ZrvmDfmVf+N4ry786LAhS/DoH+xkIjIJIeDnj2aL1qnMTIDsdRIXXvr80EnAZVBgunzu1wTBbHb3H9OfyDQ2EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@hey-api/codegen-core": "^0.3.3", + "@hey-api/json-schema-ref-parser": "1.2.1", + "ansi-colors": "4.1.3", + "c12": "3.3.2", + "color-support": "1.1.3", + "commander": "14.0.2", + "open": "11.0.0", + "semver": "7.7.2" + }, + "bin": { + "openapi-ts": "bin/run.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/hey-api" + }, + "peerDependencies": { + "typescript": ">=5.5.3" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -744,28 +790,6 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@inquirer/external-editor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", - "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^2.1.0", - "iconv-lite": "^0.7.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", @@ -780,78 +804,10 @@ "dev": true, "license": "MIT" }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@oclif/core": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.7.2.tgz", - "integrity": "sha512-AmZnhEnyD7bFxmzEKRaOEr0kzonmwIip72eWZPWB5+7D9ayHa/QFX08zhaQT9eOo0//ed64v5p5QZIbYCbQaJQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.2", - "ansis": "^3.17.0", - "clean-stack": "^3.0.1", - "cli-spinners": "^2.9.2", - "debug": "^4.4.3", - "ejs": "^3.1.10", - "get-package-type": "^0.1.0", - "indent-string": "^4.0.0", - "is-wsl": "^2.2.0", - "lilconfig": "^3.1.3", - "minimatch": "^9.0.5", - "semver": "^7.7.3", - "string-width": "^4.2.3", - "supports-color": "^8", - "tinyglobby": "^0.2.14", - "widest-line": "^3.1.0", - "wordwrap": "^1.0.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", - "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz", + "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==", "cpu": [ "arm" ], @@ -863,9 +819,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", - "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz", + "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==", "cpu": [ "arm64" ], @@ -877,9 +833,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", - "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz", + "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==", "cpu": [ "arm64" ], @@ -891,9 +847,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", - "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz", + "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==", "cpu": [ "x64" ], @@ -905,9 +861,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", - "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz", + "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==", "cpu": [ "arm64" ], @@ -919,9 +875,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", - "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz", + "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==", "cpu": [ "x64" ], @@ -933,9 +889,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", - "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz", + "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==", "cpu": [ "arm" ], @@ -947,9 +903,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", - "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz", + "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==", "cpu": [ "arm" ], @@ -961,9 +917,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", - "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz", + "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==", "cpu": [ "arm64" ], @@ -975,9 +931,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", - "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz", + "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==", "cpu": [ "arm64" ], @@ -989,9 +945,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", - "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz", + "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==", "cpu": [ "loong64" ], @@ -1003,9 +959,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", - "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz", + "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==", "cpu": [ "ppc64" ], @@ -1017,9 +973,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", - "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz", + "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==", "cpu": [ "riscv64" ], @@ -1031,9 +987,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", - "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz", + "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==", "cpu": [ "riscv64" ], @@ -1045,9 +1001,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", - "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz", + "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==", "cpu": [ "s390x" ], @@ -1059,9 +1015,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", - "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz", + "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==", "cpu": [ "x64" ], @@ -1073,9 +1029,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", - "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz", + "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==", "cpu": [ "x64" ], @@ -1087,9 +1043,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", - "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz", + "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==", "cpu": [ "arm64" ], @@ -1101,9 +1057,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", - "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz", + "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==", "cpu": [ "arm64" ], @@ -1115,9 +1071,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", - "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz", + "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==", "cpu": [ "ia32" ], @@ -1129,9 +1085,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", - "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz", + "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==", "cpu": [ "x64" ], @@ -1143,9 +1099,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", - "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz", + "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==", "cpu": [ "x64" ], @@ -1157,40 +1113,40 @@ ] }, "node_modules/@shikijs/engine-oniguruma": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.13.0.tgz", - "integrity": "sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.17.0.tgz", + "integrity": "sha512-flSbHZAiOZDNTrEbULY8DLWavu/TyVu/E7RChpLB4WvKX4iHMfj80C6Hi3TjIWaQtHOW0KC6kzMcuB5TO1hZ8Q==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.13.0", + "@shikijs/types": "3.17.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "node_modules/@shikijs/langs": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.13.0.tgz", - "integrity": "sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.17.0.tgz", + "integrity": "sha512-icmur2n5Ojb+HAiQu6NEcIIJ8oWDFGGEpiqSCe43539Sabpx7Y829WR3QuUW2zjTM4l6V8Sazgb3rrHO2orEAw==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.13.0" + "@shikijs/types": "3.17.0" } }, "node_modules/@shikijs/themes": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.13.0.tgz", - "integrity": "sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.17.0.tgz", + "integrity": "sha512-/xEizMHLBmMHwtx4JuOkRf3zwhWD2bmG5BRr0IPjpcWpaq4C3mYEuTk/USAEglN0qPrTwEHwKVpSu/y2jhferA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.13.0" + "@shikijs/types": "3.17.0" } }, "node_modules/@shikijs/types": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.13.0.tgz", - "integrity": "sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.17.0.tgz", + "integrity": "sha512-wjLVfutYWVUnxAjsWEob98xgyaGv0dTEnMZDruU5mRjVN7szcGOfgO+997W2yR6odp+1PtSBNeSITRRTfUzK/g==", "dev": true, "license": "MIT", "dependencies": { @@ -1254,19 +1210,13 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/node": { - "version": "24.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.1.tgz", - "integrity": "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==", + "version": "24.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", + "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -1279,17 +1229,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.2.tgz", - "integrity": "sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.48.0.tgz", + "integrity": "sha512-XxXP5tL1txl13YFtrECECQYeZjBZad4fyd3cFV4a19LkAY/bIp9fev3US4S5fDVV2JaYFiKAZ/GRTOLer+mbyQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.46.2", - "@typescript-eslint/type-utils": "8.46.2", - "@typescript-eslint/utils": "8.46.2", - "@typescript-eslint/visitor-keys": "8.46.2", + "@typescript-eslint/scope-manager": "8.48.0", + "@typescript-eslint/type-utils": "8.48.0", + "@typescript-eslint/utils": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -1303,22 +1253,23 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.46.2", + "@typescript-eslint/parser": "^8.48.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz", - "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.48.0.tgz", + "integrity": "sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.46.2", - "@typescript-eslint/types": "8.46.2", - "@typescript-eslint/typescript-estree": "8.46.2", - "@typescript-eslint/visitor-keys": "8.46.2", + "@typescript-eslint/scope-manager": "8.48.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0", "debug": "^4.3.4" }, "engines": { @@ -1334,14 +1285,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.2.tgz", - "integrity": "sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.48.0.tgz", + "integrity": "sha512-Ne4CTZyRh1BecBf84siv42wv5vQvVmgtk8AuiEffKTUo3DrBaGYZueJSxxBZ8fjk/N3DrgChH4TOdIOwOwiqqw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.2", - "@typescript-eslint/types": "^8.46.2", + "@typescript-eslint/tsconfig-utils": "^8.48.0", + "@typescript-eslint/types": "^8.48.0", "debug": "^4.3.4" }, "engines": { @@ -1356,14 +1307,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz", - "integrity": "sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.48.0.tgz", + "integrity": "sha512-uGSSsbrtJrLduti0Q1Q9+BF1/iFKaxGoQwjWOIVNJv0o6omrdyR8ct37m4xIl5Zzpkp69Kkmvom7QFTtue89YQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.2", - "@typescript-eslint/visitor-keys": "8.46.2" + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1374,9 +1325,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz", - "integrity": "sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.0.tgz", + "integrity": "sha512-WNebjBdFdyu10sR1M4OXTt2OkMd5KWIL+LLfeH9KhgP+jzfDV/LI3eXzwJ1s9+Yc0Kzo2fQCdY/OpdusCMmh6w==", "dev": true, "license": "MIT", "engines": { @@ -1391,15 +1342,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.2.tgz", - "integrity": "sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.48.0.tgz", + "integrity": "sha512-zbeVaVqeXhhab6QNEKfK96Xyc7UQuoFWERhEnj3mLVnUWrQnv15cJNseUni7f3g557gm0e46LZ6IJ4NJVOgOpw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.2", - "@typescript-eslint/typescript-estree": "8.46.2", - "@typescript-eslint/utils": "8.46.2", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0", + "@typescript-eslint/utils": "8.48.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -1416,9 +1367,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.2.tgz", - "integrity": "sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.48.0.tgz", + "integrity": "sha512-cQMcGQQH7kwKoVswD1xdOytxQR60MWKM1di26xSUtxehaDs/32Zpqsu5WJlXTtTTqyAVK8R7hvsUnIXRS+bjvA==", "dev": true, "license": "MIT", "engines": { @@ -1430,21 +1381,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz", - "integrity": "sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.0.tgz", + "integrity": "sha512-ljHab1CSO4rGrQIAyizUS6UGHHCiAYhbfcIZ1zVJr5nMryxlXMVWS3duFPSKvSUbFPwkXMFk1k0EMIjub4sRRQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.46.2", - "@typescript-eslint/tsconfig-utils": "8.46.2", - "@typescript-eslint/types": "8.46.2", - "@typescript-eslint/visitor-keys": "8.46.2", + "@typescript-eslint/project-service": "8.48.0", + "@typescript-eslint/tsconfig-utils": "8.48.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0", "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", + "tinyglobby": "^0.2.15", "ts-api-utils": "^2.1.0" }, "engines": { @@ -1459,16 +1409,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.2.tgz", - "integrity": "sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.48.0.tgz", + "integrity": "sha512-yTJO1XuGxCsSfIVt1+1UrLHtue8xz16V8apzPYI06W0HbEbEWHxHXgZaAgavIkoh+GeV6hKKd5jm0sS6OYxWXQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.2", - "@typescript-eslint/types": "8.46.2", - "@typescript-eslint/typescript-estree": "8.46.2" + "@typescript-eslint/scope-manager": "8.48.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1483,13 +1433,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz", - "integrity": "sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.0.tgz", + "integrity": "sha512-T0XJMaRPOH3+LBbAfzR2jalckP1MSG/L9eUtY0DEzUyVaXJ/t6zN0nR7co5kz0Jko/nkSYCBRkz1djvjajVTTg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/types": "8.48.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -1513,31 +1463,18 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@typescript/vfs": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.6.1.tgz", - "integrity": "sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1" - }, - "peerDependencies": { - "typescript": "*" - } - }, "node_modules/@vitest/expect": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.2.tgz", - "integrity": "sha512-izQY+ABWqL2Vyr5+LNo3m16nLLTAzLn8em6i5uxqsrWRhdgzdN5JIHrpFVGBAYRGDAbtwE+yD4Heu8gsBSWTVQ==", + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.14.tgz", + "integrity": "sha512-RHk63V3zvRiYOWAV0rGEBRO820ce17hz7cI2kDmEdfQsBjT2luEKB5tCOc91u1oSQoUOZkSv3ZyzkdkSLD7lKw==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.0.2", - "@vitest/utils": "4.0.2", - "chai": "^6.0.1", + "@vitest/spy": "4.0.14", + "@vitest/utils": "4.0.14", + "chai": "^6.2.1", "tinyrainbow": "^3.0.3" }, "funding": { @@ -1545,15 +1482,15 @@ } }, "node_modules/@vitest/mocker": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.2.tgz", - "integrity": "sha512-oiny+oBSGU9vHMA1DPdO+t1GVidCRuA4lKSG6rbo5SrCiTCGl7bTCyTaUkwxDpUkiSxEVneeXW4LJ4fg3H56dw==", + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.14.tgz", + "integrity": "sha512-RzS5NujlCzeRPF1MK7MXLiEFpkIXeMdQ+rN3Kk3tDI9j0mtbr7Nmuq67tpkOJQpgyClbOltCXMjLZicJHsH5Cg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.0.2", + "@vitest/spy": "4.0.14", "estree-walker": "^3.0.3", - "magic-string": "^0.30.19" + "magic-string": "^0.30.21" }, "funding": { "url": "https://opencollective.com/vitest" @@ -1572,9 +1509,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.2.tgz", - "integrity": "sha512-PhrSiljryCz5nUDhHla5ihXYy2iRCBob+rNqlu34dA+KZIllVR39rUGny5R3kLgDgw3r8GW1ptOo64WbieMkeQ==", + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.14.tgz", + "integrity": "sha512-SOYPgujB6TITcJxgd3wmsLl+wZv+fy3av2PpiPpsWPZ6J1ySUYfScfpIt2Yv56ShJXR2MOA6q2KjKHN4EpdyRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1585,13 +1522,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.2.tgz", - "integrity": "sha512-mPS5T/ZDuO6J5rsQiA76CFmlHtos7dnCvL14I1Oo8SbcjIhJd6kirFmekovfYLRygdF0gJe6SA5asCKIWKw1tw==", + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.14.tgz", + "integrity": "sha512-BsAIk3FAqxICqREbX8SetIteT8PiaUL/tgJjmhxJhCsigmzzH8xeadtp7LRnTpCVzvf0ib9BgAfKJHuhNllKLw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.0.2", + "@vitest/utils": "4.0.14", "pathe": "^2.0.3" }, "funding": { @@ -1599,14 +1536,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.2.tgz", - "integrity": "sha512-NibujZAh+fTQlpGdP8J2pZcsPg7EPjiLUOUq9In++4p35vc9xIFMkXfQDbBSpijqZPe6i2hEKrUCbKu70/sPzw==", + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.14.tgz", + "integrity": "sha512-aQVBfT1PMzDSA16Y3Fp45a0q8nKexx6N5Amw3MX55BeTeZpoC08fGqEZqVmPcqN0ueZsuUQ9rriPMhZ3Mu19Ag==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.2", - "magic-string": "^0.30.19", + "@vitest/pretty-format": "4.0.14", + "magic-string": "^0.30.21", "pathe": "^2.0.3" }, "funding": { @@ -1614,9 +1551,9 @@ } }, "node_modules/@vitest/spy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.2.tgz", - "integrity": "sha512-KrTWRXFPYrbhD0iUXeoA8BMXl81nvemj5D8sc7NbTlRvCeUWo36JheOWtAUCafcNi0G72ycAdsvWQVSOxy/3TA==", + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.14.tgz", + "integrity": "sha512-JmAZT1UtZooO0tpY3GRyiC/8W7dCs05UOq9rfsUUgEZEdq+DuHLmWhPsrTt0TiW7WYeL/hXpaE07AZ2RCk44hg==", "dev": true, "license": "MIT", "funding": { @@ -1624,13 +1561,13 @@ } }, "node_modules/@vitest/utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.2.tgz", - "integrity": "sha512-H9jFzZb/5B5Qh7ajPUWMJ8UYGxQ4EQTaNLSm3icXs/oXkzQ1jqfcWDEJ4U3LkFPZOd6QW8M2MYjz32poW+KKqg==", + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.14.tgz", + "integrity": "sha512-hLqXZKAWNg8pI+SQXyXxWCTOpA3MvsqcbVeNgSi8x/CSN2wi26dSzn1wrOhmCmFjEvN9p8/kLFRHa6PI8jHazw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.2", + "@vitest/pretty-format": "4.0.14", "tinyrainbow": "^3.0.3" }, "funding": { @@ -1643,6 +1580,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1677,20 +1615,14 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/ansi-regex": { @@ -1719,30 +1651,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ansis": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", - "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1774,27 +1682,6 @@ "dev": true, "license": "MIT" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "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/basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -1808,31 +1695,6 @@ "node": ">= 0.8" } }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -1843,42 +1705,49 @@ "balanced-match": "^1.0.0" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "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==", "dev": true, "license": "MIT", "dependencies": { - "fill-range": "^7.1.1" + "run-applescript": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/c12": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.2.tgz", + "integrity": "sha512-QkikB2X5voO1okL3QsES0N690Sn/K9WokXqUsDQsWy5SnYb+psYQFGA10iy1bZHj3fjISKsI67Q90gruvWWM3A==", "dev": true, - "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", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "chokidar": "^4.0.3", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^17.2.3", + "exsolve": "^1.0.8", + "giget": "^2.0.0", + "jiti": "^2.6.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.0.0", + "pkg-types": "^2.3.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "*" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } } }, "node_modules/call-bind-apply-helpers": { @@ -1922,20 +1791,10 @@ "node": ">=6" } }, - "node_modules/case": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", - "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==", - "dev": true, - "license": "(MIT OR GPL-3.0-or-later)", - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/chai": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.0.tgz", - "integrity": "sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.1.tgz", + "integrity": "sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==", "dev": true, "license": "MIT", "engines": { @@ -1972,148 +1831,87 @@ "node": ">=8" } }, - "node_modules/chardet": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", - "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", - "dev": true, - "license": "MIT" - }, "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 14.16.0" }, "funding": { "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "consola": "^3.2.3" } }, - "node_modules/clean-stack": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", - "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", + "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==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "escape-string-regexp": "4.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "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==", "dev": true, "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "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==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, "license": "ISC", - "engines": { - "node": ">= 10" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" + "bin": { + "color-support": "bin.js" } }, - "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==", + "node_modules/commander": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", + "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=20" } }, - "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==", - "dev": true, - "license": "MIT" - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2146,6 +1944,23 @@ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/corser": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", @@ -2196,19 +2011,76 @@ "dev": true, "license": "MIT" }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "node_modules/default-browser": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", + "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", "dev": true, "license": "MIT", "dependencies": { - "clone": "^1.0.2" + "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.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "dev": true, + "license": "MIT" + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dotenv": { + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -2224,22 +2096,6 @@ "node": ">= 0.4" } }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -2301,9 +2157,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz", - "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -2314,32 +2170,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.11", - "@esbuild/android-arm": "0.25.11", - "@esbuild/android-arm64": "0.25.11", - "@esbuild/android-x64": "0.25.11", - "@esbuild/darwin-arm64": "0.25.11", - "@esbuild/darwin-x64": "0.25.11", - "@esbuild/freebsd-arm64": "0.25.11", - "@esbuild/freebsd-x64": "0.25.11", - "@esbuild/linux-arm": "0.25.11", - "@esbuild/linux-arm64": "0.25.11", - "@esbuild/linux-ia32": "0.25.11", - "@esbuild/linux-loong64": "0.25.11", - "@esbuild/linux-mips64el": "0.25.11", - "@esbuild/linux-ppc64": "0.25.11", - "@esbuild/linux-riscv64": "0.25.11", - "@esbuild/linux-s390x": "0.25.11", - "@esbuild/linux-x64": "0.25.11", - "@esbuild/netbsd-arm64": "0.25.11", - "@esbuild/netbsd-x64": "0.25.11", - "@esbuild/openbsd-arm64": "0.25.11", - "@esbuild/openbsd-x64": "0.25.11", - "@esbuild/openharmony-arm64": "0.25.11", - "@esbuild/sunos-x64": "0.25.11", - "@esbuild/win32-arm64": "0.25.11", - "@esbuild/win32-ia32": "0.25.11", - "@esbuild/win32-x64": "0.25.11" + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" } }, "node_modules/escalade": { @@ -2366,20 +2222,21 @@ } }, "node_modules/eslint": { - "version": "9.38.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz", - "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", + "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.1", - "@eslint/core": "^0.16.0", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.38.0", - "@eslint/plugin-kit": "^0.4.0", + "@eslint/js": "9.39.1", + "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -2518,17 +2375,6 @@ "node": "*" } }, - "node_modules/esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", @@ -2633,6 +2479,13 @@ "node": ">=12.0.0" } }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "dev": true, + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2640,36 +2493,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -2684,40 +2507,22 @@ "dev": true, "license": "MIT" }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, "engines": { - "node": ">=8" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, "node_modules/file-entry-cache": { @@ -2733,42 +2538,6 @@ "node": ">=16.0.0" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -2828,21 +2597,6 @@ } } }, - "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -2903,16 +2657,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", @@ -2940,6 +2684,24 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -2979,13 +2741,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -3096,9 +2851,9 @@ } }, "node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "license": "MIT", "dependencies": { @@ -3106,33 +2861,8 @@ }, "engines": { "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "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": "BSD-3-Clause" - }, "node_modules/ignore": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", @@ -3170,89 +2900,17 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/inquirer": { - "version": "8.2.7", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", - "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/external-editor": "^1.0.0", - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/inquirer/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "dev": true, "license": "MIT", "bin": { "is-docker": "cli.js" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3291,63 +2949,52 @@ "node": ">=0.10.0" } }, - "node_modules/is-interactive": { + "node_modules/is-in-ssh": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-observable": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-2.1.0.tgz", - "integrity": "sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "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==", "dev": true, "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "dev": true, "license": "MIT", "dependencies": { - "is-docker": "^2.0.0" + "is-inside-container": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/isexe": { @@ -3357,22 +3004,14 @@ "dev": true, "license": "ISC" }, - "node_modules/jake": { - "version": "10.9.4", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", - "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.6", - "filelist": "^1.0.4", - "picocolors": "^1.1.1" - }, + "license": "MIT", "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" + "jiti": "lib/jiti-cli.mjs" } }, "node_modules/js-yaml": { @@ -3395,30 +3034,6 @@ "dev": true, "license": "MIT" }, - "node_modules/json-schema-to-typescript": { - "version": "15.0.4", - "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-15.0.4.tgz", - "integrity": "sha512-Su9oK8DR4xCmDsLlyvadkXzX6+GGXJpbhwoLtOGArAG61dvbW4YQmSEno2y66ahpIdmLMg6YUf/QHLgiwvkrHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@apidevtools/json-schema-ref-parser": "^11.5.5", - "@types/json-schema": "^7.0.15", - "@types/lodash": "^4.17.7", - "is-glob": "^4.0.3", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "minimist": "^1.2.8", - "prettier": "^3.2.5", - "tinyglobby": "^0.2.9" - }, - "bin": { - "json2ts": "dist/src/cli.js" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -3433,19 +3048,6 @@ "dev": true, "license": "MIT" }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -3470,19 +3072,6 @@ "node": ">= 0.8.0" } }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, "node_modules/linkify-it": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", @@ -3523,23 +3112,6 @@ "dev": true, "license": "MIT" }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lunr": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", @@ -3548,9 +3120,9 @@ "license": "MIT" }, "node_modules/magic-string": { - "version": "0.30.19", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", - "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3592,30 +3164,6 @@ "dev": true, "license": "MIT" }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -3629,16 +3177,6 @@ "node": ">=4" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -3672,13 +3210,6 @@ "dev": true, "license": "MIT" }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true, - "license": "ISC" - }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -3705,14 +3236,31 @@ "dev": true, "license": "MIT" }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/nypm": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.2.tgz", + "integrity": "sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==", "dev": true, "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.2", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "tinyexec": "^1.0.1" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.16.0 || >=16.10.0" } }, "node_modules/object-inspect": { @@ -3728,24 +3276,40 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/observable-fns": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/observable-fns/-/observable-fns-0.6.1.tgz", - "integrity": "sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg==", + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], "license": "MIT" }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/open": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz", + "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==", "dev": true, "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "default-browser": "^5.4.0", + "define-lazy-prop": "^3.0.0", + "is-in-ssh": "^1.0.0", + "is-inside-container": "^1.0.0", + "powershell-utils": "^0.1.0", + "wsl-utils": "^0.3.0" }, "engines": { - "node": ">=6" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3779,30 +3343,6 @@ "node": ">= 0.8.0" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -3875,6 +3415,13 @@ "dev": true, "license": "MIT" }, + "node_modules/perfect-debounce": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.0.0.tgz", + "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==", + "dev": true, + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -3883,18 +3430,31 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, "node_modules/portfinder": { "version": "1.0.38", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.38.tgz", @@ -3938,6 +3498,19 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3949,9 +3522,9 @@ } }, "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.1.tgz", + "integrity": "sha512-RWKXE4qB3u5Z6yz7omJkjWwmTfLdcbv44jUVHC5NpfXwFGzvpQM798FGv/6WNK879tc+Cn0AAyherCl1KjbyZQ==", "dev": true, "license": "MIT", "bin": { @@ -4000,53 +3573,29 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "defu": "^6.1.4", + "destr": "^2.0.3" } }, "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, "engines": { - "node": ">=8.10.0" + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/require-directory": { @@ -4086,35 +3635,10 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, "node_modules/rollup": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", - "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz", + "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", "dev": true, "license": "MIT", "dependencies": { @@ -4128,63 +3652,42 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.52.5", - "@rollup/rollup-android-arm64": "4.52.5", - "@rollup/rollup-darwin-arm64": "4.52.5", - "@rollup/rollup-darwin-x64": "4.52.5", - "@rollup/rollup-freebsd-arm64": "4.52.5", - "@rollup/rollup-freebsd-x64": "4.52.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", - "@rollup/rollup-linux-arm-musleabihf": "4.52.5", - "@rollup/rollup-linux-arm64-gnu": "4.52.5", - "@rollup/rollup-linux-arm64-musl": "4.52.5", - "@rollup/rollup-linux-loong64-gnu": "4.52.5", - "@rollup/rollup-linux-ppc64-gnu": "4.52.5", - "@rollup/rollup-linux-riscv64-gnu": "4.52.5", - "@rollup/rollup-linux-riscv64-musl": "4.52.5", - "@rollup/rollup-linux-s390x-gnu": "4.52.5", - "@rollup/rollup-linux-x64-gnu": "4.52.5", - "@rollup/rollup-linux-x64-musl": "4.52.5", - "@rollup/rollup-openharmony-arm64": "4.52.5", - "@rollup/rollup-win32-arm64-msvc": "4.52.5", - "@rollup/rollup-win32-ia32-msvc": "4.52.5", - "@rollup/rollup-win32-x64-gnu": "4.52.5", - "@rollup/rollup-win32-x64-msvc": "4.52.5", + "@rollup/rollup-android-arm-eabi": "4.53.3", + "@rollup/rollup-android-arm64": "4.53.3", + "@rollup/rollup-darwin-arm64": "4.53.3", + "@rollup/rollup-darwin-x64": "4.53.3", + "@rollup/rollup-freebsd-arm64": "4.53.3", + "@rollup/rollup-freebsd-x64": "4.53.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.3", + "@rollup/rollup-linux-arm-musleabihf": "4.53.3", + "@rollup/rollup-linux-arm64-gnu": "4.53.3", + "@rollup/rollup-linux-arm64-musl": "4.53.3", + "@rollup/rollup-linux-loong64-gnu": "4.53.3", + "@rollup/rollup-linux-ppc64-gnu": "4.53.3", + "@rollup/rollup-linux-riscv64-gnu": "4.53.3", + "@rollup/rollup-linux-riscv64-musl": "4.53.3", + "@rollup/rollup-linux-s390x-gnu": "4.53.3", + "@rollup/rollup-linux-x64-gnu": "4.53.3", + "@rollup/rollup-linux-x64-musl": "4.53.3", + "@rollup/rollup-openharmony-arm64": "4.53.3", + "@rollup/rollup-win32-arm64-msvc": "4.53.3", + "@rollup/rollup-win32-ia32-msvc": "4.53.3", + "@rollup/rollup-win32-x64-gnu": "4.53.3", + "@rollup/rollup-win32-x64-msvc": "4.53.3", "fsevents": "~2.3.2" } }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/rxjs": { @@ -4219,9 +3722,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", "bin": { @@ -4350,23 +3853,6 @@ "dev": true, "license": "ISC" }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -4391,37 +3877,6 @@ "dev": true, "license": "MIT" }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/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==", - "dev": true, - "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/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -4479,43 +3934,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/threads": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/threads/-/threads-1.7.0.tgz", - "integrity": "sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.1.0", - "debug": "^4.2.0", - "is-observable": "^2.1.0", - "observable-fns": "^0.6.1" - }, - "funding": { - "url": "https://github.com/andywer/threads.js?sponsor=1" - }, - "optionalDependencies": { - "tiny-worker": ">= 2" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tiny-worker": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tiny-worker/-/tiny-worker-2.3.0.tgz", - "integrity": "sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "esm": "^3.2.25" - } - }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", @@ -4524,11 +3942,14 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/tinyglobby": { "version": "0.2.15", @@ -4547,37 +3968,6 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/tinyrainbow": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz", @@ -4588,19 +3978,6 @@ "node": ">=14.0.0" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -4624,50 +4001,6 @@ "typescript": ">=4.8.4" } }, - "node_modules/ts-to-zod": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/ts-to-zod/-/ts-to-zod-3.15.0.tgz", - "integrity": "sha512-Lu5ITqD8xCIo4JZp4Cg3iSK3J2x3TGwwuDtNHfAIlx1mXWKClRdzqV+x6CFEzhKtJlZzhyvJIqg7DzrWfsdVSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@oclif/core": ">=3.26.0", - "@typescript/vfs": "^1.5.0", - "case": "^1.6.3", - "chokidar": "^3.5.1", - "fs-extra": "^11.1.1", - "inquirer": "^8.2.0", - "lodash": "^4.17.21", - "ora": "^5.4.0", - "prettier": "3.0.3", - "rxjs": "^7.4.0", - "slash": "^3.0.0", - "threads": "^1.7.0", - "tslib": "^2.3.1", - "tsutils": "^3.21.0", - "typescript": "^5.2.2", - "zod": "^3.23.8" - }, - "bin": { - "ts-to-zod": "bin/run" - } - }, - "node_modules/ts-to-zod/node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -4675,35 +4008,13 @@ "dev": true, "license": "0BSD" }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, "node_modules/tsx": { "version": "4.20.6", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" @@ -4731,25 +4042,13 @@ "node": ">= 0.8.0" } }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/typedoc": { "version": "0.28.14", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.14.tgz", "integrity": "sha512-ftJYPvpVfQvFzpkoSfHLkJybdA/geDJ8BGQt/ZnkkhnBYoYW6lBgPQXu6vqLxO4X75dA55hX8Af847H5KXlEFA==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@gerrit0/mini-shiki": "^3.12.0", "lunr": "^2.3.9", @@ -4787,6 +4086,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4821,16 +4121,6 @@ "node": ">= 0.8.0" } }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -4848,19 +4138,13 @@ "dev": true, "license": "MIT" }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, "node_modules/vite": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz", - "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.4.tgz", + "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -4930,58 +4214,27 @@ } } }, - "node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/vitest": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.2.tgz", - "integrity": "sha512-SXrA2ZzOPulX479d8W13RqKSmvHb9Bfg71eW7Fbs6ZjUFcCCXyt/OzFCkNyiUE8mFlPHa4ZVUGw0ky+5ndKnrg==", + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.14.tgz", + "integrity": "sha512-d9B2J9Cm9dN9+6nxMnnNJKJCtcyKfnHj15N6YNJfaFHRLua/d3sRKU9RuKmO9mB0XdFtUizlxfz/VPbd3OxGhw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.0.2", - "@vitest/mocker": "4.0.2", - "@vitest/pretty-format": "4.0.2", - "@vitest/runner": "4.0.2", - "@vitest/snapshot": "4.0.2", - "@vitest/spy": "4.0.2", - "@vitest/utils": "4.0.2", - "debug": "^4.4.3", + "@vitest/expect": "4.0.14", + "@vitest/mocker": "4.0.14", + "@vitest/pretty-format": "4.0.14", + "@vitest/runner": "4.0.14", + "@vitest/snapshot": "4.0.14", + "@vitest/spy": "4.0.14", + "@vitest/utils": "4.0.14", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", - "magic-string": "^0.30.19", + "magic-string": "^0.30.21", + "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", - "std-env": "^3.9.0", + "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.15", @@ -5000,12 +4253,12 @@ }, "peerDependencies": { "@edge-runtime/vm": "*", - "@types/debug": "^4.1.12", + "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.0.2", - "@vitest/browser-preview": "4.0.2", - "@vitest/browser-webdriverio": "4.0.2", - "@vitest/ui": "4.0.2", + "@vitest/browser-playwright": "4.0.14", + "@vitest/browser-preview": "4.0.14", + "@vitest/browser-webdriverio": "4.0.14", + "@vitest/ui": "4.0.14", "happy-dom": "*", "jsdom": "*" }, @@ -5013,7 +4266,7 @@ "@edge-runtime/vm": { "optional": true }, - "@types/debug": { + "@opentelemetry/api": { "optional": true }, "@types/node": { @@ -5039,28 +4292,12 @@ } } }, - "node_modules/vitest/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "node_modules/vitest/node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } + "license": "MIT" }, "node_modules/whatwg-encoding": { "version": "2.0.0", @@ -5075,19 +4312,6 @@ "node": ">=12" } }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -5121,19 +4345,6 @@ "node": ">=8" } }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -5144,13 +4355,6 @@ "node": ">=0.10.0" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true, - "license": "MIT" - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -5169,6 +4373,23 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wsl-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.0.tgz", + "integrity": "sha512-3sFIGLiaDP7rTO4xh3g+b3AzhYDIUGGywE/WsmqzJWDxus5aJXVnPTNC/6L+r2WzrwXqVOdD262OaO+cEyPMSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -5235,9 +4456,10 @@ } }, "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", + "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/package.json b/package.json index 06b366d1..28148dfd 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "scripts": { "clean": "rm -rf dist tsconfig.tsbuildinfo", "test": "vitest run", - "generate": "node scripts/generate.js && npm run format", + "generate": "node scripts/generate.js", "build": "npm run generate && tsc", "format": "prettier --write .", "format:check": "prettier --check .", @@ -43,24 +43,24 @@ "docs:ts:dev": "concurrently \"cd src && typedoc --watch --preserveWatchOutput\" \"npx http-server src/docs -p 8081\"", "docs:ts:verify": "cd src && typedoc --emit none && echo 'TypeDoc verification passed'" }, - "dependencies": { - "zod": "^3.0.0" + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" }, "devDependencies": { - "@types/node": "^24.9.1", - "@typescript-eslint/eslint-plugin": "^8.46.2", - "@typescript-eslint/parser": "^8.46.2", + "@hey-api/openapi-ts": "^0.88.0", + "@types/node": "^24.10.1", + "@typescript-eslint/eslint-plugin": "^8.48.0", + "@typescript-eslint/parser": "^8.48.0", "concurrently": "^9.2.1", - "eslint": "^9.38.0", + "eslint": "^9.39.1", "eslint-config-prettier": "^10.1.8", "http-server": "^14.1.1", - "json-schema-to-typescript": "^15.0.4", - "prettier": "^3.6.2", - "ts-to-zod": "^3.15.0", + "prettier": "^3.7.1", "tsx": "^4.20.6", "typedoc": "^0.28.14", "typedoc-github-theme": "^0.3.1", "typescript": "^5.9.3", - "vitest": "^4.0.2" + "vitest": "^4.0.14", + "zod": "^3.25.0 || ^4.0.0" } } diff --git a/schema/meta.json b/schema/meta.json index 0f0c6c42..7fad8924 100644 --- a/schema/meta.json +++ b/schema/meta.json @@ -3,6 +3,7 @@ "authenticate": "authenticate", "initialize": "initialize", "session_cancel": "session/cancel", + "session_list": "session/list", "session_load": "session/load", "session_new": "session/new", "session_prompt": "session/prompt", diff --git a/schema/schema.json b/schema/schema.json index b33f4890..e75bbb54 100644 --- a/schema/schema.json +++ b/schema/schema.json @@ -12,7 +12,11 @@ "type": "boolean" }, "mcpCapabilities": { - "$ref": "#/$defs/McpCapabilities", + "allOf": [ + { + "$ref": "#/$defs/McpCapabilities" + } + ], "default": { "http": false, "sse": false @@ -20,234 +24,220 @@ "description": "MCP capabilities supported by the agent." }, "promptCapabilities": { - "$ref": "#/$defs/PromptCapabilities", + "allOf": [ + { + "$ref": "#/$defs/PromptCapabilities" + } + ], "default": { "audio": false, "embeddedContext": false, "image": false }, "description": "Prompt capabilities supported by the agent." + }, + "sessionCapabilities": { + "allOf": [ + { + "$ref": "#/$defs/SessionCapabilities" + } + ], + "default": {} } }, "type": "object" }, "AgentNotification": { - "anyOf": [ - { - "$ref": "#/$defs/SessionNotification", - "description": "Handles session update notifications from the agent.\n\nThis is a notification endpoint (no response expected) that receives\nreal-time updates about session progress, including message chunks,\ntool calls, and execution plans.\n\nNote: Clients SHOULD continue accepting tool call updates even after\nsending a `session/cancel` notification, as the agent may send final\nupdates before responding with the cancelled stop reason.\n\nSee protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/prompt-turn#3-agent-reports-output)", - "title": "SessionNotification" + "properties": { + "method": { + "type": "string" }, - { - "description": "Handles extension notifications from the agent.\n\nAllows the Agent to send an arbitrary notification that is not part of the ACP spec.\nExtension notifications provide a way to send one-way messages for custom functionality\nwhile maintaining protocol compatibility.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "title": "ExtNotification" + "params": { + "anyOf": [ + { + "anyOf": [ + { + "allOf": [ + { + "$ref": "#/$defs/SessionNotification" + } + ], + "description": "Handles session update notifications from the agent.\n\nThis is a notification endpoint (no response expected) that receives\nreal-time updates about session progress, including message chunks,\ntool calls, and execution plans.\n\nNote: Clients SHOULD continue accepting tool call updates even after\nsending a `session/cancel` notification, as the agent may send final\nupdates before responding with the cancelled stop reason.\n\nSee protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/prompt-turn#3-agent-reports-output)" + }, + { + "allOf": [ + { + "$ref": "#/$defs/ExtNotification" + } + ], + "description": "Handles extension notifications from the agent.\n\nAllows the Agent to send an arbitrary notification that is not part of the ACP spec.\nExtension notifications provide a way to send one-way messages for custom functionality\nwhile maintaining protocol compatibility.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)" + } + ], + "description": "All possible notifications that an agent can send to a client.\n\nThis enum is used internally for routing RPC notifications. You typically won't need\nto use this directly - use the notification methods on the [`Client`] trait instead.\n\nNotifications do not expect a response." + }, + { + "type": "null" + } + ] } - ], - "description": "All possible notifications that an agent can send to a client.\n\nThis enum is used internally for routing RPC notifications. You typically won't need\nto use this directly - use the notification methods on the [`Client`] trait instead.\n\nNotifications do not expect a response.", + }, + "required": ["method"], + "type": "object", "x-docs-ignore": true }, - "AgentOutgoingMessage": { - "anyOf": [ - { - "properties": { - "id": { + "AgentRequest": { + "properties": { + "id": { + "$ref": "#/$defs/RequestId" + }, + "method": { + "type": "string" + }, + "params": { + "anyOf": [ + { "anyOf": [ { - "title": "null", - "type": "null" + "allOf": [ + { + "$ref": "#/$defs/WriteTextFileRequest" + } + ], + "description": "Writes content to a text file in the client's file system.\n\nOnly available if the client advertises the `fs.writeTextFile` capability.\nAllows the agent to create or modify files within the client's environment.\n\nSee protocol docs: [Client](https://agentclientprotocol.com/protocol/overview#client)" }, { - "format": "int64", - "title": "number", - "type": "integer" + "allOf": [ + { + "$ref": "#/$defs/ReadTextFileRequest" + } + ], + "description": "Reads content from a text file in the client's file system.\n\nOnly available if the client advertises the `fs.readTextFile` capability.\nAllows the agent to access file contents within the client's environment.\n\nSee protocol docs: [Client](https://agentclientprotocol.com/protocol/overview#client)" }, { - "title": "string", - "type": "string" - } - ], - "description": "JSON RPC Request Id\n\nAn identifier established by the Client that MUST contain a String, Number, or NULL value if included. If it is not included it is assumed to be a notification. The value SHOULD normally not be Null [1] and Numbers SHOULD NOT contain fractional parts [2]\n\nThe Server MUST reply with the same value in the Response object if included. This member is used to correlate the context between the two objects.\n\n[1] The use of Null as a value for the id member in a Request object is discouraged, because this specification uses a value of Null for Responses with an unknown id. Also, because JSON-RPC 1.0 uses an id value of Null for Notifications this could cause confusion in handling.\n\n[2] Fractional parts may be problematic, since many decimal fractions cannot be represented exactly as binary fractions." - }, - "method": { - "type": "string" - }, - "params": { - "anyOf": [ + "allOf": [ + { + "$ref": "#/$defs/RequestPermissionRequest" + } + ], + "description": "Requests permission from the user for a tool call operation.\n\nCalled by the agent when it needs user authorization before executing\na potentially sensitive operation. The client should present the options\nto the user and return their decision.\n\nIf the client cancels the prompt turn via `session/cancel`, it MUST\nrespond to this request with `RequestPermissionOutcome::Cancelled`.\n\nSee protocol docs: [Requesting Permission](https://agentclientprotocol.com/protocol/tool-calls#requesting-permission)" + }, { - "$ref": "#/$defs/AgentRequest" + "allOf": [ + { + "$ref": "#/$defs/CreateTerminalRequest" + } + ], + "description": "Executes a command in a new terminal\n\nOnly available if the `terminal` Client capability is set to `true`.\n\nReturns a `TerminalId` that can be used with other terminal methods\nto get the current output, wait for exit, and kill the command.\n\nThe `TerminalId` can also be used to embed the terminal in a tool call\nby using the `ToolCallContent::Terminal` variant.\n\nThe Agent is responsible for releasing the terminal by using the `terminal/release`\nmethod.\n\nSee protocol docs: [Terminals](https://agentclientprotocol.com/protocol/terminals)" }, { - "type": "null" - } - ] - } - }, - "required": ["id", "method"], - "title": "Request", - "type": "object" - }, - { - "oneOf": [ - { - "properties": { - "result": { - "$ref": "#/$defs/AgentResponse" + "allOf": [ + { + "$ref": "#/$defs/TerminalOutputRequest" + } + ], + "description": "Gets the terminal output and exit status\n\nReturns the current content in the terminal without waiting for the command to exit.\nIf the command has already exited, the exit status is included.\n\nSee protocol docs: [Terminals](https://agentclientprotocol.com/protocol/terminals)" + }, + { + "allOf": [ + { + "$ref": "#/$defs/ReleaseTerminalRequest" + } + ], + "description": "Releases a terminal\n\nThe command is killed if it hasn't exited yet. Use `terminal/wait_for_exit`\nto wait for the command to exit before releasing the terminal.\n\nAfter release, the `TerminalId` can no longer be used with other `terminal/*` methods,\nbut tool calls that already contain it, continue to display its output.\n\nThe `terminal/kill` method can be used to terminate the command without releasing\nthe terminal, allowing the Agent to call `terminal/output` and other methods.\n\nSee protocol docs: [Terminals](https://agentclientprotocol.com/protocol/terminals)" + }, + { + "allOf": [ + { + "$ref": "#/$defs/WaitForTerminalExitRequest" + } + ], + "description": "Waits for the terminal command to exit and return its exit status\n\nSee protocol docs: [Terminals](https://agentclientprotocol.com/protocol/terminals)" + }, + { + "allOf": [ + { + "$ref": "#/$defs/KillTerminalCommandRequest" + } + ], + "description": "Kills the terminal command without releasing the terminal\n\nWhile `terminal/release` will also kill the command, this method will keep\nthe `TerminalId` valid so it can be used with other methods.\n\nThis method can be helpful when implementing command timeouts which terminate\nthe command as soon as elapsed, and then get the final output so it can be sent\nto the model.\n\nNote: `terminal/release` when `TerminalId` is no longer needed.\n\nSee protocol docs: [Terminals](https://agentclientprotocol.com/protocol/terminals)" + }, + { + "allOf": [ + { + "$ref": "#/$defs/ExtRequest" + } + ], + "description": "Handles extension method requests from the agent.\n\nAllows the Agent to send an arbitrary request that is not part of the ACP spec.\nExtension methods provide a way to add custom functionality while maintaining\nprotocol compatibility.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)" } - }, - "required": ["result"], - "type": "object" + ], + "description": "All possible requests that an agent can send to a client.\n\nThis enum is used internally for routing RPC requests. You typically won't need\nto use this directly - instead, use the methods on the [`Client`] trait.\n\nThis enum encompasses all method calls from agent to client." }, { - "properties": { - "error": { - "$ref": "#/$defs/Error" - } - }, - "required": ["error"], - "type": "object" + "type": "null" } - ], + ] + } + }, + "required": ["id", "method"], + "type": "object", + "x-docs-ignore": true + }, + "AgentResponse": { + "anyOf": [ + { "properties": { "id": { + "$ref": "#/$defs/RequestId" + }, + "result": { "anyOf": [ { - "title": "null", - "type": "null" + "$ref": "#/$defs/InitializeResponse" + }, + { + "$ref": "#/$defs/AuthenticateResponse" }, { - "format": "int64", - "title": "number", - "type": "integer" + "$ref": "#/$defs/NewSessionResponse" }, { - "title": "string", - "type": "string" + "$ref": "#/$defs/LoadSessionResponse" + }, + { + "$ref": "#/$defs/ListSessionsResponse" + }, + { + "$ref": "#/$defs/SetSessionModeResponse" + }, + { + "$ref": "#/$defs/PromptResponse" + }, + { + "$ref": "#/$defs/SetSessionModelResponse" + }, + { + "$ref": "#/$defs/ExtResponse" } ], - "description": "JSON RPC Request Id\n\nAn identifier established by the Client that MUST contain a String, Number, or NULL value if included. If it is not included it is assumed to be a notification. The value SHOULD normally not be Null [1] and Numbers SHOULD NOT contain fractional parts [2]\n\nThe Server MUST reply with the same value in the Response object if included. This member is used to correlate the context between the two objects.\n\n[1] The use of Null as a value for the id member in a Request object is discouraged, because this specification uses a value of Null for Responses with an unknown id. Also, because JSON-RPC 1.0 uses an id value of Null for Notifications this could cause confusion in handling.\n\n[2] Fractional parts may be problematic, since many decimal fractions cannot be represented exactly as binary fractions." + "description": "All possible responses that an agent can send to a client.\n\nThis enum is used internally for routing RPC responses. You typically won't need\nto use this directly - the responses are handled automatically by the connection.\n\nThese are responses to the corresponding `ClientRequest` variants." } }, - "required": ["id"], - "title": "Response", + "required": ["id", "result"], "type": "object" }, { "properties": { - "method": { - "type": "string" + "error": { + "$ref": "#/$defs/Error" }, - "params": { - "anyOf": [ - { - "$ref": "#/$defs/AgentNotification" - }, - { - "type": "null" - } - ] + "id": { + "$ref": "#/$defs/RequestId" } }, - "required": ["method"], - "title": "Notification", + "required": ["id", "error"], "type": "object" } ], - "description": "A message (request, response, or notification) with `\"jsonrpc\": \"2.0\"` specified as\n[required by JSON-RPC 2.0 Specification][1].\n\n[1]: https://www.jsonrpc.org/specification#compatibility", - "properties": { - "jsonrpc": { - "enum": ["2.0"], - "type": "string" - } - }, - "required": ["jsonrpc"], - "type": "object", - "x-docs-ignore": true - }, - "AgentRequest": { - "anyOf": [ - { - "$ref": "#/$defs/WriteTextFileRequest", - "description": "Writes content to a text file in the client's file system.\n\nOnly available if the client advertises the `fs.writeTextFile` capability.\nAllows the agent to create or modify files within the client's environment.\n\nSee protocol docs: [Client](https://agentclientprotocol.com/protocol/overview#client)", - "title": "WriteTextFileRequest" - }, - { - "$ref": "#/$defs/ReadTextFileRequest", - "description": "Reads content from a text file in the client's file system.\n\nOnly available if the client advertises the `fs.readTextFile` capability.\nAllows the agent to access file contents within the client's environment.\n\nSee protocol docs: [Client](https://agentclientprotocol.com/protocol/overview#client)", - "title": "ReadTextFileRequest" - }, - { - "$ref": "#/$defs/RequestPermissionRequest", - "description": "Requests permission from the user for a tool call operation.\n\nCalled by the agent when it needs user authorization before executing\na potentially sensitive operation. The client should present the options\nto the user and return their decision.\n\nIf the client cancels the prompt turn via `session/cancel`, it MUST\nrespond to this request with `RequestPermissionOutcome::Cancelled`.\n\nSee protocol docs: [Requesting Permission](https://agentclientprotocol.com/protocol/tool-calls#requesting-permission)", - "title": "RequestPermissionRequest" - }, - { - "$ref": "#/$defs/CreateTerminalRequest", - "description": "Executes a command in a new terminal\n\nOnly available if the `terminal` Client capability is set to `true`.\n\nReturns a `TerminalId` that can be used with other terminal methods\nto get the current output, wait for exit, and kill the command.\n\nThe `TerminalId` can also be used to embed the terminal in a tool call\nby using the `ToolCallContent::Terminal` variant.\n\nThe Agent is responsible for releasing the terminal by using the `terminal/release`\nmethod.\n\nSee protocol docs: [Terminals](https://agentclientprotocol.com/protocol/terminals)", - "title": "CreateTerminalRequest" - }, - { - "$ref": "#/$defs/TerminalOutputRequest", - "description": "Gets the terminal output and exit status\n\nReturns the current content in the terminal without waiting for the command to exit.\nIf the command has already exited, the exit status is included.\n\nSee protocol docs: [Terminals](https://agentclientprotocol.com/protocol/terminals)", - "title": "TerminalOutputRequest" - }, - { - "$ref": "#/$defs/ReleaseTerminalRequest", - "description": "Releases a terminal\n\nThe command is killed if it hasn't exited yet. Use `terminal/wait_for_exit`\nto wait for the command to exit before releasing the terminal.\n\nAfter release, the `TerminalId` can no longer be used with other `terminal/*` methods,\nbut tool calls that already contain it, continue to display its output.\n\nThe `terminal/kill` method can be used to terminate the command without releasing\nthe terminal, allowing the Agent to call `terminal/output` and other methods.\n\nSee protocol docs: [Terminals](https://agentclientprotocol.com/protocol/terminals)", - "title": "ReleaseTerminalRequest" - }, - { - "$ref": "#/$defs/WaitForTerminalExitRequest", - "description": "Waits for the terminal command to exit and return its exit status\n\nSee protocol docs: [Terminals](https://agentclientprotocol.com/protocol/terminals)", - "title": "WaitForTerminalExitRequest" - }, - { - "$ref": "#/$defs/KillTerminalCommandRequest", - "description": "Kills the terminal command without releasing the terminal\n\nWhile `terminal/release` will also kill the command, this method will keep\nthe `TerminalId` valid so it can be used with other methods.\n\nThis method can be helpful when implementing command timeouts which terminate\nthe command as soon as elapsed, and then get the final output so it can be sent\nto the model.\n\nNote: `terminal/release` when `TerminalId` is no longer needed.\n\nSee protocol docs: [Terminals](https://agentclientprotocol.com/protocol/terminals)", - "title": "KillTerminalCommandRequest" - }, - { - "description": "Handles extension method requests from the agent.\n\nAllows the Agent to send an arbitrary request that is not part of the ACP spec.\nExtension methods provide a way to add custom functionality while maintaining\nprotocol compatibility.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "title": "ExtMethodRequest" - } - ], - "description": "All possible requests that an agent can send to a client.\n\nThis enum is used internally for routing RPC requests. You typically won't need\nto use this directly - instead, use the methods on the [`Client`] trait.\n\nThis enum encompasses all method calls from agent to client.", - "x-docs-ignore": true - }, - "AgentResponse": { - "anyOf": [ - { - "$ref": "#/$defs/InitializeResponse", - "title": "InitializeResponse" - }, - { - "$ref": "#/$defs/AuthenticateResponse", - "title": "AuthenticateResponse" - }, - { - "$ref": "#/$defs/NewSessionResponse", - "title": "NewSessionResponse" - }, - { - "$ref": "#/$defs/LoadSessionResponse", - "title": "LoadSessionResponse" - }, - { - "$ref": "#/$defs/SetSessionModeResponse", - "title": "SetSessionModeResponse" - }, - { - "$ref": "#/$defs/PromptResponse", - "title": "PromptResponse" - }, - { - "$ref": "#/$defs/SetSessionModelResponse", - "title": "SetSessionModelResponse" - }, - { - "title": "ExtMethodResponse" - } - ], - "description": "All possible responses that an agent can send to a client.\n\nThis enum is used internally for routing RPC responses. You typically won't need\nto use this directly - the responses are handled automatically by the connection.\n\nThese are responses to the corresponding `ClientRequest` variants.", "x-docs-ignore": true }, "Annotations": { @@ -272,6 +262,32 @@ }, "type": "object" }, + "AudioContent": { + "description": "Audio provided to or from an LLM.", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "annotations": { + "anyOf": [ + { + "$ref": "#/$defs/Annotations" + }, + { + "type": "null" + } + ] + }, + "data": { + "type": "string" + }, + "mimeType": { + "type": "string" + } + }, + "required": ["data", "mimeType"], + "type": "object" + }, "AuthMethod": { "description": "Describes an available authentication method.", "properties": { @@ -283,8 +299,8 @@ "type": ["string", "null"] }, "id": { - "$ref": "#/$defs/AuthMethodId", - "description": "Unique identifier for this authentication method." + "description": "Unique identifier for this authentication method.", + "type": "string" }, "name": { "description": "Human-readable name of the authentication method.", @@ -294,10 +310,6 @@ "required": ["id", "name"], "type": "object" }, - "AuthMethodId": { - "description": "Unique identifier for an authentication method.", - "type": "string" - }, "AuthenticateRequest": { "description": "Request parameters for the authenticate method.\n\nSpecifies which authentication method to use.", "properties": { @@ -305,8 +317,8 @@ "description": "Extension point for implementations" }, "methodId": { - "$ref": "#/$defs/AuthMethodId", - "description": "The ID of the authentication method to use.\nMust be one of the methods advertised in the initialize response." + "description": "The ID of the authentication method to use.\nMust be one of the methods advertised in the initialize response.", + "type": "string" } }, "required": ["methodId"], @@ -315,7 +327,7 @@ "x-side": "agent" }, "AuthenticateResponse": { - "description": "Response to authenticate method", + "description": "Response to the `authenticate` method.", "properties": { "_meta": { "description": "Extension point for implementations" @@ -357,20 +369,33 @@ "AvailableCommandInput": { "anyOf": [ { - "description": "All text that was typed after the command name is provided as input.", - "properties": { - "hint": { - "description": "A hint to display when the input hasn't been provided yet", - "type": "string" + "allOf": [ + { + "$ref": "#/$defs/UnstructuredCommandInput" } - }, - "required": ["hint"], - "title": "UnstructuredCommandInput", - "type": "object" + ], + "description": "All text that was typed after the command name is provided as input." } ], "description": "The input specification for a command." }, + "AvailableCommandsUpdate": { + "description": "Available commands are ready or have changed", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "availableCommands": { + "description": "Commands the agent can execute", + "items": { + "$ref": "#/$defs/AvailableCommand" + }, + "type": "array" + } + }, + "required": ["availableCommands"], + "type": "object" + }, "BlobResourceContents": { "description": "Binary resource contents.", "properties": { @@ -397,7 +422,11 @@ "description": "Extension point for implementations" }, "sessionId": { - "$ref": "#/$defs/SessionId", + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], "description": "The ID of the session to cancel operations for." } }, @@ -413,7 +442,11 @@ "description": "Extension point for implementations" }, "fs": { - "$ref": "#/$defs/FileSystemCapability", + "allOf": [ + { + "$ref": "#/$defs/FileSystemCapability" + } + ], "default": { "readTextFile": false, "writeTextFile": false @@ -429,222 +462,215 @@ "type": "object" }, "ClientNotification": { - "anyOf": [ - { - "$ref": "#/$defs/CancelNotification", - "description": "Cancels ongoing operations for a session.\n\nThis is a notification sent by the client to cancel an ongoing prompt turn.\n\nUpon receiving this notification, the Agent SHOULD:\n- Stop all language model requests as soon as possible\n- Abort all tool call invocations in progress\n- Send any pending `session/update` notifications\n- Respond to the original `session/prompt` request with `StopReason::Cancelled`\n\nSee protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/prompt-turn#cancellation)", - "title": "CancelNotification" + "properties": { + "method": { + "type": "string" }, - { - "description": "Handles extension notifications from the client.\n\nExtension notifications provide a way to send one-way messages for custom functionality\nwhile maintaining protocol compatibility.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "title": "ExtNotification" + "params": { + "anyOf": [ + { + "anyOf": [ + { + "allOf": [ + { + "$ref": "#/$defs/CancelNotification" + } + ], + "description": "Cancels ongoing operations for a session.\n\nThis is a notification sent by the client to cancel an ongoing prompt turn.\n\nUpon receiving this notification, the Agent SHOULD:\n- Stop all language model requests as soon as possible\n- Abort all tool call invocations in progress\n- Send any pending `session/update` notifications\n- Respond to the original `session/prompt` request with `StopReason::Cancelled`\n\nSee protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/prompt-turn#cancellation)" + }, + { + "allOf": [ + { + "$ref": "#/$defs/ExtNotification" + } + ], + "description": "Handles extension notifications from the client.\n\nExtension notifications provide a way to send one-way messages for custom functionality\nwhile maintaining protocol compatibility.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)" + } + ], + "description": "All possible notifications that a client can send to an agent.\n\nThis enum is used internally for routing RPC notifications. You typically won't need\nto use this directly - use the notification methods on the [`Agent`] trait instead.\n\nNotifications do not expect a response." + }, + { + "type": "null" + } + ] } - ], - "description": "All possible notifications that a client can send to an agent.\n\nThis enum is used internally for routing RPC notifications. You typically won't need\nto use this directly - use the notification methods on the [`Agent`] trait instead.\n\nNotifications do not expect a response.", + }, + "required": ["method"], + "type": "object", "x-docs-ignore": true }, - "ClientOutgoingMessage": { - "anyOf": [ - { - "properties": { - "id": { + "ClientRequest": { + "properties": { + "id": { + "$ref": "#/$defs/RequestId" + }, + "method": { + "type": "string" + }, + "params": { + "anyOf": [ + { "anyOf": [ { - "title": "null", - "type": "null" + "allOf": [ + { + "$ref": "#/$defs/InitializeRequest" + } + ], + "description": "Establishes the connection with a client and negotiates protocol capabilities.\n\nThis method is called once at the beginning of the connection to:\n- Negotiate the protocol version to use\n- Exchange capability information between client and agent\n- Determine available authentication methods\n\nThe agent should respond with its supported protocol version and capabilities.\n\nSee protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)" }, { - "format": "int64", - "title": "number", - "type": "integer" + "allOf": [ + { + "$ref": "#/$defs/AuthenticateRequest" + } + ], + "description": "Authenticates the client using the specified authentication method.\n\nCalled when the agent requires authentication before allowing session creation.\nThe client provides the authentication method ID that was advertised during initialization.\n\nAfter successful authentication, the client can proceed to create sessions with\n`new_session` without receiving an `auth_required` error.\n\nSee protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)" }, { - "title": "string", - "type": "string" - } - ], - "description": "JSON RPC Request Id\n\nAn identifier established by the Client that MUST contain a String, Number, or NULL value if included. If it is not included it is assumed to be a notification. The value SHOULD normally not be Null [1] and Numbers SHOULD NOT contain fractional parts [2]\n\nThe Server MUST reply with the same value in the Response object if included. This member is used to correlate the context between the two objects.\n\n[1] The use of Null as a value for the id member in a Request object is discouraged, because this specification uses a value of Null for Responses with an unknown id. Also, because JSON-RPC 1.0 uses an id value of Null for Notifications this could cause confusion in handling.\n\n[2] Fractional parts may be problematic, since many decimal fractions cannot be represented exactly as binary fractions." - }, - "method": { - "type": "string" - }, - "params": { - "anyOf": [ + "allOf": [ + { + "$ref": "#/$defs/NewSessionRequest" + } + ], + "description": "Creates a new conversation session with the agent.\n\nSessions represent independent conversation contexts with their own history and state.\n\nThe agent should:\n- Create a new session context\n- Connect to any specified MCP servers\n- Return a unique session ID for future requests\n\nMay return an `auth_required` error if the agent requires authentication.\n\nSee protocol docs: [Session Setup](https://agentclientprotocol.com/protocol/session-setup)" + }, { - "$ref": "#/$defs/ClientRequest" + "allOf": [ + { + "$ref": "#/$defs/LoadSessionRequest" + } + ], + "description": "Loads an existing session to resume a previous conversation.\n\nThis method is only available if the agent advertises the `loadSession` capability.\n\nThe agent should:\n- Restore the session context and conversation history\n- Connect to the specified MCP servers\n- Stream the entire conversation history back to the client via notifications\n\nSee protocol docs: [Loading Sessions](https://agentclientprotocol.com/protocol/session-setup#loading-sessions)" }, { - "type": "null" - } - ] - } - }, - "required": ["id", "method"], - "title": "Request", - "type": "object" - }, - { - "oneOf": [ - { - "properties": { - "result": { - "$ref": "#/$defs/ClientResponse" - } - }, - "required": ["result"], - "type": "object" - }, - { - "properties": { - "error": { - "$ref": "#/$defs/Error" - } - }, - "required": ["error"], - "type": "object" - } - ], - "properties": { - "id": { - "anyOf": [ + "allOf": [ + { + "$ref": "#/$defs/ListSessionsRequest" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nLists existing sessions known to the agent.\n\nThis method is only available if the agent advertises the `listSessions` capability.\n\nThe agent should return metadata about sessions with optional filtering and pagination support." + }, { - "title": "null", - "type": "null" + "allOf": [ + { + "$ref": "#/$defs/SetSessionModeRequest" + } + ], + "description": "Sets the current mode for a session.\n\nAllows switching between different agent modes (e.g., \"ask\", \"architect\", \"code\")\nthat affect system prompts, tool availability, and permission behaviors.\n\nThe mode must be one of the modes advertised in `availableModes` during session\ncreation or loading. Agents may also change modes autonomously and notify the\nclient via `current_mode_update` notifications.\n\nThis method can be called at any time during a session, whether the Agent is\nidle or actively generating a response.\n\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)" }, { - "format": "int64", - "title": "number", - "type": "integer" + "allOf": [ + { + "$ref": "#/$defs/PromptRequest" + } + ], + "description": "Processes a user prompt within a session.\n\nThis method handles the whole lifecycle of a prompt:\n- Receives user messages with optional context (files, images, etc.)\n- Processes the prompt using language models\n- Reports language model content and tool calls to the Clients\n- Requests permission to run tools\n- Executes any requested tool calls\n- Returns when the turn is complete with a stop reason\n\nSee protocol docs: [Prompt Turn](https://agentclientprotocol.com/protocol/prompt-turn)" }, { - "title": "string", - "type": "string" + "allOf": [ + { + "$ref": "#/$defs/SetSessionModelRequest" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nSelect a model for a given session." + }, + { + "allOf": [ + { + "$ref": "#/$defs/ExtRequest" + } + ], + "description": "Handles extension method requests from the client.\n\nExtension methods provide a way to add custom functionality while maintaining\nprotocol compatibility.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)" } ], - "description": "JSON RPC Request Id\n\nAn identifier established by the Client that MUST contain a String, Number, or NULL value if included. If it is not included it is assumed to be a notification. The value SHOULD normally not be Null [1] and Numbers SHOULD NOT contain fractional parts [2]\n\nThe Server MUST reply with the same value in the Response object if included. This member is used to correlate the context between the two objects.\n\n[1] The use of Null as a value for the id member in a Request object is discouraged, because this specification uses a value of Null for Responses with an unknown id. Also, because JSON-RPC 1.0 uses an id value of Null for Notifications this could cause confusion in handling.\n\n[2] Fractional parts may be problematic, since many decimal fractions cannot be represented exactly as binary fractions." + "description": "All possible requests that a client can send to an agent.\n\nThis enum is used internally for routing RPC requests. You typically won't need\nto use this directly - instead, use the methods on the [`Agent`] trait.\n\nThis enum encompasses all method calls from client to agent." + }, + { + "type": "null" } - }, - "required": ["id"], - "title": "Response", - "type": "object" - }, + ] + } + }, + "required": ["id", "method"], + "type": "object", + "x-docs-ignore": true + }, + "ClientResponse": { + "anyOf": [ { "properties": { - "method": { - "type": "string" + "id": { + "$ref": "#/$defs/RequestId" }, - "params": { + "result": { "anyOf": [ { - "$ref": "#/$defs/ClientNotification" + "$ref": "#/$defs/WriteTextFileResponse" + }, + { + "$ref": "#/$defs/ReadTextFileResponse" + }, + { + "$ref": "#/$defs/RequestPermissionResponse" + }, + { + "$ref": "#/$defs/CreateTerminalResponse" + }, + { + "$ref": "#/$defs/TerminalOutputResponse" + }, + { + "$ref": "#/$defs/ReleaseTerminalResponse" }, { - "type": "null" + "$ref": "#/$defs/WaitForTerminalExitResponse" + }, + { + "$ref": "#/$defs/KillTerminalCommandResponse" + }, + { + "$ref": "#/$defs/ExtResponse" } - ] + ], + "description": "All possible responses that a client can send to an agent.\n\nThis enum is used internally for routing RPC responses. You typically won't need\nto use this directly - the responses are handled automatically by the connection.\n\nThese are responses to the corresponding `AgentRequest` variants." } }, - "required": ["method"], - "title": "Notification", - "type": "object" - } - ], - "description": "A message (request, response, or notification) with `\"jsonrpc\": \"2.0\"` specified as\n[required by JSON-RPC 2.0 Specification][1].\n\n[1]: https://www.jsonrpc.org/specification#compatibility", - "properties": { - "jsonrpc": { - "enum": ["2.0"], - "type": "string" - } - }, - "required": ["jsonrpc"], - "type": "object", - "x-docs-ignore": true - }, - "ClientRequest": { - "anyOf": [ - { - "$ref": "#/$defs/InitializeRequest", - "description": "Establishes the connection with a client and negotiates protocol capabilities.\n\nThis method is called once at the beginning of the connection to:\n- Negotiate the protocol version to use\n- Exchange capability information between client and agent\n- Determine available authentication methods\n\nThe agent should respond with its supported protocol version and capabilities.\n\nSee protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)", - "title": "InitializeRequest" - }, - { - "$ref": "#/$defs/AuthenticateRequest", - "description": "Authenticates the client using the specified authentication method.\n\nCalled when the agent requires authentication before allowing session creation.\nThe client provides the authentication method ID that was advertised during initialization.\n\nAfter successful authentication, the client can proceed to create sessions with\n`new_session` without receiving an `auth_required` error.\n\nSee protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)", - "title": "AuthenticateRequest" - }, - { - "$ref": "#/$defs/NewSessionRequest", - "description": "Creates a new conversation session with the agent.\n\nSessions represent independent conversation contexts with their own history and state.\n\nThe agent should:\n- Create a new session context\n- Connect to any specified MCP servers\n- Return a unique session ID for future requests\n\nMay return an `auth_required` error if the agent requires authentication.\n\nSee protocol docs: [Session Setup](https://agentclientprotocol.com/protocol/session-setup)", - "title": "NewSessionRequest" - }, - { - "$ref": "#/$defs/LoadSessionRequest", - "description": "Loads an existing session to resume a previous conversation.\n\nThis method is only available if the agent advertises the `loadSession` capability.\n\nThe agent should:\n- Restore the session context and conversation history\n- Connect to the specified MCP servers\n- Stream the entire conversation history back to the client via notifications\n\nSee protocol docs: [Loading Sessions](https://agentclientprotocol.com/protocol/session-setup#loading-sessions)", - "title": "LoadSessionRequest" - }, - { - "$ref": "#/$defs/SetSessionModeRequest", - "description": "Sets the current mode for a session.\n\nAllows switching between different agent modes (e.g., \"ask\", \"architect\", \"code\")\nthat affect system prompts, tool availability, and permission behaviors.\n\nThe mode must be one of the modes advertised in `availableModes` during session\ncreation or loading. Agents may also change modes autonomously and notify the\nclient via `current_mode_update` notifications.\n\nThis method can be called at any time during a session, whether the Agent is\nidle or actively generating a response.\n\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)", - "title": "SetSessionModeRequest" - }, - { - "$ref": "#/$defs/PromptRequest", - "description": "Processes a user prompt within a session.\n\nThis method handles the whole lifecycle of a prompt:\n- Receives user messages with optional context (files, images, etc.)\n- Processes the prompt using language models\n- Reports language model content and tool calls to the Clients\n- Requests permission to run tools\n- Executes any requested tool calls\n- Returns when the turn is complete with a stop reason\n\nSee protocol docs: [Prompt Turn](https://agentclientprotocol.com/protocol/prompt-turn)", - "title": "PromptRequest" - }, - { - "$ref": "#/$defs/SetSessionModelRequest", - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nSelect a model for a given session.", - "title": "SetSessionModelRequest" + "required": ["id", "result"], + "type": "object" }, { - "description": "Handles extension method requests from the client.\n\nExtension methods provide a way to add custom functionality while maintaining\nprotocol compatibility.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "title": "ExtMethodRequest" + "properties": { + "error": { + "$ref": "#/$defs/Error" + }, + "id": { + "$ref": "#/$defs/RequestId" + } + }, + "required": ["id", "error"], + "type": "object" } ], - "description": "All possible requests that a client can send to an agent.\n\nThis enum is used internally for routing RPC requests. You typically won't need\nto use this directly - instead, use the methods on the [`Agent`] trait.\n\nThis enum encompasses all method calls from client to agent.", "x-docs-ignore": true }, - "ClientResponse": { - "anyOf": [ - { - "$ref": "#/$defs/WriteTextFileResponse", - "title": "WriteTextFileResponse" - }, - { - "$ref": "#/$defs/ReadTextFileResponse", - "title": "ReadTextFileResponse" - }, - { - "$ref": "#/$defs/RequestPermissionResponse", - "title": "RequestPermissionResponse" - }, - { - "$ref": "#/$defs/CreateTerminalResponse", - "title": "CreateTerminalResponse" - }, - { - "$ref": "#/$defs/TerminalOutputResponse", - "title": "TerminalOutputResponse" - }, - { - "$ref": "#/$defs/ReleaseTerminalResponse", - "title": "ReleaseTerminalResponse" - }, - { - "$ref": "#/$defs/WaitForTerminalExitResponse", - "title": "WaitForTerminalExitResponse" - }, - { - "$ref": "#/$defs/KillTerminalCommandResponse", - "title": "KillTerminalResponse" + "Content": { + "description": "Standard content block (text, images, resources).", + "properties": { + "_meta": { + "description": "Extension point for implementations" }, - { - "title": "ExtMethodResponse" + "content": { + "allOf": [ + { + "$ref": "#/$defs/ContentBlock" + } + ], + "description": "The actual content block." } - ], - "description": "All possible responses that a client can send to an agent.\n\nThis enum is used internally for routing RPC responses. You typically won't need\nto use this directly - the responses are handled automatically by the connection.\n\nThese are responses to the corresponding `AgentRequest` variants.", - "x-docs-ignore": true + }, + "required": ["content"], + "type": "object" }, "ContentBlock": { "description": "Content blocks represent displayable information in the Agent Client Protocol.\n\nThey provide a structured way to handle various types of user-facing content—whether\nit's text from language models, images for analysis, or embedded resources for context.\n\nContent blocks appear in:\n- User prompts sent via `session/prompt`\n- Language model output streamed through `session/update` notifications\n- Progress updates and results from tool calls\n\nThis structure is compatible with the Model Context Protocol (MCP), enabling\nagents to seamlessly forward content from MCP tool outputs without transformation.\n\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/content)", @@ -653,167 +679,105 @@ }, "oneOf": [ { + "allOf": [ + { + "$ref": "#/$defs/TextContent" + } + ], "description": "Text content. May be plain text or formatted with Markdown.\n\nAll agents MUST support text content blocks in prompts.\nClients SHOULD render this text as Markdown.", "properties": { - "_meta": { - "description": "Extension point for implementations" - }, - "annotations": { - "anyOf": [ - { - "$ref": "#/$defs/Annotations" - }, - { - "type": "null" - } - ] - }, - "text": { - "type": "string" - }, "type": { "const": "text", "type": "string" } }, - "required": ["type", "text"], + "required": ["type"], "type": "object" }, { + "allOf": [ + { + "$ref": "#/$defs/ImageContent" + } + ], "description": "Images for visual context or analysis.\n\nRequires the `image` prompt capability when included in prompts.", "properties": { - "_meta": { - "description": "Extension point for implementations" - }, - "annotations": { - "anyOf": [ - { - "$ref": "#/$defs/Annotations" - }, - { - "type": "null" - } - ] - }, - "data": { - "type": "string" - }, - "mimeType": { - "type": "string" - }, "type": { "const": "image", "type": "string" - }, - "uri": { - "type": ["string", "null"] } }, - "required": ["type", "data", "mimeType"], + "required": ["type"], "type": "object" }, { + "allOf": [ + { + "$ref": "#/$defs/AudioContent" + } + ], "description": "Audio data for transcription or analysis.\n\nRequires the `audio` prompt capability when included in prompts.", "properties": { - "_meta": { - "description": "Extension point for implementations" - }, - "annotations": { - "anyOf": [ - { - "$ref": "#/$defs/Annotations" - }, - { - "type": "null" - } - ] - }, - "data": { - "type": "string" - }, - "mimeType": { - "type": "string" - }, "type": { "const": "audio", "type": "string" } }, - "required": ["type", "data", "mimeType"], + "required": ["type"], "type": "object" }, { + "allOf": [ + { + "$ref": "#/$defs/ResourceLink" + } + ], "description": "References to resources that the agent can access.\n\nAll agents MUST support resource links in prompts.", "properties": { - "_meta": { - "description": "Extension point for implementations" - }, - "annotations": { - "anyOf": [ - { - "$ref": "#/$defs/Annotations" - }, - { - "type": "null" - } - ] - }, - "description": { - "type": ["string", "null"] - }, - "mimeType": { - "type": ["string", "null"] - }, - "name": { - "type": "string" - }, - "size": { - "format": "int64", - "type": ["integer", "null"] - }, - "title": { - "type": ["string", "null"] - }, "type": { "const": "resource_link", "type": "string" - }, - "uri": { - "type": "string" } }, - "required": ["type", "name", "uri"], + "required": ["type"], "type": "object" }, { + "allOf": [ + { + "$ref": "#/$defs/EmbeddedResource" + } + ], "description": "Complete resource contents embedded directly in the message.\n\nPreferred for including context as it avoids extra round-trips.\n\nRequires the `embeddedContext` prompt capability when included in prompts.", "properties": { - "_meta": { - "description": "Extension point for implementations" - }, - "annotations": { - "anyOf": [ - { - "$ref": "#/$defs/Annotations" - }, - { - "type": "null" - } - ] - }, - "resource": { - "$ref": "#/$defs/EmbeddedResourceResource" - }, "type": { "const": "resource", "type": "string" } }, - "required": ["type", "resource"], + "required": ["type"], "type": "object" } ] }, + "ContentChunk": { + "description": "A streamed item of content", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "content": { + "allOf": [ + { + "$ref": "#/$defs/ContentBlock" + } + ], + "description": "A single item of content" + } + }, + "required": ["content"], + "type": "object" + }, "CreateTerminalRequest": { "description": "Request to create a new terminal and execute a command.", "properties": { @@ -849,7 +813,11 @@ "type": ["integer", "null"] }, "sessionId": { - "$ref": "#/$defs/SessionId", + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], "description": "The session ID for this request." } }, @@ -874,15 +842,76 @@ "x-method": "terminal/create", "x-side": "client" }, + "CurrentModeUpdate": { + "description": "The current mode of the session has changed\n\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "currentModeId": { + "allOf": [ + { + "$ref": "#/$defs/SessionModeId" + } + ], + "description": "The ID of the current mode" + } + }, + "required": ["currentModeId"], + "type": "object" + }, + "Diff": { + "description": "A diff representing file modifications.\n\nShows changes to files in a format suitable for display in the client UI.\n\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/tool-calls#content)", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "newText": { + "description": "The new content after modification.", + "type": "string" + }, + "oldText": { + "description": "The original content (None for new files).", + "type": ["string", "null"] + }, + "path": { + "description": "The file path being modified.", + "type": "string" + } + }, + "required": ["path", "newText"], + "type": "object" + }, + "EmbeddedResource": { + "description": "The contents of a resource, embedded into a prompt or tool call result.", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "annotations": { + "anyOf": [ + { + "$ref": "#/$defs/Annotations" + }, + { + "type": "null" + } + ] + }, + "resource": { + "$ref": "#/$defs/EmbeddedResourceResource" + } + }, + "required": ["resource"], + "type": "object" + }, "EmbeddedResourceResource": { "anyOf": [ { - "$ref": "#/$defs/TextResourceContents", - "title": "TextResourceContents" + "$ref": "#/$defs/TextResourceContents" }, { - "$ref": "#/$defs/BlobResourceContents", - "title": "BlobResourceContents" + "$ref": "#/$defs/BlobResourceContents" } ], "description": "Resource content that can be embedded in a message." @@ -924,8 +953,17 @@ "required": ["code", "message"], "type": "object" }, + "ExtNotification": { + "description": "Allows the Agent to send an arbitrary notification that is not part of the ACP spec.\nExtension notifications provide a way to send one-way messages for custom functionality\nwhile maintaining protocol compatibility.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)" + }, + "ExtRequest": { + "description": "Allows for sending an arbitrary request that is not part of the ACP spec.\nExtension methods provide a way to add custom functionality while maintaining\nprotocol compatibility.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)" + }, + "ExtResponse": { + "description": "Allows for sending an arbitrary response to an [`ExtRequest`] that is not part of the ACP spec.\nExtension methods provide a way to add custom functionality while maintaining\nprotocol compatibility.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)" + }, "FileSystemCapability": { - "description": "File system capabilities that a client may support.\n\nSee protocol docs: [FileSystem](https://agentclientprotocol.com/protocol/initialization#filesystem)", + "description": "Filesystem capabilities supported by the client.\nFile system capabilities that a client may support.\n\nSee protocol docs: [FileSystem](https://agentclientprotocol.com/protocol/initialization#filesystem)", "properties": { "_meta": { "description": "Extension point for implementations" @@ -961,9 +999,41 @@ "required": ["name", "value"], "type": "object" }, + "ImageContent": { + "description": "An image provided to or from an LLM.", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "annotations": { + "anyOf": [ + { + "$ref": "#/$defs/Annotations" + }, + { + "type": "null" + } + ] + }, + "data": { + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "uri": { + "type": ["string", "null"] + } + }, + "required": ["data", "mimeType"], + "type": "object" + }, "Implementation": { - "description": "Describes the name and version of an MCP implementation, with an optional\ntitle for UI representation.", + "description": "Metadata about the implementation of the client or agent.\nDescribes the name and version of an MCP implementation, with an optional\ntitle for UI representation.", "properties": { + "_meta": { + "description": "Extension point for implementations" + }, "name": { "description": "Intended for programmatic or logical use, but can be used as a display\nname fallback if title isn’t present.", "type": "string" @@ -973,7 +1043,7 @@ "type": ["string", "null"] }, "version": { - "description": "Version of the implementation. Can be displayed to the user or used\nfor debugging or metrics purposes.", + "description": "Version of the implementation. Can be displayed to the user or used\nfor debugging or metrics purposes. (e.g. \"1.0.0\").", "type": "string" } }, @@ -987,7 +1057,11 @@ "description": "Extension point for implementations" }, "clientCapabilities": { - "$ref": "#/$defs/ClientCapabilities", + "allOf": [ + { + "$ref": "#/$defs/ClientCapabilities" + } + ], "default": { "fs": { "readTextFile": false, @@ -1009,7 +1083,11 @@ "description": "Information about the Client name and version sent to the Agent.\n\nNote: in future versions of the protocol, this will be required." }, "protocolVersion": { - "$ref": "#/$defs/ProtocolVersion", + "allOf": [ + { + "$ref": "#/$defs/ProtocolVersion" + } + ], "description": "The latest protocol version supported by the client." } }, @@ -1019,13 +1097,17 @@ "x-side": "agent" }, "InitializeResponse": { - "description": "Response from the initialize method.\n\nContains the negotiated protocol version and agent capabilities.\n\nSee protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)", + "description": "Response to the `initialize` method.\n\nContains the negotiated protocol version and agent capabilities.\n\nSee protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)", "properties": { "_meta": { "description": "Extension point for implementations" }, "agentCapabilities": { - "$ref": "#/$defs/AgentCapabilities", + "allOf": [ + { + "$ref": "#/$defs/AgentCapabilities" + } + ], "default": { "loadSession": false, "mcpCapabilities": { @@ -1036,7 +1118,8 @@ "audio": false, "embeddedContext": false, "image": false - } + }, + "sessionCapabilities": {} }, "description": "Capabilities supported by the agent." }, @@ -1060,7 +1143,11 @@ "type": "array" }, "protocolVersion": { - "$ref": "#/$defs/ProtocolVersion", + "allOf": [ + { + "$ref": "#/$defs/ProtocolVersion" + } + ], "description": "The protocol version the client specified if supported by the agent,\nor the latest protocol version supported by the agent.\n\nThe client should disconnect, if it doesn't support this version." } }, @@ -1076,7 +1163,11 @@ "description": "Extension point for implementations" }, "sessionId": { - "$ref": "#/$defs/SessionId", + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], "description": "The session ID for this request." }, "terminalId": { @@ -1100,6 +1191,48 @@ "x-method": "terminal/kill", "x-side": "client" }, + "ListSessionsRequest": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequest parameters for listing existing sessions.\n\nOnly available if the Agent supports the `listSessions` capability.", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "cursor": { + "description": "Opaque cursor token from a previous response's nextCursor field for cursor-based pagination", + "type": ["string", "null"] + }, + "cwd": { + "description": "Filter sessions by working directory. Must be an absolute path.", + "type": ["string", "null"] + } + }, + "type": "object", + "x-method": "session/list", + "x-side": "agent" + }, + "ListSessionsResponse": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nResponse from listing sessions.", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "nextCursor": { + "description": "Opaque cursor token. If present, pass this in the next request's cursor parameter\nto fetch the next page. If absent, there are no more results.", + "type": ["string", "null"] + }, + "sessions": { + "description": "Array of session information objects", + "items": { + "$ref": "#/$defs/SessionInfo" + }, + "type": "array" + } + }, + "required": ["sessions"], + "type": "object", + "x-method": "session/list", + "x-side": "agent" + }, "LoadSessionRequest": { "description": "Request parameters for loading an existing session.\n\nOnly available if the Agent supports the `loadSession` capability.\n\nSee protocol docs: [Loading Sessions](https://agentclientprotocol.com/protocol/session-setup#loading-sessions)", "properties": { @@ -1118,7 +1251,11 @@ "type": "array" }, "sessionId": { - "$ref": "#/$defs/SessionId", + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], "description": "The ID of the session to load." } }, @@ -1182,86 +1319,44 @@ "McpServer": { "anyOf": [ { + "allOf": [ + { + "$ref": "#/$defs/McpServerHttp" + } + ], "description": "HTTP transport configuration\n\nOnly available when the Agent capabilities indicate `mcp_capabilities.http` is `true`.", "properties": { - "headers": { - "description": "HTTP headers to set when making requests to the MCP server.", - "items": { - "$ref": "#/$defs/HttpHeader" - }, - "type": "array" - }, - "name": { - "description": "Human-readable name identifying this MCP server.", - "type": "string" - }, "type": { "const": "http", "type": "string" - }, - "url": { - "description": "URL to the MCP server.", - "type": "string" } }, - "required": ["type", "name", "url", "headers"], + "required": ["type"], "type": "object" }, { - "description": "SSE transport configuration\n\nOnly available when the Agent capabilities indicate `mcp_capabilities.sse` is `true`.", - "properties": { - "headers": { - "description": "HTTP headers to set when making requests to the MCP server.", - "items": { - "$ref": "#/$defs/HttpHeader" - }, - "type": "array" - }, - "name": { - "description": "Human-readable name identifying this MCP server.", - "type": "string" - }, + "allOf": [ + { + "$ref": "#/$defs/McpServerSse" + } + ], + "description": "SSE transport configuration\n\nOnly available when the Agent capabilities indicate `mcp_capabilities.sse` is `true`.", + "properties": { "type": { "const": "sse", "type": "string" - }, - "url": { - "description": "URL to the MCP server.", - "type": "string" } }, - "required": ["type", "name", "url", "headers"], + "required": ["type"], "type": "object" }, { - "description": "Stdio transport configuration\n\nAll Agents MUST support this transport.", - "properties": { - "args": { - "description": "Command-line arguments to pass to the MCP server.", - "items": { - "type": "string" - }, - "type": "array" - }, - "command": { - "description": "Path to the MCP server executable.", - "type": "string" - }, - "env": { - "description": "Environment variables to set when launching the MCP server.", - "items": { - "$ref": "#/$defs/EnvVariable" - }, - "type": "array" - }, - "name": { - "description": "Human-readable name identifying this MCP server.", - "type": "string" + "allOf": [ + { + "$ref": "#/$defs/McpServerStdio" } - }, - "required": ["name", "command", "args", "env"], - "title": "stdio", - "type": "object" + ], + "description": "Stdio transport configuration\n\nAll Agents MUST support this transport." } ], "description": "Configuration for connecting to an MCP (Model Context Protocol) server.\n\nMCP servers provide tools and context that the agent can use when\nprocessing prompts.\n\nSee protocol docs: [MCP Servers](https://agentclientprotocol.com/protocol/session-setup#mcp-servers)", @@ -1269,6 +1364,88 @@ "propertyName": "type" } }, + "McpServerHttp": { + "description": "HTTP transport configuration for MCP.", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "headers": { + "description": "HTTP headers to set when making requests to the MCP server.", + "items": { + "$ref": "#/$defs/HttpHeader" + }, + "type": "array" + }, + "name": { + "description": "Human-readable name identifying this MCP server.", + "type": "string" + }, + "url": { + "description": "URL to the MCP server.", + "type": "string" + } + }, + "required": ["name", "url", "headers"], + "type": "object" + }, + "McpServerSse": { + "description": "SSE transport configuration for MCP.", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "headers": { + "description": "HTTP headers to set when making requests to the MCP server.", + "items": { + "$ref": "#/$defs/HttpHeader" + }, + "type": "array" + }, + "name": { + "description": "Human-readable name identifying this MCP server.", + "type": "string" + }, + "url": { + "description": "URL to the MCP server.", + "type": "string" + } + }, + "required": ["name", "url", "headers"], + "type": "object" + }, + "McpServerStdio": { + "description": "Stdio transport configuration for MCP.", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "args": { + "description": "Command-line arguments to pass to the MCP server.", + "items": { + "type": "string" + }, + "type": "array" + }, + "command": { + "description": "Path to the MCP server executable.", + "type": "string" + }, + "env": { + "description": "Environment variables to set when launching the MCP server.", + "items": { + "$ref": "#/$defs/EnvVariable" + }, + "type": "array" + }, + "name": { + "description": "Human-readable name identifying this MCP server.", + "type": "string" + } + }, + "required": ["name", "command", "args", "env"], + "type": "object" + }, "ModelId": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nA unique identifier for a model.", "type": "string" @@ -1284,7 +1461,11 @@ "type": ["string", "null"] }, "modelId": { - "$ref": "#/$defs/ModelId", + "allOf": [ + { + "$ref": "#/$defs/ModelId" + } + ], "description": "Unique identifier for the model." }, "name": { @@ -1347,7 +1528,11 @@ "description": "Initial mode state if supported by the Agent\n\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)" }, "sessionId": { - "$ref": "#/$defs/SessionId", + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], "description": "Unique identifier for the created session.\n\nUsed in all subsequent requests for this conversation." } }, @@ -1363,7 +1548,11 @@ "description": "Extension point for implementations" }, "kind": { - "$ref": "#/$defs/PermissionOptionKind", + "allOf": [ + { + "$ref": "#/$defs/PermissionOptionKind" + } + ], "description": "Hint about the nature of this permission option." }, "name": { @@ -1371,7 +1560,11 @@ "type": "string" }, "optionId": { - "$ref": "#/$defs/PermissionOptionId", + "allOf": [ + { + "$ref": "#/$defs/PermissionOptionId" + } + ], "description": "Unique identifier for this permission option." } }, @@ -1407,6 +1600,23 @@ } ] }, + "Plan": { + "description": "An execution plan for accomplishing complex tasks.\n\nPlans consist of multiple entries representing individual tasks or goals.\nAgents report plans to clients to provide visibility into their execution strategy.\nPlans can evolve during execution as the agent discovers new requirements or completes tasks.\n\nSee protocol docs: [Agent Plan](https://agentclientprotocol.com/protocol/agent-plan)", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "entries": { + "description": "The list of tasks to be accomplished.\n\nWhen updating a plan, the agent must send a complete list of all entries\nwith their current status. The client replaces the entire plan with each update.", + "items": { + "$ref": "#/$defs/PlanEntry" + }, + "type": "array" + } + }, + "required": ["entries"], + "type": "object" + }, "PlanEntry": { "description": "A single entry in the execution plan.\n\nRepresents a task or goal that the assistant intends to accomplish\nas part of fulfilling the user's request.\nSee protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent-plan#plan-entries)", "properties": { @@ -1418,11 +1628,19 @@ "type": "string" }, "priority": { - "$ref": "#/$defs/PlanEntryPriority", + "allOf": [ + { + "$ref": "#/$defs/PlanEntryPriority" + } + ], "description": "The relative importance of this task.\nUsed to indicate which tasks are most critical to the overall goal." }, "status": { - "$ref": "#/$defs/PlanEntryStatus", + "allOf": [ + { + "$ref": "#/$defs/PlanEntryStatus" + } + ], "description": "Current execution status of this task." } }, @@ -1507,7 +1725,11 @@ "type": "array" }, "sessionId": { - "$ref": "#/$defs/SessionId", + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], "description": "The ID of the session to send this user message to" } }, @@ -1523,7 +1745,11 @@ "description": "Extension point for implementations" }, "stopReason": { - "$ref": "#/$defs/StopReason", + "allOf": [ + { + "$ref": "#/$defs/StopReason" + } + ], "description": "Indicates why the agent stopped processing the turn." } }, @@ -1562,7 +1788,11 @@ "type": "string" }, "sessionId": { - "$ref": "#/$defs/SessionId", + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], "description": "The session ID for this request." } }, @@ -1593,7 +1823,11 @@ "description": "Extension point for implementations" }, "sessionId": { - "$ref": "#/$defs/SessionId", + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], "description": "The session ID for this request." }, "terminalId": { @@ -1617,6 +1851,21 @@ "x-method": "terminal/release", "x-side": "client" }, + "RequestId": { + "anyOf": [ + { + "type": "null" + }, + { + "format": "int64", + "type": "integer" + }, + { + "type": "string" + } + ], + "description": "JSON RPC Request Id\n\nAn identifier established by the Client that MUST contain a String, Number, or NULL value if included. If it is not included it is assumed to be a notification. The value SHOULD normally not be Null [1] and Numbers SHOULD NOT contain fractional parts [2]\n\nThe Server MUST reply with the same value in the Response object if included. This member is used to correlate the context between the two objects.\n\n[1] The use of Null as a value for the id member in a Request object is discouraged, because this specification uses a value of Null for Responses with an unknown id. Also, because JSON-RPC 1.0 uses an id value of Null for Notifications this could cause confusion in handling.\n\n[2] Fractional parts may be problematic, since many decimal fractions cannot be represented exactly as binary fractions." + }, "RequestPermissionOutcome": { "description": "The outcome of a permission request.", "discriminator": { @@ -1635,18 +1884,19 @@ "type": "object" }, { + "allOf": [ + { + "$ref": "#/$defs/SelectedPermissionOutcome" + } + ], "description": "The user selected one of the provided options.", "properties": { - "optionId": { - "$ref": "#/$defs/PermissionOptionId", - "description": "The ID of the option the user selected." - }, "outcome": { "const": "selected", "type": "string" } }, - "required": ["outcome", "optionId"], + "required": ["outcome"], "type": "object" } ] @@ -1665,68 +1915,20 @@ "type": "array" }, "sessionId": { - "$ref": "#/$defs/SessionId", + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], "description": "The session ID for this request." }, "toolCall": { - "description": "Details about the tool call requiring permission.", - "properties": { - "_meta": { - "description": "Extension point for implementations" - }, - "content": { - "description": "Replace the content collection.", - "items": { - "$ref": "#/$defs/ToolCallContent" - }, - "type": ["array", "null"] - }, - "kind": { - "anyOf": [ - { - "$ref": "#/$defs/ToolKind" - }, - { - "type": "null" - } - ], - "description": "Update the tool kind." - }, - "locations": { - "description": "Replace the locations collection.", - "items": { - "$ref": "#/$defs/ToolCallLocation" - }, - "type": ["array", "null"] - }, - "rawInput": { - "description": "Update the raw input." - }, - "rawOutput": { - "description": "Update the raw output." - }, - "status": { - "anyOf": [ - { - "$ref": "#/$defs/ToolCallStatus" - }, - { - "type": "null" - } - ], - "description": "Update the execution status." - }, - "title": { - "description": "Update the human-readable title.", - "type": ["string", "null"] - }, - "toolCallId": { - "$ref": "#/$defs/ToolCallId", - "description": "The ID of the tool call being updated." + "allOf": [ + { + "$ref": "#/$defs/ToolCallUpdate" } - }, - "required": ["toolCallId"], - "type": "object" + ], + "description": "Details about the tool call requiring permission." } }, "required": ["sessionId", "toolCall", "options"], @@ -1741,7 +1943,11 @@ "description": "Extension point for implementations" }, "outcome": { - "$ref": "#/$defs/RequestPermissionOutcome", + "allOf": [ + { + "$ref": "#/$defs/RequestPermissionOutcome" + } + ], "description": "The user's decision on the permission request." } }, @@ -1750,15 +1956,131 @@ "x-method": "session/request_permission", "x-side": "client" }, + "ResourceLink": { + "description": "A resource that the server is capable of reading, included in a prompt or tool call result.", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "annotations": { + "anyOf": [ + { + "$ref": "#/$defs/Annotations" + }, + { + "type": "null" + } + ] + }, + "description": { + "type": ["string", "null"] + }, + "mimeType": { + "type": ["string", "null"] + }, + "name": { + "type": "string" + }, + "size": { + "format": "int64", + "type": ["integer", "null"] + }, + "title": { + "type": ["string", "null"] + }, + "uri": { + "type": "string" + } + }, + "required": ["name", "uri"], + "type": "object" + }, "Role": { "description": "The sender or recipient of messages and data in a conversation.", "enum": ["assistant", "user"], "type": "string" }, + "SelectedPermissionOutcome": { + "description": "The user selected one of the provided options.", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "optionId": { + "allOf": [ + { + "$ref": "#/$defs/PermissionOptionId" + } + ], + "description": "The ID of the option the user selected." + } + }, + "required": ["optionId"], + "type": "object" + }, + "SessionCapabilities": { + "description": "Session capabilities supported by the agent.\n\nAs a baseline, all Agents **MUST** support `session/new`, `session/prompt`, `session/cancel`, and `session/update`.\n\nOptionally, they **MAY** support other session methods and notifications by specifying additional capabilities.\n\nNote: `session/load` is still handled by the top-level `load_session` capability. This will be unified in future versions of the protocol.\n\nSee protocol docs: [Session Capabilities](https://agentclientprotocol.com/protocol/initialization#session-capabilities)", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "list": { + "anyOf": [ + { + "$ref": "#/$defs/SessionListCapabilities" + }, + { + "type": "null" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nWhether the agent supports `session/list`." + } + }, + "type": "object" + }, "SessionId": { - "description": "A unique identifier for a conversation session between a client and agent.\n\nSessions maintain their own context, conversation history, and state,\nallowing multiple independent interactions with the same agent.\n\n# Example\n\n```\nuse agent_client_protocol::SessionId;\nuse std::sync::Arc;\n\nlet session_id = SessionId(Arc::from(\"sess_abc123def456\"));\n```\n\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)", + "description": "A unique identifier for a conversation session between a client and agent.\n\nSessions maintain their own context, conversation history, and state,\nallowing multiple independent interactions with the same agent.\n\nSee protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)", "type": "string" }, + "SessionInfo": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nInformation about a session returned by session/list", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "cwd": { + "description": "The working directory for this session. Must be an absolute path.", + "type": "string" + }, + "sessionId": { + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], + "description": "Unique identifier for the session" + }, + "title": { + "description": "Human-readable title for the session", + "type": ["string", "null"] + }, + "updatedAt": { + "description": "ISO 8601 timestamp of last activity", + "type": ["string", "null"] + } + }, + "required": ["sessionId", "cwd"], + "type": "object" + }, + "SessionListCapabilities": { + "description": "Capabilities for the `session/list` method.\n\nBy supplying `{}` it means that the agent supports listing of sessions.\n\nFurther capabilities can be added in the future for other means of filtering or searching the list.", + "properties": { + "_meta": { + "description": "Extension point for implementations" + } + }, + "type": "object" + }, "SessionMode": { "description": "A mode the agent can operate in.\n\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)", "properties": { @@ -1796,7 +2118,11 @@ "type": "array" }, "currentModeId": { - "$ref": "#/$defs/SessionModeId", + "allOf": [ + { + "$ref": "#/$defs/SessionModeId" + } + ], "description": "The current mode the Agent is in." } }, @@ -1817,7 +2143,11 @@ "type": "array" }, "currentModelId": { - "$ref": "#/$defs/ModelId", + "allOf": [ + { + "$ref": "#/$defs/ModelId" + } + ], "description": "The current model the Agent is in." } }, @@ -1831,11 +2161,19 @@ "description": "Extension point for implementations" }, "sessionId": { - "$ref": "#/$defs/SessionId", + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], "description": "The ID of the session this update pertains to." }, "update": { - "$ref": "#/$defs/SessionUpdate", + "allOf": [ + { + "$ref": "#/$defs/SessionUpdate" + } + ], "description": "The actual update content." } }, @@ -1851,231 +2189,131 @@ }, "oneOf": [ { + "allOf": [ + { + "$ref": "#/$defs/ContentChunk" + } + ], "description": "A chunk of the user's message being streamed.", "properties": { - "_meta": { - "description": "Extension point for implementations" - }, - "content": { - "$ref": "#/$defs/ContentBlock", - "description": "A single item of content" - }, "sessionUpdate": { "const": "user_message_chunk", "type": "string" } }, - "required": ["sessionUpdate", "content"], + "required": ["sessionUpdate"], "type": "object" }, { + "allOf": [ + { + "$ref": "#/$defs/ContentChunk" + } + ], "description": "A chunk of the agent's response being streamed.", "properties": { - "_meta": { - "description": "Extension point for implementations" - }, - "content": { - "$ref": "#/$defs/ContentBlock", - "description": "A single item of content" - }, "sessionUpdate": { "const": "agent_message_chunk", "type": "string" } }, - "required": ["sessionUpdate", "content"], + "required": ["sessionUpdate"], "type": "object" }, { + "allOf": [ + { + "$ref": "#/$defs/ContentChunk" + } + ], "description": "A chunk of the agent's internal reasoning being streamed.", "properties": { - "_meta": { - "description": "Extension point for implementations" - }, - "content": { - "$ref": "#/$defs/ContentBlock", - "description": "A single item of content" - }, "sessionUpdate": { "const": "agent_thought_chunk", "type": "string" } }, - "required": ["sessionUpdate", "content"], + "required": ["sessionUpdate"], "type": "object" }, { + "allOf": [ + { + "$ref": "#/$defs/ToolCall" + } + ], "description": "Notification that a new tool call has been initiated.", "properties": { - "_meta": { - "description": "Extension point for implementations" - }, - "content": { - "description": "Content produced by the tool call.", - "items": { - "$ref": "#/$defs/ToolCallContent" - }, - "type": "array" - }, - "kind": { - "$ref": "#/$defs/ToolKind", - "description": "The category of tool being invoked.\nHelps clients choose appropriate icons and UI treatment." - }, - "locations": { - "description": "File locations affected by this tool call.\nEnables \"follow-along\" features in clients.", - "items": { - "$ref": "#/$defs/ToolCallLocation" - }, - "type": "array" - }, - "rawInput": { - "description": "Raw input parameters sent to the tool." - }, - "rawOutput": { - "description": "Raw output returned by the tool." - }, "sessionUpdate": { "const": "tool_call", "type": "string" - }, - "status": { - "$ref": "#/$defs/ToolCallStatus", - "description": "Current execution status of the tool call." - }, - "title": { - "description": "Human-readable title describing what the tool is doing.", - "type": "string" - }, - "toolCallId": { - "$ref": "#/$defs/ToolCallId", - "description": "Unique identifier for this tool call within the session." } }, - "required": ["sessionUpdate", "toolCallId", "title"], + "required": ["sessionUpdate"], "type": "object" }, { + "allOf": [ + { + "$ref": "#/$defs/ToolCallUpdate" + } + ], "description": "Update on the status or results of a tool call.", "properties": { - "_meta": { - "description": "Extension point for implementations" - }, - "content": { - "description": "Replace the content collection.", - "items": { - "$ref": "#/$defs/ToolCallContent" - }, - "type": ["array", "null"] - }, - "kind": { - "anyOf": [ - { - "$ref": "#/$defs/ToolKind" - }, - { - "type": "null" - } - ], - "description": "Update the tool kind." - }, - "locations": { - "description": "Replace the locations collection.", - "items": { - "$ref": "#/$defs/ToolCallLocation" - }, - "type": ["array", "null"] - }, - "rawInput": { - "description": "Update the raw input." - }, - "rawOutput": { - "description": "Update the raw output." - }, "sessionUpdate": { "const": "tool_call_update", "type": "string" - }, - "status": { - "anyOf": [ - { - "$ref": "#/$defs/ToolCallStatus" - }, - { - "type": "null" - } - ], - "description": "Update the execution status." - }, - "title": { - "description": "Update the human-readable title.", - "type": ["string", "null"] - }, - "toolCallId": { - "$ref": "#/$defs/ToolCallId", - "description": "The ID of the tool call being updated." } }, - "required": ["sessionUpdate", "toolCallId"], + "required": ["sessionUpdate"], "type": "object" }, { + "allOf": [ + { + "$ref": "#/$defs/Plan" + } + ], "description": "The agent's execution plan for complex tasks.\nSee protocol docs: [Agent Plan](https://agentclientprotocol.com/protocol/agent-plan)", "properties": { - "_meta": { - "description": "Extension point for implementations" - }, - "entries": { - "description": "The list of tasks to be accomplished.\n\nWhen updating a plan, the agent must send a complete list of all entries\nwith their current status. The client replaces the entire plan with each update.", - "items": { - "$ref": "#/$defs/PlanEntry" - }, - "type": "array" - }, "sessionUpdate": { "const": "plan", "type": "string" } }, - "required": ["sessionUpdate", "entries"], + "required": ["sessionUpdate"], "type": "object" }, { + "allOf": [ + { + "$ref": "#/$defs/AvailableCommandsUpdate" + } + ], "description": "Available commands are ready or have changed", "properties": { - "_meta": { - "description": "Extension point for implementations" - }, - "availableCommands": { - "description": "Commands the agent can execute", - "items": { - "$ref": "#/$defs/AvailableCommand" - }, - "type": "array" - }, "sessionUpdate": { "const": "available_commands_update", "type": "string" } }, - "required": ["sessionUpdate", "availableCommands"], + "required": ["sessionUpdate"], "type": "object" }, { + "allOf": [ + { + "$ref": "#/$defs/CurrentModeUpdate" + } + ], "description": "The current mode of the session has changed\n\nSee protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)", "properties": { - "_meta": { - "description": "Extension point for implementations" - }, - "currentModeId": { - "$ref": "#/$defs/SessionModeId", - "description": "The ID of the current mode" - }, "sessionUpdate": { "const": "current_mode_update", "type": "string" } }, - "required": ["sessionUpdate", "currentModeId"], + "required": ["sessionUpdate"], "type": "object" } ] @@ -2087,11 +2325,19 @@ "description": "Extension point for implementations" }, "modeId": { - "$ref": "#/$defs/SessionModeId", + "allOf": [ + { + "$ref": "#/$defs/SessionModeId" + } + ], "description": "The ID of the mode to set." }, "sessionId": { - "$ref": "#/$defs/SessionId", + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], "description": "The ID of the session to set the mode for." } }, @@ -2103,7 +2349,7 @@ "SetSessionModeResponse": { "description": "Response to `session/set_mode` method.", "properties": { - "_meta": true + "_meta": {} }, "type": "object", "x-method": "session/set_mode", @@ -2116,11 +2362,19 @@ "description": "Extension point for implementations" }, "modelId": { - "$ref": "#/$defs/ModelId", + "allOf": [ + { + "$ref": "#/$defs/ModelId" + } + ], "description": "The ID of the model to set." }, "sessionId": { - "$ref": "#/$defs/SessionId", + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], "description": "The ID of the session to set the model for." } }, @@ -2170,6 +2424,19 @@ } ] }, + "Terminal": { + "description": "Embed a terminal created with `terminal/create` by its id.\n\nThe terminal must be added before calling `terminal/release`.\n\nSee protocol docs: [Terminal](https://agentclientprotocol.com/protocol/terminals)", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "terminalId": { + "type": "string" + } + }, + "required": ["terminalId"], + "type": "object" + }, "TerminalExitStatus": { "description": "Exit status of a terminal command.", "properties": { @@ -2196,7 +2463,11 @@ "description": "Extension point for implementations" }, "sessionId": { - "$ref": "#/$defs/SessionId", + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], "description": "The session ID for this request." }, "terminalId": { @@ -2240,6 +2511,29 @@ "x-method": "terminal/output", "x-side": "client" }, + "TextContent": { + "description": "Text provided to or from an LLM.", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "annotations": { + "anyOf": [ + { + "$ref": "#/$defs/Annotations" + }, + { + "type": "null" + } + ] + }, + "text": { + "type": "string" + } + }, + "required": ["text"], + "type": "object" + }, "TextResourceContents": { "description": "Text-based resource contents.", "properties": { @@ -2259,6 +2553,64 @@ "required": ["text", "uri"], "type": "object" }, + "ToolCall": { + "description": "Represents a tool call that the language model has requested.\n\nTool calls are actions that the agent executes on behalf of the language model,\nsuch as reading files, executing code, or fetching data from external sources.\n\nSee protocol docs: [Tool Calls](https://agentclientprotocol.com/protocol/tool-calls)", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "content": { + "description": "Content produced by the tool call.", + "items": { + "$ref": "#/$defs/ToolCallContent" + }, + "type": "array" + }, + "kind": { + "allOf": [ + { + "$ref": "#/$defs/ToolKind" + } + ], + "description": "The category of tool being invoked.\nHelps clients choose appropriate icons and UI treatment." + }, + "locations": { + "description": "File locations affected by this tool call.\nEnables \"follow-along\" features in clients.", + "items": { + "$ref": "#/$defs/ToolCallLocation" + }, + "type": "array" + }, + "rawInput": { + "description": "Raw input parameters sent to the tool." + }, + "rawOutput": { + "description": "Raw output returned by the tool." + }, + "status": { + "allOf": [ + { + "$ref": "#/$defs/ToolCallStatus" + } + ], + "description": "Current execution status of the tool call." + }, + "title": { + "description": "Human-readable title describing what the tool is doing.", + "type": "string" + }, + "toolCallId": { + "allOf": [ + { + "$ref": "#/$defs/ToolCallId" + } + ], + "description": "Unique identifier for this tool call within the session." + } + }, + "required": ["toolCallId", "title"], + "type": "object" + }, "ToolCallContent": { "description": "Content produced by a tool call.\n\nTool calls can produce different types of content including\nstandard content blocks (text, images) or file diffs.\n\nSee protocol docs: [Content](https://agentclientprotocol.com/protocol/tool-calls#content)", "discriminator": { @@ -2266,58 +2618,51 @@ }, "oneOf": [ { + "allOf": [ + { + "$ref": "#/$defs/Content" + } + ], "description": "Standard content block (text, images, resources).", "properties": { - "content": { - "$ref": "#/$defs/ContentBlock", - "description": "The actual content block." - }, "type": { "const": "content", "type": "string" } }, - "required": ["type", "content"], + "required": ["type"], "type": "object" }, { + "allOf": [ + { + "$ref": "#/$defs/Diff" + } + ], "description": "File modification shown as a diff.", "properties": { - "_meta": { - "description": "Extension point for implementations" - }, - "newText": { - "description": "The new content after modification.", - "type": "string" - }, - "oldText": { - "description": "The original content (None for new files).", - "type": ["string", "null"] - }, - "path": { - "description": "The file path being modified.", - "type": "string" - }, "type": { "const": "diff", "type": "string" } }, - "required": ["type", "path", "newText"], + "required": ["type"], "type": "object" }, { - "description": "Embed a terminal created with `terminal/create` by its id.\n\nThe terminal must be added before calling `terminal/release`.\n\nSee protocol docs: [Terminal](https://agentclientprotocol.com/protocol/terminal)", + "allOf": [ + { + "$ref": "#/$defs/Terminal" + } + ], + "description": "Embed a terminal created with `terminal/create` by its id.\n\nThe terminal must be added before calling `terminal/release`.\n\nSee protocol docs: [Terminal](https://agentclientprotocol.com/protocol/terminals)", "properties": { - "terminalId": { - "type": "string" - }, "type": { "const": "terminal", "type": "string" } }, - "required": ["type", "terminalId"], + "required": ["type"], "type": "object" } ] @@ -2371,6 +2716,70 @@ } ] }, + "ToolCallUpdate": { + "description": "An update to an existing tool call.\n\nUsed to report progress and results as tools execute. All fields except\nthe tool call ID are optional - only changed fields need to be included.\n\nSee protocol docs: [Updating](https://agentclientprotocol.com/protocol/tool-calls#updating)", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "content": { + "description": "Replace the content collection.", + "items": { + "$ref": "#/$defs/ToolCallContent" + }, + "type": ["array", "null"] + }, + "kind": { + "anyOf": [ + { + "$ref": "#/$defs/ToolKind" + }, + { + "type": "null" + } + ], + "description": "Update the tool kind." + }, + "locations": { + "description": "Replace the locations collection.", + "items": { + "$ref": "#/$defs/ToolCallLocation" + }, + "type": ["array", "null"] + }, + "rawInput": { + "description": "Update the raw input." + }, + "rawOutput": { + "description": "Update the raw output." + }, + "status": { + "anyOf": [ + { + "$ref": "#/$defs/ToolCallStatus" + }, + { + "type": "null" + } + ], + "description": "Update the execution status." + }, + "title": { + "description": "Update the human-readable title.", + "type": ["string", "null"] + }, + "toolCallId": { + "allOf": [ + { + "$ref": "#/$defs/ToolCallId" + } + ], + "description": "The ID of the tool call being updated." + } + }, + "required": ["toolCallId"], + "type": "object" + }, "ToolKind": { "description": "Categories of tools that can be invoked.\n\nTool kinds help clients choose appropriate icons and optimize how they\ndisplay tool execution progress.\n\nSee protocol docs: [Creating](https://agentclientprotocol.com/protocol/tool-calls#creating)", "oneOf": [ @@ -2426,6 +2835,20 @@ } ] }, + "UnstructuredCommandInput": { + "description": "All text that was typed after the command name is provided as input.", + "properties": { + "_meta": { + "description": "Extension point for implementations" + }, + "hint": { + "description": "A hint to display when the input hasn't been provided yet", + "type": "string" + } + }, + "required": ["hint"], + "type": "object" + }, "WaitForTerminalExitRequest": { "description": "Request to wait for a terminal command to exit.", "properties": { @@ -2433,7 +2856,11 @@ "description": "Extension point for implementations" }, "sessionId": { - "$ref": "#/$defs/SessionId", + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], "description": "The session ID for this request." }, "terminalId": { @@ -2482,7 +2909,11 @@ "type": "string" }, "sessionId": { - "$ref": "#/$defs/SessionId", + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], "description": "The session ID for this request." } }, @@ -2506,12 +2937,48 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "anyOf": [ { - "$ref": "#/$defs/AgentOutgoingMessage", - "title": "AgentOutgoingMessage" + "anyOf": [ + { + "$ref": "#/$defs/AgentRequest" + }, + { + "$ref": "#/$defs/AgentResponse" + }, + { + "$ref": "#/$defs/AgentNotification" + } + ], + "description": "A message (request, response, or notification) with `\"jsonrpc\": \"2.0\"` specified as\n[required by JSON-RPC 2.0 Specification][1].\n\n[1]: https://www.jsonrpc.org/specification#compatibility", + "properties": { + "jsonrpc": { + "enum": ["2.0"], + "type": "string" + } + }, + "required": ["jsonrpc"], + "type": "object" }, { - "$ref": "#/$defs/ClientOutgoingMessage", - "title": "ClientOutgoingMessage" + "anyOf": [ + { + "$ref": "#/$defs/ClientRequest" + }, + { + "$ref": "#/$defs/ClientResponse" + }, + { + "$ref": "#/$defs/ClientNotification" + } + ], + "description": "A message (request, response, or notification) with `\"jsonrpc\": \"2.0\"` specified as\n[required by JSON-RPC 2.0 Specification][1].\n\n[1]: https://www.jsonrpc.org/specification#compatibility", + "properties": { + "jsonrpc": { + "enum": ["2.0"], + "type": "string" + } + }, + "required": ["jsonrpc"], + "type": "object" } ] } diff --git a/scripts/generate.js b/scripts/generate.js index 521de199..b48f5758 100644 --- a/scripts/generate.js +++ b/scripts/generate.js @@ -1,13 +1,75 @@ #!/usr/bin/env node -import { compile } from "json-schema-to-typescript"; -import { generate } from "ts-to-zod"; +import { createClient, defineConfig } from "@hey-api/openapi-ts"; import * as fs from "fs/promises"; import { dirname } from "path"; +import * as prettier from "prettier"; -const CURRENT_SCHEMA_RELEASE = "v0.6.3"; +const CURRENT_SCHEMA_RELEASE = "v0.8.0"; -await downloadSchemas(CURRENT_SCHEMA_RELEASE); +await main(); + +async function main() { + if (!process.argv.includes("--skip-download")) { + await downloadSchemas(CURRENT_SCHEMA_RELEASE); + } + + const metadata = JSON.parse(await fs.readFile("./schema/meta.json", "utf8")); + + const schemaSrc = await fs.readFile("./schema/schema.json", "utf8"); + const jsonSchema = JSON.parse( + schemaSrc.replaceAll("#/$defs/", "#/components/schemas/"), + ); + await createClient({ + input: { + openapi: "3.1.0", + info: { + title: "Agent Client Protocol", + version: "1.0.0", + }, + components: { + schemas: jsonSchema.$defs, + }, + }, + output: { + path: "./src/schema", + format: "prettier", + }, + plugins: ["@hey-api/transformers", "@hey-api/typescript", "zod"], + }); + + const zodPath = "./src/schema/zod.gen.ts"; + const zodSrc = await fs.readFile(zodPath, "utf8"); + await fs.writeFile( + zodPath, + updateDocs(zodSrc.replace(`from "zod"`, `from "zod/v4"`)), + ); + + const tsPath = "./src/schema/types.gen.ts"; + const tsSrc = await fs.readFile(tsPath, "utf8"); + await fs.writeFile( + tsPath, + updateDocs( + tsSrc.replace( + `export type ClientOptions`, + `// eslint-disable-next-line @typescript-eslint/no-unused-vars\ntype ClientOptions`, + ), + ), + ); + + const meta = await prettier.format( + `export const AGENT_METHODS = ${JSON.stringify(metadata.agentMethods, null, 2)} as const; + +export const CLIENT_METHODS = ${JSON.stringify(metadata.clientMethods, null, 2)} as const; + +export const PROTOCOL_VERSION = ${metadata.version}; +`, + { parser: "typescript" }, + ); + const indexPath = "./src/schema/index.ts"; + const indexSrc = await fs.readFile(indexPath, "utf8"); + await fs.writeFile(indexPath, `${indexSrc}\n${meta}`); +} /** * Downloads a file from a URL to a local path @@ -39,8 +101,8 @@ async function downloadFile(url, outputPath) { async function downloadSchemas(tag) { const baseUrl = `https://github.com/agentclientprotocol/agent-client-protocol/releases/download/${tag}`; const files = [ - { url: `${baseUrl}/schema.json`, path: "./schema/schema.json" }, - { url: `${baseUrl}/meta.json`, path: "./schema/meta.json" }, + { url: `${baseUrl}/schema.unstable.json`, path: "./schema/schema.json" }, + { url: `${baseUrl}/meta.unstable.json`, path: "./schema/meta.json" }, ]; console.log(`Downloading schemas from release ${tag}...`); @@ -52,67 +114,14 @@ async function downloadSchemas(tag) { console.log("Schema files downloaded successfully\n"); } -const jsonSchema = JSON.parse( - await fs.readFile("./schema/schema.json", "utf8"), -); -const metadata = JSON.parse(await fs.readFile("./schema/meta.json", "utf8")); - -const tsSrc = await compile(jsonSchema, "Agent Client Protocol", { - additionalProperties: false, - bannerComment: false, -}); - -const zodGenerator = generate({ - sourceText: tsSrc, - bannerComment: false, - keepComments: false, -}); -const zodSchemas = zodGenerator.getZodSchemasFile(); - -const schemaTs = ` -export const AGENT_METHODS = ${JSON.stringify(metadata.agentMethods, null, 2)} as const; - -export const CLIENT_METHODS = ${JSON.stringify(metadata.clientMethods, null, 2)} as const; - -export const PROTOCOL_VERSION = ${metadata.version}; - -import { z } from "zod"; - -${markSpecificTypesAsInternal(tsSrc)} - -${markZodSchemasAsInternal(fixGeneratedZod(zodSchemas))} -`; - -function fixGeneratedZod(src) { - return src - .replace(`// Generated by ts-to-zod\nimport { z } from "zod";\n`, "") - .replace(`import * as generated from "./zod";\n`, "") - .replace(/typeof generated./g, "typeof "); -} - -function markSpecificTypesAsInternal(src) { - const typesToExclude = [ - "AgentRequest", - "AgentResponse", - "AgentNotification", - "ClientRequest", - "ClientResponse", - "ClientNotification", - ]; - +function updateDocs(src) { let result = src; - for (const typeName of typesToExclude) { - const regex = new RegExp(`(export type ${typeName}\\b)`, "g"); - result = result.replace(regex, "/** @internal */\n$1"); - } + // Replace UNSTABLE comments with @experimental at the end of the comment block + result = result.replace( + /(\/\*\*[\s\S]*?\*\*UNSTABLE\*\*[\s\S]*?)(\n\s*)\*\//g, + "$1$2*$2* @experimental$2*/", + ); return result; } - -function markZodSchemasAsInternal(src) { - // Mark all zod schemas as internal - they're implementation details - return src.replace(/(export const \w+Schema = )/g, "/** @internal */\n$1"); -} - -await fs.writeFile("src/schema.ts", schemaTs, "utf8"); diff --git a/src/acp.ts b/src/acp.ts index dd703f2b..4412a4f4 100644 --- a/src/acp.ts +++ b/src/acp.ts @@ -1,6 +1,7 @@ import { z } from "zod"; -import * as schema from "./schema.js"; -export * from "./schema.js"; +import * as schema from "./schema"; +import * as validate from "./schema/zod.gen.js"; +export * from "./schema"; export * from "./stream.js"; import type { Stream } from "./stream.js"; @@ -48,37 +49,35 @@ export class AgentSideConnection { ): Promise => { switch (method) { case schema.AGENT_METHODS.initialize: { - const validatedParams = schema.initializeRequestSchema.parse(params); + const validatedParams = validate.zInitializeRequest.parse(params); return agent.initialize(validatedParams); } case schema.AGENT_METHODS.session_new: { - const validatedParams = schema.newSessionRequestSchema.parse(params); + const validatedParams = validate.zNewSessionRequest.parse(params); return agent.newSession(validatedParams); } case schema.AGENT_METHODS.session_load: { if (!agent.loadSession) { throw RequestError.methodNotFound(method); } - const validatedParams = schema.loadSessionRequestSchema.parse(params); + const validatedParams = validate.zLoadSessionRequest.parse(params); return agent.loadSession(validatedParams); } case schema.AGENT_METHODS.session_set_mode: { if (!agent.setSessionMode) { throw RequestError.methodNotFound(method); } - const validatedParams = - schema.setSessionModeRequestSchema.parse(params); + const validatedParams = validate.zSetSessionModeRequest.parse(params); const result = await agent.setSessionMode(validatedParams); return result ?? {}; } case schema.AGENT_METHODS.authenticate: { - const validatedParams = - schema.authenticateRequestSchema.parse(params); + const validatedParams = validate.zAuthenticateRequest.parse(params); const result = await agent.authenticate(validatedParams); return result ?? {}; } case schema.AGENT_METHODS.session_prompt: { - const validatedParams = schema.promptRequestSchema.parse(params); + const validatedParams = validate.zPromptRequest.parse(params); return agent.prompt(validatedParams); } case schema.AGENT_METHODS.session_set_model: { @@ -86,7 +85,7 @@ export class AgentSideConnection { throw RequestError.methodNotFound(method); } const validatedParams = - schema.setSessionModelRequestSchema.parse(params); + validate.zSetSessionModelRequest.parse(params); const result = await agent.setSessionModel(validatedParams); return result ?? {}; } @@ -110,7 +109,7 @@ export class AgentSideConnection { ): Promise => { switch (method) { case schema.AGENT_METHODS.session_cancel: { - const validatedParams = schema.cancelNotificationSchema.parse(params); + const validatedParams = validate.zCancelNotification.parse(params); return agent.cancel(validatedParams); } default: @@ -379,7 +378,7 @@ export class TerminalHandle { * * Useful for implementing timeouts or cancellation. */ - async kill(): Promise { + async kill(): Promise { return ( (await this.#connection.sendRequest(schema.CLIENT_METHODS.terminal_kill, { sessionId: this.#sessionId, @@ -451,44 +450,40 @@ export class ClientSideConnection implements Agent { ): Promise => { switch (method) { case schema.CLIENT_METHODS.fs_write_text_file: { - const validatedParams = - schema.writeTextFileRequestSchema.parse(params); + const validatedParams = validate.zWriteTextFileRequest.parse(params); return client.writeTextFile?.(validatedParams); } case schema.CLIENT_METHODS.fs_read_text_file: { - const validatedParams = - schema.readTextFileRequestSchema.parse(params); + const validatedParams = validate.zReadTextFileRequest.parse(params); return client.readTextFile?.(validatedParams); } case schema.CLIENT_METHODS.session_request_permission: { const validatedParams = - schema.requestPermissionRequestSchema.parse(params); + validate.zRequestPermissionRequest.parse(params); return client.requestPermission(validatedParams); } case schema.CLIENT_METHODS.terminal_create: { - const validatedParams = - schema.createTerminalRequestSchema.parse(params); + const validatedParams = validate.zCreateTerminalRequest.parse(params); return client.createTerminal?.(validatedParams); } case schema.CLIENT_METHODS.terminal_output: { - const validatedParams = - schema.terminalOutputRequestSchema.parse(params); + const validatedParams = validate.zTerminalOutputRequest.parse(params); return client.terminalOutput?.(validatedParams); } case schema.CLIENT_METHODS.terminal_release: { const validatedParams = - schema.releaseTerminalRequestSchema.parse(params); + validate.zReleaseTerminalRequest.parse(params); const result = await client.releaseTerminal?.(validatedParams); return result ?? {}; } case schema.CLIENT_METHODS.terminal_wait_for_exit: { const validatedParams = - schema.waitForTerminalExitRequestSchema.parse(params); + validate.zWaitForTerminalExitRequest.parse(params); return client.waitForTerminalExit?.(validatedParams); } case schema.CLIENT_METHODS.terminal_kill: { const validatedParams = - schema.killTerminalCommandRequestSchema.parse(params); + validate.zKillTerminalCommandRequest.parse(params); const result = await client.killTerminal?.(validatedParams); return result ?? {}; } @@ -514,8 +509,7 @@ export class ClientSideConnection implements Agent { ): Promise => { switch (method) { case schema.CLIENT_METHODS.session_update: { - const validatedParams = - schema.sessionNotificationSchema.parse(params); + const validatedParams = validate.zSessionNotification.parse(params); return client.sessionUpdate(validatedParams); } default: @@ -640,6 +634,8 @@ export class ClientSideConnection implements Agent { * This capability is not part of the spec yet, and may be removed or changed at any point. * * Select a model for a given session. + * + * @experimental */ async setSessionModel( params: schema.SetSessionModelRequest, @@ -1296,7 +1292,7 @@ export interface Client { */ killTerminal?( params: schema.KillTerminalCommandRequest, - ): Promise; + ): Promise; /** * Extension method @@ -1400,6 +1396,8 @@ export interface Agent { * This capability is not part of the spec yet, and may be removed or changed at any point. * * Select a model for a given session. + * + * @experimental */ setSessionModel?( params: schema.SetSessionModelRequest, diff --git a/src/schema.ts b/src/schema.ts deleted file mode 100644 index 43f3f1c9..00000000 --- a/src/schema.ts +++ /dev/null @@ -1,3149 +0,0 @@ -export const AGENT_METHODS = { - authenticate: "authenticate", - initialize: "initialize", - session_cancel: "session/cancel", - session_load: "session/load", - session_new: "session/new", - session_prompt: "session/prompt", - session_set_mode: "session/set_mode", - session_set_model: "session/set_model", -} as const; - -export const CLIENT_METHODS = { - fs_read_text_file: "fs/read_text_file", - fs_write_text_file: "fs/write_text_file", - session_request_permission: "session/request_permission", - session_update: "session/update", - terminal_create: "terminal/create", - terminal_kill: "terminal/kill", - terminal_output: "terminal/output", - terminal_release: "terminal/release", - terminal_wait_for_exit: "terminal/wait_for_exit", -} as const; - -export const PROTOCOL_VERSION = 1; - -import { z } from "zod"; - -export type AgentClientProtocol = AgentOutgoingMessage | ClientOutgoingMessage; -/** - * A message (request, response, or notification) with `"jsonrpc": "2.0"` specified as - * [required by JSON-RPC 2.0 Specification][1]. - * - * [1]: https://www.jsonrpc.org/specification#compatibility - */ -export type AgentOutgoingMessage = Request | Response | Notification; -export type Null = null; -export type Number = number; -export type String = string; -/** - * All possible requests that an agent can send to a client. - * - * This enum is used internally for routing RPC requests. You typically won't need - * to use this directly - instead, use the methods on the [`Client`] trait. - * - * This enum encompasses all method calls from agent to client. - */ -/** @internal */ -export type AgentRequest = - | WriteTextFileRequest - | ReadTextFileRequest - | RequestPermissionRequest - | CreateTerminalRequest - | TerminalOutputRequest - | ReleaseTerminalRequest - | WaitForTerminalExitRequest - | KillTerminalCommandRequest - | ExtMethodRequest; -/** - * Content produced by a tool call. - * - * Tool calls can produce different types of content including - * standard content blocks (text, images) or file diffs. - * - * See protocol docs: [Content](https://agentclientprotocol.com/protocol/tool-calls#content) - */ -export type ToolCallContent = - | { - /** - * The actual content block. - */ - content: - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - text: string; - type: "text"; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - data: string; - mimeType: string; - type: "image"; - uri?: string | null; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - data: string; - mimeType: string; - type: "audio"; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - description?: string | null; - mimeType?: string | null; - name: string; - size?: number | null; - title?: string | null; - type: "resource_link"; - uri: string; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - resource: EmbeddedResourceResource; - type: "resource"; - }; - type: "content"; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The new content after modification. - */ - newText: string; - /** - * The original content (None for new files). - */ - oldText?: string | null; - /** - * The file path being modified. - */ - path: string; - type: "diff"; - } - | { - terminalId: string; - type: "terminal"; - }; -/** - * The sender or recipient of messages and data in a conversation. - */ -export type Role = "assistant" | "user"; -/** - * Resource content that can be embedded in a message. - */ -export type EmbeddedResourceResource = - | TextResourceContents - | BlobResourceContents; -/** - * Categories of tools that can be invoked. - * - * Tool kinds help clients choose appropriate icons and optimize how they - * display tool execution progress. - * - * See protocol docs: [Creating](https://agentclientprotocol.com/protocol/tool-calls#creating) - */ -export type ToolKind = - | "read" - | "edit" - | "delete" - | "move" - | "search" - | "execute" - | "think" - | "fetch" - | "switch_mode" - | "other"; -/** - * Execution status of a tool call. - * - * Tool calls progress through different statuses during their lifecycle. - * - * See protocol docs: [Status](https://agentclientprotocol.com/protocol/tool-calls#status) - */ -export type ToolCallStatus = "pending" | "in_progress" | "completed" | "failed"; -export type Response = - | { - result: AgentResponse; - } - | { - error: Error; - }; -/** - * All possible responses that an agent can send to a client. - * - * This enum is used internally for routing RPC responses. You typically won't need - * to use this directly - the responses are handled automatically by the connection. - * - * These are responses to the corresponding `ClientRequest` variants. - */ -/** @internal */ -export type AgentResponse = - | InitializeResponse - | AuthenticateResponse - | NewSessionResponse - | LoadSessionResponse - | SetSessionModeResponse - | PromptResponse - | SetSessionModelResponse - | ExtMethodResponse; -/** - * Unique identifier for a Session Mode. - */ -export type SessionModeId = string; -/** - * All possible notifications that an agent can send to a client. - * - * This enum is used internally for routing RPC notifications. You typically won't need - * to use this directly - use the notification methods on the [`Client`] trait instead. - * - * Notifications do not expect a response. - */ -/** @internal */ -export type AgentNotification = SessionNotification | ExtNotification; -/** - * The input specification for a command. - */ -export type AvailableCommandInput = UnstructuredCommandInput; -/** - * A message (request, response, or notification) with `"jsonrpc": "2.0"` specified as - * [required by JSON-RPC 2.0 Specification][1]. - * - * [1]: https://www.jsonrpc.org/specification#compatibility - */ -export type ClientOutgoingMessage = Request1 | Response1 | Notification1; -export type Null1 = null; -export type Number1 = number; -export type String1 = string; -/** - * All possible requests that a client can send to an agent. - * - * This enum is used internally for routing RPC requests. You typically won't need - * to use this directly - instead, use the methods on the [`Agent`] trait. - * - * This enum encompasses all method calls from client to agent. - */ -/** @internal */ -export type ClientRequest = - | InitializeRequest - | AuthenticateRequest - | NewSessionRequest - | LoadSessionRequest - | SetSessionModeRequest - | PromptRequest - | SetSessionModelRequest - | ExtMethodRequest1; -/** - * Configuration for connecting to an MCP (Model Context Protocol) server. - * - * MCP servers provide tools and context that the agent can use when - * processing prompts. - * - * See protocol docs: [MCP Servers](https://agentclientprotocol.com/protocol/session-setup#mcp-servers) - */ -export type McpServer = - | { - /** - * HTTP headers to set when making requests to the MCP server. - */ - headers: HttpHeader[]; - /** - * Human-readable name identifying this MCP server. - */ - name: string; - type: "http"; - /** - * URL to the MCP server. - */ - url: string; - } - | { - /** - * HTTP headers to set when making requests to the MCP server. - */ - headers: HttpHeader[]; - /** - * Human-readable name identifying this MCP server. - */ - name: string; - type: "sse"; - /** - * URL to the MCP server. - */ - url: string; - } - | Stdio; -/** - * Content blocks represent displayable information in the Agent Client Protocol. - * - * They provide a structured way to handle various types of user-facing content—whether - * it's text from language models, images for analysis, or embedded resources for context. - * - * Content blocks appear in: - * - User prompts sent via `session/prompt` - * - Language model output streamed through `session/update` notifications - * - Progress updates and results from tool calls - * - * This structure is compatible with the Model Context Protocol (MCP), enabling - * agents to seamlessly forward content from MCP tool outputs without transformation. - * - * See protocol docs: [Content](https://agentclientprotocol.com/protocol/content) - */ -export type ContentBlock = - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - text: string; - type: "text"; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - data: string; - mimeType: string; - type: "image"; - uri?: string | null; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - data: string; - mimeType: string; - type: "audio"; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - description?: string | null; - mimeType?: string | null; - name: string; - size?: number | null; - title?: string | null; - type: "resource_link"; - uri: string; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - resource: EmbeddedResourceResource; - type: "resource"; - }; -export type Response1 = - | { - result: ClientResponse; - } - | { - error: Error; - }; -/** - * All possible responses that a client can send to an agent. - * - * This enum is used internally for routing RPC responses. You typically won't need - * to use this directly - the responses are handled automatically by the connection. - * - * These are responses to the corresponding `AgentRequest` variants. - */ -/** @internal */ -export type ClientResponse = - | WriteTextFileResponse - | ReadTextFileResponse - | RequestPermissionResponse - | CreateTerminalResponse - | TerminalOutputResponse - | ReleaseTerminalResponse - | WaitForTerminalExitResponse - | KillTerminalResponse - | ExtMethodResponse1; -/** - * All possible notifications that a client can send to an agent. - * - * This enum is used internally for routing RPC notifications. You typically won't need - * to use this directly - use the notification methods on the [`Agent`] trait instead. - * - * Notifications do not expect a response. - */ -/** @internal */ -export type ClientNotification = CancelNotification | ExtNotification1; - -export interface Request { - /** - * JSON RPC Request Id - * - * An identifier established by the Client that MUST contain a String, Number, or NULL value if included. If it is not included it is assumed to be a notification. The value SHOULD normally not be Null [1] and Numbers SHOULD NOT contain fractional parts [2] - * - * The Server MUST reply with the same value in the Response object if included. This member is used to correlate the context between the two objects. - * - * [1] The use of Null as a value for the id member in a Request object is discouraged, because this specification uses a value of Null for Responses with an unknown id. Also, because JSON-RPC 1.0 uses an id value of Null for Notifications this could cause confusion in handling. - * - * [2] Fractional parts may be problematic, since many decimal fractions cannot be represented exactly as binary fractions. - */ - id: Null | Number | String; - method: string; - params?: AgentRequest | null; -} -/** - * Writes content to a text file in the client's file system. - * - * Only available if the client advertises the `fs.writeTextFile` capability. - * Allows the agent to create or modify files within the client's environment. - * - * See protocol docs: [Client](https://agentclientprotocol.com/protocol/overview#client) - */ -export interface WriteTextFileRequest { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The text content to write to the file. - */ - content: string; - /** - * Absolute path to the file to write. - */ - path: string; - /** - * The session ID for this request. - */ - sessionId: string; -} -/** - * Reads content from a text file in the client's file system. - * - * Only available if the client advertises the `fs.readTextFile` capability. - * Allows the agent to access file contents within the client's environment. - * - * See protocol docs: [Client](https://agentclientprotocol.com/protocol/overview#client) - */ -export interface ReadTextFileRequest { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Maximum number of lines to read. - */ - limit?: number | null; - /** - * Line number to start reading from (1-based). - */ - line?: number | null; - /** - * Absolute path to the file to read. - */ - path: string; - /** - * The session ID for this request. - */ - sessionId: string; -} -/** - * Requests permission from the user for a tool call operation. - * - * Called by the agent when it needs user authorization before executing - * a potentially sensitive operation. The client should present the options - * to the user and return their decision. - * - * If the client cancels the prompt turn via `session/cancel`, it MUST - * respond to this request with `RequestPermissionOutcome::Cancelled`. - * - * See protocol docs: [Requesting Permission](https://agentclientprotocol.com/protocol/tool-calls#requesting-permission) - */ -export interface RequestPermissionRequest { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Available permission options for the user to choose from. - */ - options: PermissionOption[]; - /** - * The session ID for this request. - */ - sessionId: string; - /** - * Details about the tool call requiring permission. - */ - toolCall: { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Replace the content collection. - */ - content?: ToolCallContent[] | null; - /** - * Update the tool kind. - */ - kind?: ToolKind | null; - /** - * Replace the locations collection. - */ - locations?: ToolCallLocation[] | null; - /** - * Update the raw input. - */ - rawInput?: { - [k: string]: unknown; - }; - /** - * Update the raw output. - */ - rawOutput?: { - [k: string]: unknown; - }; - /** - * Update the execution status. - */ - status?: ToolCallStatus | null; - /** - * Update the human-readable title. - */ - title?: string | null; - /** - * The ID of the tool call being updated. - */ - toolCallId: string; - }; -} -/** - * An option presented to the user when requesting permission. - */ -export interface PermissionOption { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Hint about the nature of this permission option. - */ - kind: "allow_once" | "allow_always" | "reject_once" | "reject_always"; - /** - * Human-readable label to display to the user. - */ - name: string; - /** - * Unique identifier for this permission option. - */ - optionId: string; -} -/** - * Optional annotations for the client. The client can use annotations to inform how objects are used or displayed - */ -export interface Annotations { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - audience?: Role[] | null; - lastModified?: string | null; - priority?: number | null; -} -/** - * Text-based resource contents. - */ -export interface TextResourceContents { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - mimeType?: string | null; - text: string; - uri: string; -} -/** - * Binary resource contents. - */ -export interface BlobResourceContents { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - blob: string; - mimeType?: string | null; - uri: string; -} -/** - * A file location being accessed or modified by a tool. - * - * Enables clients to implement "follow-along" features that track - * which files the agent is working with in real-time. - * - * See protocol docs: [Following the Agent](https://agentclientprotocol.com/protocol/tool-calls#following-the-agent) - */ -export interface ToolCallLocation { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Optional line number within the file. - */ - line?: number | null; - /** - * The file path being accessed or modified. - */ - path: string; -} -/** - * Executes a command in a new terminal - * - * Only available if the `terminal` Client capability is set to `true`. - * - * Returns a `TerminalId` that can be used with other terminal methods - * to get the current output, wait for exit, and kill the command. - * - * The `TerminalId` can also be used to embed the terminal in a tool call - * by using the `ToolCallContent::Terminal` variant. - * - * The Agent is responsible for releasing the terminal by using the `terminal/release` - * method. - * - * See protocol docs: [Terminals](https://agentclientprotocol.com/protocol/terminals) - */ -export interface CreateTerminalRequest { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Array of command arguments. - */ - args?: string[]; - /** - * The command to execute. - */ - command: string; - /** - * Working directory for the command (absolute path). - */ - cwd?: string | null; - /** - * Environment variables for the command. - */ - env?: EnvVariable[]; - /** - * Maximum number of output bytes to retain. - * - * When the limit is exceeded, the Client truncates from the beginning of the output - * to stay within the limit. - * - * The Client MUST ensure truncation happens at a character boundary to maintain valid - * string output, even if this means the retained output is slightly less than the - * specified limit. - */ - outputByteLimit?: number | null; - /** - * The session ID for this request. - */ - sessionId: string; -} -/** - * An environment variable to set when launching an MCP server. - */ -export interface EnvVariable { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The name of the environment variable. - */ - name: string; - /** - * The value to set for the environment variable. - */ - value: string; -} -/** - * Gets the terminal output and exit status - * - * Returns the current content in the terminal without waiting for the command to exit. - * If the command has already exited, the exit status is included. - * - * See protocol docs: [Terminals](https://agentclientprotocol.com/protocol/terminals) - */ -export interface TerminalOutputRequest { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The session ID for this request. - */ - sessionId: string; - /** - * The ID of the terminal to get output from. - */ - terminalId: string; -} -/** - * Releases a terminal - * - * The command is killed if it hasn't exited yet. Use `terminal/wait_for_exit` - * to wait for the command to exit before releasing the terminal. - * - * After release, the `TerminalId` can no longer be used with other `terminal/*` methods, - * but tool calls that already contain it, continue to display its output. - * - * The `terminal/kill` method can be used to terminate the command without releasing - * the terminal, allowing the Agent to call `terminal/output` and other methods. - * - * See protocol docs: [Terminals](https://agentclientprotocol.com/protocol/terminals) - */ -export interface ReleaseTerminalRequest { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The session ID for this request. - */ - sessionId: string; - /** - * The ID of the terminal to release. - */ - terminalId: string; -} -/** - * Waits for the terminal command to exit and return its exit status - * - * See protocol docs: [Terminals](https://agentclientprotocol.com/protocol/terminals) - */ -export interface WaitForTerminalExitRequest { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The session ID for this request. - */ - sessionId: string; - /** - * The ID of the terminal to wait for. - */ - terminalId: string; -} -/** - * Kills the terminal command without releasing the terminal - * - * While `terminal/release` will also kill the command, this method will keep - * the `TerminalId` valid so it can be used with other methods. - * - * This method can be helpful when implementing command timeouts which terminate - * the command as soon as elapsed, and then get the final output so it can be sent - * to the model. - * - * Note: `terminal/release` when `TerminalId` is no longer needed. - * - * See protocol docs: [Terminals](https://agentclientprotocol.com/protocol/terminals) - */ -export interface KillTerminalCommandRequest { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The session ID for this request. - */ - sessionId: string; - /** - * The ID of the terminal to kill. - */ - terminalId: string; -} -/** - * Handles extension method requests from the agent. - * - * Allows the Agent to send an arbitrary request that is not part of the ACP spec. - * Extension methods provide a way to add custom functionality while maintaining - * protocol compatibility. - * - * See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - */ -export interface ExtMethodRequest { - [k: string]: unknown; -} -/** - * Response from the initialize method. - * - * Contains the negotiated protocol version and agent capabilities. - * - * See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization) - */ -export interface InitializeResponse { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - agentCapabilities?: AgentCapabilities; - /** - * Information about the Agent name and version sent to the Client. - * - * Note: in future versions of the protocol, this will be required. - */ - agentInfo?: Implementation | null; - /** - * Authentication methods supported by the agent. - */ - authMethods?: AuthMethod[]; - /** - * The protocol version the client specified if supported by the agent, - * or the latest protocol version supported by the agent. - * - * The client should disconnect, if it doesn't support this version. - */ - protocolVersion: number; -} -/** - * Capabilities supported by the agent. - */ -export interface AgentCapabilities { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Whether the agent supports `session/load`. - */ - loadSession?: boolean; - mcpCapabilities?: McpCapabilities; - promptCapabilities?: PromptCapabilities; -} -/** - * MCP capabilities supported by the agent. - */ -export interface McpCapabilities { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Agent supports [`McpServer::Http`]. - */ - http?: boolean; - /** - * Agent supports [`McpServer::Sse`]. - */ - sse?: boolean; -} -/** - * Prompt capabilities supported by the agent. - */ -export interface PromptCapabilities { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Agent supports [`ContentBlock::Audio`]. - */ - audio?: boolean; - /** - * Agent supports embedded context in `session/prompt` requests. - * - * When enabled, the Client is allowed to include [`ContentBlock::Resource`] - * in prompt requests for pieces of context that are referenced in the message. - */ - embeddedContext?: boolean; - /** - * Agent supports [`ContentBlock::Image`]. - */ - image?: boolean; -} -/** - * Describes the name and version of an MCP implementation, with an optional - * title for UI representation. - */ -export interface Implementation { - /** - * Intended for programmatic or logical use, but can be used as a display - * name fallback if title isn’t present. - */ - name: string; - /** - * Intended for UI and end-user contexts — optimized to be human-readable - * and easily understood. - * - * If not provided, the name should be used for display. - */ - title?: string | null; - /** - * Version of the implementation. Can be displayed to the user or used - * for debugging or metrics purposes. - */ - version: string; -} -/** - * Describes an available authentication method. - */ -export interface AuthMethod { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Optional description providing more details about this authentication method. - */ - description?: string | null; - /** - * Unique identifier for this authentication method. - */ - id: string; - /** - * Human-readable name of the authentication method. - */ - name: string; -} -/** - * Response to authenticate method - */ -export interface AuthenticateResponse { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; -} -/** - * Response from creating a new session. - * - * See protocol docs: [Creating a Session](https://agentclientprotocol.com/protocol/session-setup#creating-a-session) - */ -export interface NewSessionResponse { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * **UNSTABLE** - * - * This capability is not part of the spec yet, and may be removed or changed at any point. - * - * Initial model state if supported by the Agent - */ - models?: SessionModelState | null; - /** - * Initial mode state if supported by the Agent - * - * See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) - */ - modes?: SessionModeState | null; - /** - * Unique identifier for the created session. - * - * Used in all subsequent requests for this conversation. - */ - sessionId: string; -} -/** - * **UNSTABLE** - * - * This capability is not part of the spec yet, and may be removed or changed at any point. - * - * The set of models and the one currently active. - */ -export interface SessionModelState { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The set of models that the Agent can use - */ - availableModels: ModelInfo[]; - /** - * The current model the Agent is in. - */ - currentModelId: string; -} -/** - * **UNSTABLE** - * - * This capability is not part of the spec yet, and may be removed or changed at any point. - * - * Information about a selectable model. - */ -export interface ModelInfo { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Optional description of the model. - */ - description?: string | null; - /** - * Unique identifier for the model. - */ - modelId: string; - /** - * Human-readable name of the model. - */ - name: string; -} -/** - * The set of modes and the one currently active. - */ -export interface SessionModeState { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The set of modes that the Agent can operate in - */ - availableModes: SessionMode[]; - /** - * Unique identifier for a Session Mode. - */ - currentModeId: string; -} -/** - * A mode the agent can operate in. - * - * See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) - */ -export interface SessionMode { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - description?: string | null; - id: SessionModeId; - name: string; -} -/** - * Response from loading an existing session. - */ -export interface LoadSessionResponse { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * **UNSTABLE** - * - * This capability is not part of the spec yet, and may be removed or changed at any point. - * - * Initial model state if supported by the Agent - */ - models?: SessionModelState | null; - /** - * Initial mode state if supported by the Agent - * - * See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) - */ - modes?: SessionModeState | null; -} -/** - * Response to `session/set_mode` method. - */ -export interface SetSessionModeResponse { - _meta?: unknown; -} -/** - * Response from processing a user prompt. - * - * See protocol docs: [Check for Completion](https://agentclientprotocol.com/protocol/prompt-turn#4-check-for-completion) - */ -export interface PromptResponse { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Indicates why the agent stopped processing the turn. - */ - stopReason: - | "end_turn" - | "max_tokens" - | "max_turn_requests" - | "refusal" - | "cancelled"; -} -/** - * **UNSTABLE** - * - * This capability is not part of the spec yet, and may be removed or changed at any point. - * - * Response to `session/set_model` method. - */ -export interface SetSessionModelResponse { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; -} -export interface ExtMethodResponse { - [k: string]: unknown; -} -/** - * JSON-RPC error object. - * - * Represents an error that occurred during method execution, following the - * JSON-RPC 2.0 error object specification with optional additional data. - * - * See protocol docs: [JSON-RPC Error Object](https://www.jsonrpc.org/specification#error_object) - */ -export interface Error { - /** - * A number indicating the error type that occurred. - * This must be an integer as defined in the JSON-RPC specification. - */ - code: number; - /** - * Optional primitive or structured value that contains additional information about the error. - * This may include debugging information or context-specific details. - */ - data?: { - [k: string]: unknown; - }; - /** - * A string providing a short description of the error. - * The message should be limited to a concise single sentence. - */ - message: string; -} -export interface Notification { - method: string; - params?: AgentNotification | null; -} -/** - * Handles session update notifications from the agent. - * - * This is a notification endpoint (no response expected) that receives - * real-time updates about session progress, including message chunks, - * tool calls, and execution plans. - * - * Note: Clients SHOULD continue accepting tool call updates even after - * sending a `session/cancel` notification, as the agent may send final - * updates before responding with the cancelled stop reason. - * - * See protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/prompt-turn#3-agent-reports-output) - */ -export interface SessionNotification { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The ID of the session this update pertains to. - */ - sessionId: string; - /** - * The actual update content. - */ - update: - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * A single item of content - */ - content: - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - text: string; - type: "text"; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - data: string; - mimeType: string; - type: "image"; - uri?: string | null; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - data: string; - mimeType: string; - type: "audio"; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - description?: string | null; - mimeType?: string | null; - name: string; - size?: number | null; - title?: string | null; - type: "resource_link"; - uri: string; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - resource: EmbeddedResourceResource; - type: "resource"; - }; - sessionUpdate: "user_message_chunk"; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * A single item of content - */ - content: - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - text: string; - type: "text"; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - data: string; - mimeType: string; - type: "image"; - uri?: string | null; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - data: string; - mimeType: string; - type: "audio"; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - description?: string | null; - mimeType?: string | null; - name: string; - size?: number | null; - title?: string | null; - type: "resource_link"; - uri: string; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - resource: EmbeddedResourceResource; - type: "resource"; - }; - sessionUpdate: "agent_message_chunk"; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * A single item of content - */ - content: - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - text: string; - type: "text"; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - data: string; - mimeType: string; - type: "image"; - uri?: string | null; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - data: string; - mimeType: string; - type: "audio"; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - description?: string | null; - mimeType?: string | null; - name: string; - size?: number | null; - title?: string | null; - type: "resource_link"; - uri: string; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - annotations?: Annotations | null; - resource: EmbeddedResourceResource; - type: "resource"; - }; - sessionUpdate: "agent_thought_chunk"; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Content produced by the tool call. - */ - content?: ToolCallContent[]; - /** - * The category of tool being invoked. - * Helps clients choose appropriate icons and UI treatment. - */ - kind?: - | "read" - | "edit" - | "delete" - | "move" - | "search" - | "execute" - | "think" - | "fetch" - | "switch_mode" - | "other"; - /** - * File locations affected by this tool call. - * Enables "follow-along" features in clients. - */ - locations?: ToolCallLocation[]; - /** - * Raw input parameters sent to the tool. - */ - rawInput?: { - [k: string]: unknown; - }; - /** - * Raw output returned by the tool. - */ - rawOutput?: { - [k: string]: unknown; - }; - sessionUpdate: "tool_call"; - /** - * Current execution status of the tool call. - */ - status?: "pending" | "in_progress" | "completed" | "failed"; - /** - * Human-readable title describing what the tool is doing. - */ - title: string; - /** - * Unique identifier for this tool call within the session. - */ - toolCallId: string; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Replace the content collection. - */ - content?: ToolCallContent[] | null; - /** - * Update the tool kind. - */ - kind?: ToolKind | null; - /** - * Replace the locations collection. - */ - locations?: ToolCallLocation[] | null; - /** - * Update the raw input. - */ - rawInput?: { - [k: string]: unknown; - }; - /** - * Update the raw output. - */ - rawOutput?: { - [k: string]: unknown; - }; - sessionUpdate: "tool_call_update"; - /** - * Update the execution status. - */ - status?: ToolCallStatus | null; - /** - * Update the human-readable title. - */ - title?: string | null; - /** - * The ID of the tool call being updated. - */ - toolCallId: string; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The list of tasks to be accomplished. - * - * When updating a plan, the agent must send a complete list of all entries - * with their current status. The client replaces the entire plan with each update. - */ - entries: PlanEntry[]; - sessionUpdate: "plan"; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Commands the agent can execute - */ - availableCommands: AvailableCommand[]; - sessionUpdate: "available_commands_update"; - } - | { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The ID of the current mode - */ - currentModeId: string; - sessionUpdate: "current_mode_update"; - }; -} -/** - * A single entry in the execution plan. - * - * Represents a task or goal that the assistant intends to accomplish - * as part of fulfilling the user's request. - * See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent-plan#plan-entries) - */ -export interface PlanEntry { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Human-readable description of what this task aims to accomplish. - */ - content: string; - /** - * The relative importance of this task. - * Used to indicate which tasks are most critical to the overall goal. - */ - priority: "high" | "medium" | "low"; - /** - * Current execution status of this task. - */ - status: "pending" | "in_progress" | "completed"; -} -/** - * Information about a command. - */ -export interface AvailableCommand { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Human-readable description of what the command does. - */ - description: string; - /** - * Input for the command if required - */ - input?: AvailableCommandInput | null; - /** - * Command name (e.g., `create_plan`, `research_codebase`). - */ - name: string; -} -/** - * All text that was typed after the command name is provided as input. - */ -export interface UnstructuredCommandInput { - /** - * A hint to display when the input hasn't been provided yet - */ - hint: string; -} -/** - * Handles extension notifications from the agent. - * - * Allows the Agent to send an arbitrary notification that is not part of the ACP spec. - * Extension notifications provide a way to send one-way messages for custom functionality - * while maintaining protocol compatibility. - * - * See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - */ -export interface ExtNotification { - [k: string]: unknown; -} -export interface Request1 { - /** - * JSON RPC Request Id - * - * An identifier established by the Client that MUST contain a String, Number, or NULL value if included. If it is not included it is assumed to be a notification. The value SHOULD normally not be Null [1] and Numbers SHOULD NOT contain fractional parts [2] - * - * The Server MUST reply with the same value in the Response object if included. This member is used to correlate the context between the two objects. - * - * [1] The use of Null as a value for the id member in a Request object is discouraged, because this specification uses a value of Null for Responses with an unknown id. Also, because JSON-RPC 1.0 uses an id value of Null for Notifications this could cause confusion in handling. - * - * [2] Fractional parts may be problematic, since many decimal fractions cannot be represented exactly as binary fractions. - */ - id: Null1 | Number1 | String1; - method: string; - params?: ClientRequest | null; -} -/** - * Establishes the connection with a client and negotiates protocol capabilities. - * - * This method is called once at the beginning of the connection to: - * - Negotiate the protocol version to use - * - Exchange capability information between client and agent - * - Determine available authentication methods - * - * The agent should respond with its supported protocol version and capabilities. - * - * See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization) - */ -export interface InitializeRequest { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - clientCapabilities?: ClientCapabilities; - /** - * Information about the Client name and version sent to the Agent. - * - * Note: in future versions of the protocol, this will be required. - */ - clientInfo?: Implementation | null; - /** - * The latest protocol version supported by the client. - */ - protocolVersion: number; -} -/** - * Capabilities supported by the client. - */ -export interface ClientCapabilities { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - fs?: FileSystemCapability; - /** - * Whether the Client support all `terminal/*` methods. - */ - terminal?: boolean; -} -/** - * File system capabilities supported by the client. - * Determines which file operations the agent can request. - */ -export interface FileSystemCapability { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Whether the Client supports `fs/read_text_file` requests. - */ - readTextFile?: boolean; - /** - * Whether the Client supports `fs/write_text_file` requests. - */ - writeTextFile?: boolean; -} -/** - * Authenticates the client using the specified authentication method. - * - * Called when the agent requires authentication before allowing session creation. - * The client provides the authentication method ID that was advertised during initialization. - * - * After successful authentication, the client can proceed to create sessions with - * `new_session` without receiving an `auth_required` error. - * - * See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization) - */ -export interface AuthenticateRequest { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The ID of the authentication method to use. - * Must be one of the methods advertised in the initialize response. - */ - methodId: string; -} -/** - * Creates a new conversation session with the agent. - * - * Sessions represent independent conversation contexts with their own history and state. - * - * The agent should: - * - Create a new session context - * - Connect to any specified MCP servers - * - Return a unique session ID for future requests - * - * May return an `auth_required` error if the agent requires authentication. - * - * See protocol docs: [Session Setup](https://agentclientprotocol.com/protocol/session-setup) - */ -export interface NewSessionRequest { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The working directory for this session. Must be an absolute path. - */ - cwd: string; - /** - * List of MCP (Model Context Protocol) servers the agent should connect to. - */ - mcpServers: McpServer[]; -} -/** - * An HTTP header to set when making requests to the MCP server. - */ -export interface HttpHeader { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The name of the HTTP header. - */ - name: string; - /** - * The value to set for the HTTP header. - */ - value: string; -} -/** - * Stdio transport configuration - * - * All Agents MUST support this transport. - */ -export interface Stdio { - /** - * Command-line arguments to pass to the MCP server. - */ - args: string[]; - /** - * Path to the MCP server executable. - */ - command: string; - /** - * Environment variables to set when launching the MCP server. - */ - env: EnvVariable[]; - /** - * Human-readable name identifying this MCP server. - */ - name: string; -} -/** - * Loads an existing session to resume a previous conversation. - * - * This method is only available if the agent advertises the `loadSession` capability. - * - * The agent should: - * - Restore the session context and conversation history - * - Connect to the specified MCP servers - * - Stream the entire conversation history back to the client via notifications - * - * See protocol docs: [Loading Sessions](https://agentclientprotocol.com/protocol/session-setup#loading-sessions) - */ -export interface LoadSessionRequest { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The working directory for this session. - */ - cwd: string; - /** - * List of MCP servers to connect to for this session. - */ - mcpServers: McpServer[]; - /** - * The ID of the session to load. - */ - sessionId: string; -} -/** - * Sets the current mode for a session. - * - * Allows switching between different agent modes (e.g., "ask", "architect", "code") - * that affect system prompts, tool availability, and permission behaviors. - * - * The mode must be one of the modes advertised in `availableModes` during session - * creation or loading. Agents may also change modes autonomously and notify the - * client via `current_mode_update` notifications. - * - * This method can be called at any time during a session, whether the Agent is - * idle or actively generating a response. - * - * See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) - */ -export interface SetSessionModeRequest { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Unique identifier for a Session Mode. - */ - modeId: string; - /** - * The ID of the session to set the mode for. - */ - sessionId: string; -} -/** - * Processes a user prompt within a session. - * - * This method handles the whole lifecycle of a prompt: - * - Receives user messages with optional context (files, images, etc.) - * - Processes the prompt using language models - * - Reports language model content and tool calls to the Clients - * - Requests permission to run tools - * - Executes any requested tool calls - * - Returns when the turn is complete with a stop reason - * - * See protocol docs: [Prompt Turn](https://agentclientprotocol.com/protocol/prompt-turn) - */ -export interface PromptRequest { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The blocks of content that compose the user's message. - * - * As a baseline, the Agent MUST support [`ContentBlock::Text`] and [`ContentBlock::ResourceLink`], - * while other variants are optionally enabled via [`PromptCapabilities`]. - * - * The Client MUST adapt its interface according to [`PromptCapabilities`]. - * - * The client MAY include referenced pieces of context as either - * [`ContentBlock::Resource`] or [`ContentBlock::ResourceLink`]. - * - * When available, [`ContentBlock::Resource`] is preferred - * as it avoids extra round-trips and allows the message to include - * pieces of context from sources the agent may not have access to. - */ - prompt: ContentBlock[]; - /** - * The ID of the session to send this user message to - */ - sessionId: string; -} -/** - * **UNSTABLE** - * - * This capability is not part of the spec yet, and may be removed or changed at any point. - * - * Select a model for a given session. - */ -export interface SetSessionModelRequest { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The ID of the model to set. - */ - modelId: string; - /** - * The ID of the session to set the model for. - */ - sessionId: string; -} -/** - * Handles extension method requests from the client. - * - * Extension methods provide a way to add custom functionality while maintaining - * protocol compatibility. - * - * See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - */ -export interface ExtMethodRequest1 { - [k: string]: unknown; -} -/** - * Response to `fs/write_text_file` - */ -export interface WriteTextFileResponse { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; -} -/** - * Response containing the contents of a text file. - */ -export interface ReadTextFileResponse { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - content: string; -} -/** - * Response to a permission request. - */ -export interface RequestPermissionResponse { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The user's decision on the permission request. - */ - outcome: - | { - outcome: "cancelled"; - } - | { - /** - * The ID of the option the user selected. - */ - optionId: string; - outcome: "selected"; - }; -} -/** - * Response containing the ID of the created terminal. - */ -export interface CreateTerminalResponse { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The unique identifier for the created terminal. - */ - terminalId: string; -} -/** - * Response containing the terminal output and exit status. - */ -export interface TerminalOutputResponse { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * Exit status if the command has completed. - */ - exitStatus?: TerminalExitStatus | null; - /** - * The terminal output captured so far. - */ - output: string; - /** - * Whether the output was truncated due to byte limits. - */ - truncated: boolean; -} -/** - * Exit status of a terminal command. - */ -export interface TerminalExitStatus { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The process exit code (may be null if terminated by signal). - */ - exitCode?: number | null; - /** - * The signal that terminated the process (may be null if exited normally). - */ - signal?: string | null; -} -/** - * Response to terminal/release method - */ -export interface ReleaseTerminalResponse { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; -} -/** - * Response containing the exit status of a terminal command. - */ -export interface WaitForTerminalExitResponse { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The process exit code (may be null if terminated by signal). - */ - exitCode?: number | null; - /** - * The signal that terminated the process (may be null if exited normally). - */ - signal?: string | null; -} -/** - * Response to terminal/kill command method - */ -export interface KillTerminalResponse { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; -} -export interface ExtMethodResponse1 { - [k: string]: unknown; -} -export interface Notification1 { - method: string; - params?: ClientNotification | null; -} -/** - * Cancels ongoing operations for a session. - * - * This is a notification sent by the client to cancel an ongoing prompt turn. - * - * Upon receiving this notification, the Agent SHOULD: - * - Stop all language model requests as soon as possible - * - Abort all tool call invocations in progress - * - Send any pending `session/update` notifications - * - Respond to the original `session/prompt` request with `StopReason::Cancelled` - * - * See protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/prompt-turn#cancellation) - */ -export interface CancelNotification { - /** - * Extension point for implementations - */ - _meta?: { - [k: string]: unknown; - }; - /** - * The ID of the session to cancel operations for. - */ - sessionId: string; -} -/** - * Handles extension notifications from the client. - * - * Extension notifications provide a way to send one-way messages for custom functionality - * while maintaining protocol compatibility. - * - * See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - */ -export interface ExtNotification1 { - [k: string]: unknown; -} - -/** @internal */ -export const nullSchema = z.null(); - -/** @internal */ -export const numberSchema = z.number(); - -/** @internal */ -export const stringSchema = z.string(); - -/** @internal */ -export const writeTextFileRequestSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - content: z.string(), - path: z.string(), - sessionId: z.string(), -}); - -/** @internal */ -export const readTextFileRequestSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - limit: z.number().optional().nullable(), - line: z.number().optional().nullable(), - path: z.string(), - sessionId: z.string(), -}); - -/** @internal */ -export const terminalOutputRequestSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - sessionId: z.string(), - terminalId: z.string(), -}); - -/** @internal */ -export const releaseTerminalRequestSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - sessionId: z.string(), - terminalId: z.string(), -}); - -/** @internal */ -export const waitForTerminalExitRequestSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - sessionId: z.string(), - terminalId: z.string(), -}); - -/** @internal */ -export const killTerminalCommandRequestSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - sessionId: z.string(), - terminalId: z.string(), -}); - -/** @internal */ -export const extMethodRequestSchema = z.record(z.unknown()); - -/** @internal */ -export const roleSchema = z.union([z.literal("assistant"), z.literal("user")]); - -/** @internal */ -export const textResourceContentsSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - mimeType: z.string().optional().nullable(), - text: z.string(), - uri: z.string(), -}); - -/** @internal */ -export const blobResourceContentsSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - blob: z.string(), - mimeType: z.string().optional().nullable(), - uri: z.string(), -}); - -/** @internal */ -export const toolKindSchema = z.union([ - z.literal("read"), - z.literal("edit"), - z.literal("delete"), - z.literal("move"), - z.literal("search"), - z.literal("execute"), - z.literal("think"), - z.literal("fetch"), - z.literal("switch_mode"), - z.literal("other"), -]); - -/** @internal */ -export const toolCallStatusSchema = z.union([ - z.literal("pending"), - z.literal("in_progress"), - z.literal("completed"), - z.literal("failed"), -]); - -/** @internal */ -export const errorSchema = z.object({ - code: z.number(), - data: z.record(z.unknown()).optional(), - message: z.string(), -}); - -/** @internal */ -export const authenticateResponseSchema = z.object({ - _meta: z.record(z.unknown()).optional(), -}); - -/** @internal */ -export const setSessionModeResponseSchema = z.object({ - _meta: z.unknown().optional(), -}); - -/** @internal */ -export const promptResponseSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - stopReason: z.union([ - z.literal("end_turn"), - z.literal("max_tokens"), - z.literal("max_turn_requests"), - z.literal("refusal"), - z.literal("cancelled"), - ]), -}); - -/** @internal */ -export const setSessionModelResponseSchema = z.object({ - _meta: z.record(z.unknown()).optional(), -}); - -/** @internal */ -export const extMethodResponseSchema = z.record(z.unknown()); - -/** @internal */ -export const sessionModeIdSchema = z.string(); - -/** @internal */ -export const extNotificationSchema = z.record(z.unknown()); - -/** @internal */ -export const unstructuredCommandInputSchema = z.object({ - hint: z.string(), -}); - -/** @internal */ -export const null1Schema = z.null(); - -/** @internal */ -export const number1Schema = z.number(); - -/** @internal */ -export const string1Schema = z.string(); - -/** @internal */ -export const authenticateRequestSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - methodId: z.string(), -}); - -/** @internal */ -export const setSessionModeRequestSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - modeId: z.string(), - sessionId: z.string(), -}); - -/** @internal */ -export const setSessionModelRequestSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - modelId: z.string(), - sessionId: z.string(), -}); - -/** @internal */ -export const extMethodRequest1Schema = z.record(z.unknown()); - -/** @internal */ -export const httpHeaderSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - name: z.string(), - value: z.string(), -}); - -/** @internal */ -export const annotationsSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - audience: z.array(roleSchema).optional().nullable(), - lastModified: z.string().optional().nullable(), - priority: z.number().optional().nullable(), -}); - -/** @internal */ -export const embeddedResourceResourceSchema = z.union([ - textResourceContentsSchema, - blobResourceContentsSchema, -]); - -/** @internal */ -export const writeTextFileResponseSchema = z.object({ - _meta: z.record(z.unknown()).optional(), -}); - -/** @internal */ -export const readTextFileResponseSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - content: z.string(), -}); - -/** @internal */ -export const requestPermissionResponseSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - outcome: z.union([ - z.object({ - outcome: z.literal("cancelled"), - }), - z.object({ - optionId: z.string(), - outcome: z.literal("selected"), - }), - ]), -}); - -/** @internal */ -export const createTerminalResponseSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - terminalId: z.string(), -}); - -/** @internal */ -export const releaseTerminalResponseSchema = z.object({ - _meta: z.record(z.unknown()).optional(), -}); - -/** @internal */ -export const waitForTerminalExitResponseSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - exitCode: z.number().optional().nullable(), - signal: z.string().optional().nullable(), -}); - -/** @internal */ -export const killTerminalResponseSchema = z.object({ - _meta: z.record(z.unknown()).optional(), -}); - -/** @internal */ -export const extMethodResponse1Schema = z.record(z.unknown()); - -/** @internal */ -export const cancelNotificationSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - sessionId: z.string(), -}); - -/** @internal */ -export const extNotification1Schema = z.record(z.unknown()); - -/** @internal */ -export const permissionOptionSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - kind: z.union([ - z.literal("allow_once"), - z.literal("allow_always"), - z.literal("reject_once"), - z.literal("reject_always"), - ]), - name: z.string(), - optionId: z.string(), -}); - -/** @internal */ -export const toolCallContentSchema = z.union([ - z.object({ - content: z.union([ - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - text: z.string(), - type: z.literal("text"), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - data: z.string(), - mimeType: z.string(), - type: z.literal("image"), - uri: z.string().optional().nullable(), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - data: z.string(), - mimeType: z.string(), - type: z.literal("audio"), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - description: z.string().optional().nullable(), - mimeType: z.string().optional().nullable(), - name: z.string(), - size: z.number().optional().nullable(), - title: z.string().optional().nullable(), - type: z.literal("resource_link"), - uri: z.string(), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - resource: embeddedResourceResourceSchema, - type: z.literal("resource"), - }), - ]), - type: z.literal("content"), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - newText: z.string(), - oldText: z.string().optional().nullable(), - path: z.string(), - type: z.literal("diff"), - }), - z.object({ - terminalId: z.string(), - type: z.literal("terminal"), - }), -]); - -/** @internal */ -export const toolCallLocationSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - line: z.number().optional().nullable(), - path: z.string(), -}); - -/** @internal */ -export const envVariableSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - name: z.string(), - value: z.string(), -}); - -/** @internal */ -export const implementationSchema = z.object({ - name: z.string(), - title: z.string().optional().nullable(), - version: z.string(), -}); - -/** @internal */ -export const authMethodSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - description: z.string().optional().nullable(), - id: z.string(), - name: z.string(), -}); - -/** @internal */ -export const mcpCapabilitiesSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - http: z.boolean().optional(), - sse: z.boolean().optional(), -}); - -/** @internal */ -export const promptCapabilitiesSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - audio: z.boolean().optional(), - embeddedContext: z.boolean().optional(), - image: z.boolean().optional(), -}); - -/** @internal */ -export const modelInfoSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - description: z.string().optional().nullable(), - modelId: z.string(), - name: z.string(), -}); - -/** @internal */ -export const sessionModeSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - description: z.string().optional().nullable(), - id: sessionModeIdSchema, - name: z.string(), -}); - -/** @internal */ -export const sessionModelStateSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - availableModels: z.array(modelInfoSchema), - currentModelId: z.string(), -}); - -/** @internal */ -export const sessionModeStateSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - availableModes: z.array(sessionModeSchema), - currentModeId: z.string(), -}); - -/** @internal */ -export const planEntrySchema = z.object({ - _meta: z.record(z.unknown()).optional(), - content: z.string(), - priority: z.union([z.literal("high"), z.literal("medium"), z.literal("low")]), - status: z.union([ - z.literal("pending"), - z.literal("in_progress"), - z.literal("completed"), - ]), -}); - -/** @internal */ -export const availableCommandInputSchema = unstructuredCommandInputSchema; - -/** @internal */ -export const fileSystemCapabilitySchema = z.object({ - _meta: z.record(z.unknown()).optional(), - readTextFile: z.boolean().optional(), - writeTextFile: z.boolean().optional(), -}); - -/** @internal */ -export const stdioSchema = z.object({ - args: z.array(z.string()), - command: z.string(), - env: z.array(envVariableSchema), - name: z.string(), -}); - -/** @internal */ -export const mcpServerSchema = z.union([ - z.object({ - headers: z.array(httpHeaderSchema), - name: z.string(), - type: z.literal("http"), - url: z.string(), - }), - z.object({ - headers: z.array(httpHeaderSchema), - name: z.string(), - type: z.literal("sse"), - url: z.string(), - }), - stdioSchema, -]); - -/** @internal */ -export const contentBlockSchema = z.union([ - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - text: z.string(), - type: z.literal("text"), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - data: z.string(), - mimeType: z.string(), - type: z.literal("image"), - uri: z.string().optional().nullable(), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - data: z.string(), - mimeType: z.string(), - type: z.literal("audio"), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - description: z.string().optional().nullable(), - mimeType: z.string().optional().nullable(), - name: z.string(), - size: z.number().optional().nullable(), - title: z.string().optional().nullable(), - type: z.literal("resource_link"), - uri: z.string(), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - resource: embeddedResourceResourceSchema, - type: z.literal("resource"), - }), -]); - -/** @internal */ -export const terminalExitStatusSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - exitCode: z.number().optional().nullable(), - signal: z.string().optional().nullable(), -}); - -/** @internal */ -export const clientNotificationSchema = z.union([ - cancelNotificationSchema, - extNotification1Schema, -]); - -/** @internal */ -export const requestPermissionRequestSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - options: z.array(permissionOptionSchema), - sessionId: z.string(), - toolCall: z.object({ - _meta: z.record(z.unknown()).optional(), - content: z.array(toolCallContentSchema).optional().nullable(), - kind: toolKindSchema.optional().nullable(), - locations: z.array(toolCallLocationSchema).optional().nullable(), - rawInput: z.record(z.unknown()).optional(), - rawOutput: z.record(z.unknown()).optional(), - status: toolCallStatusSchema.optional().nullable(), - title: z.string().optional().nullable(), - toolCallId: z.string(), - }), -}); - -/** @internal */ -export const createTerminalRequestSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - args: z.array(z.string()).optional(), - command: z.string(), - cwd: z.string().optional().nullable(), - env: z.array(envVariableSchema).optional(), - outputByteLimit: z.number().optional().nullable(), - sessionId: z.string(), -}); - -/** @internal */ -export const newSessionResponseSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - models: sessionModelStateSchema.optional().nullable(), - modes: sessionModeStateSchema.optional().nullable(), - sessionId: z.string(), -}); - -/** @internal */ -export const loadSessionResponseSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - models: sessionModelStateSchema.optional().nullable(), - modes: sessionModeStateSchema.optional().nullable(), -}); - -/** @internal */ -export const notification1Schema = z.object({ - method: z.string(), - params: clientNotificationSchema.optional().nullable(), -}); - -/** @internal */ -export const newSessionRequestSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - cwd: z.string(), - mcpServers: z.array(mcpServerSchema), -}); - -/** @internal */ -export const loadSessionRequestSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - cwd: z.string(), - mcpServers: z.array(mcpServerSchema), - sessionId: z.string(), -}); - -/** @internal */ -export const promptRequestSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - prompt: z.array(contentBlockSchema), - sessionId: z.string(), -}); - -/** @internal */ -export const terminalOutputResponseSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - exitStatus: terminalExitStatusSchema.optional().nullable(), - output: z.string(), - truncated: z.boolean(), -}); - -/** @internal */ -export const agentRequestSchema = z.union([ - writeTextFileRequestSchema, - readTextFileRequestSchema, - requestPermissionRequestSchema, - createTerminalRequestSchema, - terminalOutputRequestSchema, - releaseTerminalRequestSchema, - waitForTerminalExitRequestSchema, - killTerminalCommandRequestSchema, - extMethodRequestSchema, -]); - -/** @internal */ -export const agentCapabilitiesSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - loadSession: z.boolean().optional(), - mcpCapabilities: mcpCapabilitiesSchema.optional(), - promptCapabilities: promptCapabilitiesSchema.optional(), -}); - -/** @internal */ -export const availableCommandSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - description: z.string(), - input: availableCommandInputSchema.optional().nullable(), - name: z.string(), -}); - -/** @internal */ -export const clientCapabilitiesSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - fs: fileSystemCapabilitySchema.optional(), - terminal: z.boolean().optional(), -}); - -/** @internal */ -export const requestSchema = z.object({ - id: z.union([nullSchema, numberSchema, stringSchema]), - method: z.string(), - params: agentRequestSchema.optional().nullable(), -}); - -/** @internal */ -export const initializeResponseSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - agentCapabilities: agentCapabilitiesSchema.optional(), - agentInfo: implementationSchema.optional().nullable(), - authMethods: z.array(authMethodSchema).optional(), - protocolVersion: z.number(), -}); - -/** @internal */ -export const sessionNotificationSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - sessionId: z.string(), - update: z.union([ - z.object({ - _meta: z.record(z.unknown()).optional(), - content: z.union([ - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - text: z.string(), - type: z.literal("text"), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - data: z.string(), - mimeType: z.string(), - type: z.literal("image"), - uri: z.string().optional().nullable(), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - data: z.string(), - mimeType: z.string(), - type: z.literal("audio"), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - description: z.string().optional().nullable(), - mimeType: z.string().optional().nullable(), - name: z.string(), - size: z.number().optional().nullable(), - title: z.string().optional().nullable(), - type: z.literal("resource_link"), - uri: z.string(), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - resource: embeddedResourceResourceSchema, - type: z.literal("resource"), - }), - ]), - sessionUpdate: z.literal("user_message_chunk"), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - content: z.union([ - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - text: z.string(), - type: z.literal("text"), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - data: z.string(), - mimeType: z.string(), - type: z.literal("image"), - uri: z.string().optional().nullable(), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - data: z.string(), - mimeType: z.string(), - type: z.literal("audio"), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - description: z.string().optional().nullable(), - mimeType: z.string().optional().nullable(), - name: z.string(), - size: z.number().optional().nullable(), - title: z.string().optional().nullable(), - type: z.literal("resource_link"), - uri: z.string(), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - resource: embeddedResourceResourceSchema, - type: z.literal("resource"), - }), - ]), - sessionUpdate: z.literal("agent_message_chunk"), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - content: z.union([ - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - text: z.string(), - type: z.literal("text"), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - data: z.string(), - mimeType: z.string(), - type: z.literal("image"), - uri: z.string().optional().nullable(), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - data: z.string(), - mimeType: z.string(), - type: z.literal("audio"), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - description: z.string().optional().nullable(), - mimeType: z.string().optional().nullable(), - name: z.string(), - size: z.number().optional().nullable(), - title: z.string().optional().nullable(), - type: z.literal("resource_link"), - uri: z.string(), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - annotations: annotationsSchema.optional().nullable(), - resource: embeddedResourceResourceSchema, - type: z.literal("resource"), - }), - ]), - sessionUpdate: z.literal("agent_thought_chunk"), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - content: z.array(toolCallContentSchema).optional(), - kind: z - .union([ - z.literal("read"), - z.literal("edit"), - z.literal("delete"), - z.literal("move"), - z.literal("search"), - z.literal("execute"), - z.literal("think"), - z.literal("fetch"), - z.literal("switch_mode"), - z.literal("other"), - ]) - .optional(), - locations: z.array(toolCallLocationSchema).optional(), - rawInput: z.record(z.unknown()).optional(), - rawOutput: z.record(z.unknown()).optional(), - sessionUpdate: z.literal("tool_call"), - status: z - .union([ - z.literal("pending"), - z.literal("in_progress"), - z.literal("completed"), - z.literal("failed"), - ]) - .optional(), - title: z.string(), - toolCallId: z.string(), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - content: z.array(toolCallContentSchema).optional().nullable(), - kind: toolKindSchema.optional().nullable(), - locations: z.array(toolCallLocationSchema).optional().nullable(), - rawInput: z.record(z.unknown()).optional(), - rawOutput: z.record(z.unknown()).optional(), - sessionUpdate: z.literal("tool_call_update"), - status: toolCallStatusSchema.optional().nullable(), - title: z.string().optional().nullable(), - toolCallId: z.string(), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - entries: z.array(planEntrySchema), - sessionUpdate: z.literal("plan"), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - availableCommands: z.array(availableCommandSchema), - sessionUpdate: z.literal("available_commands_update"), - }), - z.object({ - _meta: z.record(z.unknown()).optional(), - currentModeId: z.string(), - sessionUpdate: z.literal("current_mode_update"), - }), - ]), -}); - -/** @internal */ -export const initializeRequestSchema = z.object({ - _meta: z.record(z.unknown()).optional(), - clientCapabilities: clientCapabilitiesSchema.optional(), - clientInfo: implementationSchema.optional().nullable(), - protocolVersion: z.number(), -}); - -/** @internal */ -export const clientResponseSchema = z.union([ - writeTextFileResponseSchema, - readTextFileResponseSchema, - requestPermissionResponseSchema, - createTerminalResponseSchema, - terminalOutputResponseSchema, - releaseTerminalResponseSchema, - waitForTerminalExitResponseSchema, - killTerminalResponseSchema, - extMethodResponse1Schema, -]); - -/** @internal */ -export const agentNotificationSchema = z.union([ - sessionNotificationSchema, - extNotificationSchema, -]); - -/** @internal */ -export const clientRequestSchema = z.union([ - initializeRequestSchema, - authenticateRequestSchema, - newSessionRequestSchema, - loadSessionRequestSchema, - setSessionModeRequestSchema, - promptRequestSchema, - setSessionModelRequestSchema, - extMethodRequest1Schema, -]); - -/** @internal */ -export const notificationSchema = z.object({ - method: z.string(), - params: agentNotificationSchema.optional().nullable(), -}); - -/** @internal */ -export const agentResponseSchema = z.union([ - initializeResponseSchema, - authenticateResponseSchema, - newSessionResponseSchema, - loadSessionResponseSchema, - setSessionModeResponseSchema, - promptResponseSchema, - setSessionModelResponseSchema, - extMethodResponseSchema, -]); - -/** @internal */ -export const request1Schema = z.object({ - id: z.union([null1Schema, number1Schema, string1Schema]), - method: z.string(), - params: clientRequestSchema.optional().nullable(), -}); - -/** @internal */ -export const response1Schema = z.union([ - z.object({ - result: clientResponseSchema, - }), - z.object({ - error: errorSchema, - }), -]); - -/** @internal */ -export const clientOutgoingMessageSchema = z.union([ - request1Schema, - response1Schema, - notification1Schema, -]); - -/** @internal */ -export const responseSchema = z.union([ - z.object({ - result: agentResponseSchema, - }), - z.object({ - error: errorSchema, - }), -]); - -/** @internal */ -export const agentOutgoingMessageSchema = z.union([ - requestSchema, - responseSchema, - notificationSchema, -]); - -/** @internal */ -export const agentClientProtocolSchema = z.union([ - agentOutgoingMessageSchema, - clientOutgoingMessageSchema, -]); diff --git a/src/schema/index.ts b/src/schema/index.ts new file mode 100644 index 00000000..42c81079 --- /dev/null +++ b/src/schema/index.ts @@ -0,0 +1,29 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export type * from "./types.gen"; + +export const AGENT_METHODS = { + authenticate: "authenticate", + initialize: "initialize", + session_cancel: "session/cancel", + session_list: "session/list", + session_load: "session/load", + session_new: "session/new", + session_prompt: "session/prompt", + session_set_mode: "session/set_mode", + session_set_model: "session/set_model", +} as const; + +export const CLIENT_METHODS = { + fs_read_text_file: "fs/read_text_file", + fs_write_text_file: "fs/write_text_file", + session_request_permission: "session/request_permission", + session_update: "session/update", + terminal_create: "terminal/create", + terminal_kill: "terminal/kill", + terminal_output: "terminal/output", + terminal_release: "terminal/release", + terminal_wait_for_exit: "terminal/wait_for_exit", +} as const; + +export const PROTOCOL_VERSION = 1; diff --git a/src/schema/types.gen.ts b/src/schema/types.gen.ts new file mode 100644 index 00000000..0b521a8f --- /dev/null +++ b/src/schema/types.gen.ts @@ -0,0 +1,2021 @@ +// This file is auto-generated by @hey-api/openapi-ts + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +type ClientOptions = { + baseUrl: `${string}://${string}` | (string & {}); +}; + +/** + * Capabilities supported by the agent. + * + * Advertised during initialization to inform the client about + * available features and content types. + * + * See protocol docs: [Agent Capabilities](https://agentclientprotocol.com/protocol/initialization#agent-capabilities) + */ +export type AgentCapabilities = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Whether the agent supports `session/load`. + */ + loadSession?: boolean; + /** + * MCP capabilities supported by the agent. + */ + mcpCapabilities?: McpCapabilities; + /** + * Prompt capabilities supported by the agent. + */ + promptCapabilities?: PromptCapabilities; + sessionCapabilities?: SessionCapabilities; +}; + +export type AgentNotification = { + method: string; + params?: SessionNotification | ExtNotification | null; +}; + +export type AgentRequest = { + id: RequestId; + method: string; + params?: + | WriteTextFileRequest + | ReadTextFileRequest + | RequestPermissionRequest + | CreateTerminalRequest + | TerminalOutputRequest + | ReleaseTerminalRequest + | WaitForTerminalExitRequest + | KillTerminalCommandRequest + | ExtRequest + | null; +}; + +export type AgentResponse = + | { + id: RequestId; + /** + * All possible responses that an agent can send to a client. + * + * This enum is used internally for routing RPC responses. You typically won't need + * to use this directly - the responses are handled automatically by the connection. + * + * These are responses to the corresponding `ClientRequest` variants. + */ + result: + | InitializeResponse + | AuthenticateResponse + | NewSessionResponse + | LoadSessionResponse + | ListSessionsResponse + | SetSessionModeResponse + | PromptResponse + | SetSessionModelResponse + | ExtResponse; + } + | { + error: _Error; + id: RequestId; + }; + +/** + * Optional annotations for the client. The client can use annotations to inform how objects are used or displayed + */ +export type Annotations = { + /** + * Extension point for implementations + */ + _meta?: unknown; + audience?: Array | null; + lastModified?: string | null; + priority?: number | null; +}; + +/** + * Audio provided to or from an LLM. + */ +export type AudioContent = { + /** + * Extension point for implementations + */ + _meta?: unknown; + annotations?: Annotations | null; + data: string; + mimeType: string; +}; + +/** + * Describes an available authentication method. + */ +export type AuthMethod = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Optional description providing more details about this authentication method. + */ + description?: string | null; + /** + * Unique identifier for this authentication method. + */ + id: string; + /** + * Human-readable name of the authentication method. + */ + name: string; +}; + +/** + * Request parameters for the authenticate method. + * + * Specifies which authentication method to use. + */ +export type AuthenticateRequest = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The ID of the authentication method to use. + * Must be one of the methods advertised in the initialize response. + */ + methodId: string; +}; + +/** + * Response to the `authenticate` method. + */ +export type AuthenticateResponse = { + /** + * Extension point for implementations + */ + _meta?: unknown; +}; + +/** + * Information about a command. + */ +export type AvailableCommand = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Human-readable description of what the command does. + */ + description: string; + /** + * Input for the command if required + */ + input?: AvailableCommandInput | null; + /** + * Command name (e.g., `create_plan`, `research_codebase`). + */ + name: string; +}; + +/** + * All text that was typed after the command name is provided as input. + */ +export type AvailableCommandInput = UnstructuredCommandInput; + +/** + * Available commands are ready or have changed + */ +export type AvailableCommandsUpdate = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Commands the agent can execute + */ + availableCommands: Array; +}; + +/** + * Binary resource contents. + */ +export type BlobResourceContents = { + /** + * Extension point for implementations + */ + _meta?: unknown; + blob: string; + mimeType?: string | null; + uri: string; +}; + +/** + * Notification to cancel ongoing operations for a session. + * + * See protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/prompt-turn#cancellation) + */ +export type CancelNotification = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The ID of the session to cancel operations for. + */ + sessionId: SessionId; +}; + +/** + * Capabilities supported by the client. + * + * Advertised during initialization to inform the agent about + * available features and methods. + * + * See protocol docs: [Client Capabilities](https://agentclientprotocol.com/protocol/initialization#client-capabilities) + */ +export type ClientCapabilities = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * File system capabilities supported by the client. + * Determines which file operations the agent can request. + */ + fs?: FileSystemCapability; + /** + * Whether the Client support all `terminal*` methods. + */ + terminal?: boolean; +}; + +export type ClientNotification = { + method: string; + params?: CancelNotification | ExtNotification | null; +}; + +export type ClientRequest = { + id: RequestId; + method: string; + params?: + | InitializeRequest + | AuthenticateRequest + | NewSessionRequest + | LoadSessionRequest + | ListSessionsRequest + | SetSessionModeRequest + | PromptRequest + | SetSessionModelRequest + | ExtRequest + | null; +}; + +export type ClientResponse = + | { + id: RequestId; + /** + * All possible responses that a client can send to an agent. + * + * This enum is used internally for routing RPC responses. You typically won't need + * to use this directly - the responses are handled automatically by the connection. + * + * These are responses to the corresponding `AgentRequest` variants. + */ + result: + | WriteTextFileResponse + | ReadTextFileResponse + | RequestPermissionResponse + | CreateTerminalResponse + | TerminalOutputResponse + | ReleaseTerminalResponse + | WaitForTerminalExitResponse + | KillTerminalCommandResponse + | ExtResponse; + } + | { + error: _Error; + id: RequestId; + }; + +/** + * Standard content block (text, images, resources). + */ +export type Content = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The actual content block. + */ + content: ContentBlock; +}; + +/** + * Content blocks represent displayable information in the Agent Client Protocol. + * + * They provide a structured way to handle various types of user-facing content—whether + * it's text from language models, images for analysis, or embedded resources for context. + * + * Content blocks appear in: + * - User prompts sent via `session/prompt` + * - Language model output streamed through `session/update` notifications + * - Progress updates and results from tool calls + * + * This structure is compatible with the Model Context Protocol (MCP), enabling + * agents to seamlessly forward content from MCP tool outputs without transformation. + * + * See protocol docs: [Content](https://agentclientprotocol.com/protocol/content) + */ +export type ContentBlock = + | (TextContent & { + type: "text"; + }) + | (ImageContent & { + type: "image"; + }) + | (AudioContent & { + type: "audio"; + }) + | (ResourceLink & { + type: "resource_link"; + }) + | (EmbeddedResource & { + type: "resource"; + }); + +/** + * A streamed item of content + */ +export type ContentChunk = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * A single item of content + */ + content: ContentBlock; +}; + +/** + * Request to create a new terminal and execute a command. + */ +export type CreateTerminalRequest = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Array of command arguments. + */ + args?: Array; + /** + * The command to execute. + */ + command: string; + /** + * Working directory for the command (absolute path). + */ + cwd?: string | null; + /** + * Environment variables for the command. + */ + env?: Array; + /** + * Maximum number of output bytes to retain. + * + * When the limit is exceeded, the Client truncates from the beginning of the output + * to stay within the limit. + * + * The Client MUST ensure truncation happens at a character boundary to maintain valid + * string output, even if this means the retained output is slightly less than the + * specified limit. + */ + outputByteLimit?: number | null; + /** + * The session ID for this request. + */ + sessionId: SessionId; +}; + +/** + * Response containing the ID of the created terminal. + */ +export type CreateTerminalResponse = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The unique identifier for the created terminal. + */ + terminalId: string; +}; + +/** + * The current mode of the session has changed + * + * See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) + */ +export type CurrentModeUpdate = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The ID of the current mode + */ + currentModeId: SessionModeId; +}; + +/** + * A diff representing file modifications. + * + * Shows changes to files in a format suitable for display in the client UI. + * + * See protocol docs: [Content](https://agentclientprotocol.com/protocol/tool-calls#content) + */ +export type Diff = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The new content after modification. + */ + newText: string; + /** + * The original content (None for new files). + */ + oldText?: string | null; + /** + * The file path being modified. + */ + path: string; +}; + +/** + * The contents of a resource, embedded into a prompt or tool call result. + */ +export type EmbeddedResource = { + /** + * Extension point for implementations + */ + _meta?: unknown; + annotations?: Annotations | null; + resource: EmbeddedResourceResource; +}; + +/** + * Resource content that can be embedded in a message. + */ +export type EmbeddedResourceResource = + | TextResourceContents + | BlobResourceContents; + +/** + * An environment variable to set when launching an MCP server. + */ +export type EnvVariable = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The name of the environment variable. + */ + name: string; + /** + * The value to set for the environment variable. + */ + value: string; +}; + +/** + * JSON-RPC error object. + * + * Represents an error that occurred during method execution, following the + * JSON-RPC 2.0 error object specification with optional additional data. + * + * See protocol docs: [JSON-RPC Error Object](https://www.jsonrpc.org/specification#error_object) + */ +export type _Error = { + /** + * A number indicating the error type that occurred. + * This must be an integer as defined in the JSON-RPC specification. + */ + code: number; + /** + * Optional primitive or structured value that contains additional information about the error. + * This may include debugging information or context-specific details. + */ + data?: unknown; + /** + * A string providing a short description of the error. + * The message should be limited to a concise single sentence. + */ + message: string; +}; + +/** + * Allows the Agent to send an arbitrary notification that is not part of the ACP spec. + * Extension notifications provide a way to send one-way messages for custom functionality + * while maintaining protocol compatibility. + * + * See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + */ +export type ExtNotification = unknown; + +/** + * Allows for sending an arbitrary request that is not part of the ACP spec. + * Extension methods provide a way to add custom functionality while maintaining + * protocol compatibility. + * + * See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + */ +export type ExtRequest = unknown; + +/** + * Allows for sending an arbitrary response to an [`ExtRequest`] that is not part of the ACP spec. + * Extension methods provide a way to add custom functionality while maintaining + * protocol compatibility. + * + * See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + */ +export type ExtResponse = unknown; + +/** + * Filesystem capabilities supported by the client. + * File system capabilities that a client may support. + * + * See protocol docs: [FileSystem](https://agentclientprotocol.com/protocol/initialization#filesystem) + */ +export type FileSystemCapability = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Whether the Client supports `fs/read_text_file` requests. + */ + readTextFile?: boolean; + /** + * Whether the Client supports `fs/write_text_file` requests. + */ + writeTextFile?: boolean; +}; + +/** + * An HTTP header to set when making requests to the MCP server. + */ +export type HttpHeader = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The name of the HTTP header. + */ + name: string; + /** + * The value to set for the HTTP header. + */ + value: string; +}; + +/** + * An image provided to or from an LLM. + */ +export type ImageContent = { + /** + * Extension point for implementations + */ + _meta?: unknown; + annotations?: Annotations | null; + data: string; + mimeType: string; + uri?: string | null; +}; + +/** + * Metadata about the implementation of the client or agent. + * Describes the name and version of an MCP implementation, with an optional + * title for UI representation. + */ +export type Implementation = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Intended for programmatic or logical use, but can be used as a display + * name fallback if title isn’t present. + */ + name: string; + /** + * Intended for UI and end-user contexts — optimized to be human-readable + * and easily understood. + * + * If not provided, the name should be used for display. + */ + title?: string | null; + /** + * Version of the implementation. Can be displayed to the user or used + * for debugging or metrics purposes. (e.g. "1.0.0"). + */ + version: string; +}; + +/** + * Request parameters for the initialize method. + * + * Sent by the client to establish connection and negotiate capabilities. + * + * See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization) + */ +export type InitializeRequest = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Capabilities supported by the client. + */ + clientCapabilities?: ClientCapabilities; + /** + * Information about the Client name and version sent to the Agent. + * + * Note: in future versions of the protocol, this will be required. + */ + clientInfo?: Implementation | null; + /** + * The latest protocol version supported by the client. + */ + protocolVersion: ProtocolVersion; +}; + +/** + * Response to the `initialize` method. + * + * Contains the negotiated protocol version and agent capabilities. + * + * See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization) + */ +export type InitializeResponse = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Capabilities supported by the agent. + */ + agentCapabilities?: AgentCapabilities; + /** + * Information about the Agent name and version sent to the Client. + * + * Note: in future versions of the protocol, this will be required. + */ + agentInfo?: Implementation | null; + /** + * Authentication methods supported by the agent. + */ + authMethods?: Array; + /** + * The protocol version the client specified if supported by the agent, + * or the latest protocol version supported by the agent. + * + * The client should disconnect, if it doesn't support this version. + */ + protocolVersion: ProtocolVersion; +}; + +/** + * Request to kill a terminal command without releasing the terminal. + */ +export type KillTerminalCommandRequest = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The session ID for this request. + */ + sessionId: SessionId; + /** + * The ID of the terminal to kill. + */ + terminalId: string; +}; + +/** + * Response to terminal/kill command method + */ +export type KillTerminalCommandResponse = { + /** + * Extension point for implementations + */ + _meta?: unknown; +}; + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Request parameters for listing existing sessions. + * + * Only available if the Agent supports the `listSessions` capability. + * + * @experimental + */ +export type ListSessionsRequest = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Opaque cursor token from a previous response's nextCursor field for cursor-based pagination + */ + cursor?: string | null; + /** + * Filter sessions by working directory. Must be an absolute path. + */ + cwd?: string | null; +}; + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Response from listing sessions. + * + * @experimental + */ +export type ListSessionsResponse = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Opaque cursor token. If present, pass this in the next request's cursor parameter + * to fetch the next page. If absent, there are no more results. + */ + nextCursor?: string | null; + /** + * Array of session information objects + */ + sessions: Array; +}; + +/** + * Request parameters for loading an existing session. + * + * Only available if the Agent supports the `loadSession` capability. + * + * See protocol docs: [Loading Sessions](https://agentclientprotocol.com/protocol/session-setup#loading-sessions) + */ +export type LoadSessionRequest = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The working directory for this session. + */ + cwd: string; + /** + * List of MCP servers to connect to for this session. + */ + mcpServers: Array; + /** + * The ID of the session to load. + */ + sessionId: SessionId; +}; + +/** + * Response from loading an existing session. + */ +export type LoadSessionResponse = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Initial model state if supported by the Agent + * + * @experimental + */ + models?: SessionModelState | null; + /** + * Initial mode state if supported by the Agent + * + * See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) + */ + modes?: SessionModeState | null; +}; + +/** + * MCP capabilities supported by the agent + */ +export type McpCapabilities = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Agent supports [`McpServer::Http`]. + */ + http?: boolean; + /** + * Agent supports [`McpServer::Sse`]. + */ + sse?: boolean; +}; + +/** + * Configuration for connecting to an MCP (Model Context Protocol) server. + * + * MCP servers provide tools and context that the agent can use when + * processing prompts. + * + * See protocol docs: [MCP Servers](https://agentclientprotocol.com/protocol/session-setup#mcp-servers) + */ +export type McpServer = + | (McpServerHttp & { + type: "http"; + }) + | (McpServerSse & { + type: "sse"; + }) + | ({ + type?: "McpServerStdio"; + } & McpServerStdio); + +/** + * HTTP transport configuration for MCP. + */ +export type McpServerHttp = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * HTTP headers to set when making requests to the MCP server. + */ + headers: Array; + /** + * Human-readable name identifying this MCP server. + */ + name: string; + /** + * URL to the MCP server. + */ + url: string; +}; + +/** + * SSE transport configuration for MCP. + */ +export type McpServerSse = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * HTTP headers to set when making requests to the MCP server. + */ + headers: Array; + /** + * Human-readable name identifying this MCP server. + */ + name: string; + /** + * URL to the MCP server. + */ + url: string; +}; + +/** + * Stdio transport configuration for MCP. + */ +export type McpServerStdio = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Command-line arguments to pass to the MCP server. + */ + args: Array; + /** + * Path to the MCP server executable. + */ + command: string; + /** + * Environment variables to set when launching the MCP server. + */ + env: Array; + /** + * Human-readable name identifying this MCP server. + */ + name: string; +}; + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * A unique identifier for a model. + * + * @experimental + */ +export type ModelId = string; + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Information about a selectable model. + * + * @experimental + */ +export type ModelInfo = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Optional description of the model. + */ + description?: string | null; + /** + * Unique identifier for the model. + */ + modelId: ModelId; + /** + * Human-readable name of the model. + */ + name: string; +}; + +/** + * Request parameters for creating a new session. + * + * See protocol docs: [Creating a Session](https://agentclientprotocol.com/protocol/session-setup#creating-a-session) + */ +export type NewSessionRequest = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The working directory for this session. Must be an absolute path. + */ + cwd: string; + /** + * List of MCP (Model Context Protocol) servers the agent should connect to. + */ + mcpServers: Array; +}; + +/** + * Response from creating a new session. + * + * See protocol docs: [Creating a Session](https://agentclientprotocol.com/protocol/session-setup#creating-a-session) + */ +export type NewSessionResponse = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Initial model state if supported by the Agent + * + * @experimental + */ + models?: SessionModelState | null; + /** + * Initial mode state if supported by the Agent + * + * See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) + */ + modes?: SessionModeState | null; + /** + * Unique identifier for the created session. + * + * Used in all subsequent requests for this conversation. + */ + sessionId: SessionId; +}; + +/** + * An option presented to the user when requesting permission. + */ +export type PermissionOption = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Hint about the nature of this permission option. + */ + kind: PermissionOptionKind; + /** + * Human-readable label to display to the user. + */ + name: string; + /** + * Unique identifier for this permission option. + */ + optionId: PermissionOptionId; +}; + +/** + * Unique identifier for a permission option. + */ +export type PermissionOptionId = string; + +/** + * The type of permission option being presented to the user. + * + * Helps clients choose appropriate icons and UI treatment. + */ +export type PermissionOptionKind = + | "allow_once" + | "allow_always" + | "reject_once" + | "reject_always"; + +/** + * An execution plan for accomplishing complex tasks. + * + * Plans consist of multiple entries representing individual tasks or goals. + * Agents report plans to clients to provide visibility into their execution strategy. + * Plans can evolve during execution as the agent discovers new requirements or completes tasks. + * + * See protocol docs: [Agent Plan](https://agentclientprotocol.com/protocol/agent-plan) + */ +export type Plan = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The list of tasks to be accomplished. + * + * When updating a plan, the agent must send a complete list of all entries + * with their current status. The client replaces the entire plan with each update. + */ + entries: Array; +}; + +/** + * A single entry in the execution plan. + * + * Represents a task or goal that the assistant intends to accomplish + * as part of fulfilling the user's request. + * See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent-plan#plan-entries) + */ +export type PlanEntry = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Human-readable description of what this task aims to accomplish. + */ + content: string; + /** + * The relative importance of this task. + * Used to indicate which tasks are most critical to the overall goal. + */ + priority: PlanEntryPriority; + /** + * Current execution status of this task. + */ + status: PlanEntryStatus; +}; + +/** + * Priority levels for plan entries. + * + * Used to indicate the relative importance or urgency of different + * tasks in the execution plan. + * See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent-plan#plan-entries) + */ +export type PlanEntryPriority = "high" | "medium" | "low"; + +/** + * Status of a plan entry in the execution flow. + * + * Tracks the lifecycle of each task from planning through completion. + * See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent-plan#plan-entries) + */ +export type PlanEntryStatus = "pending" | "in_progress" | "completed"; + +/** + * Prompt capabilities supported by the agent in `session/prompt` requests. + * + * Baseline agent functionality requires support for [`ContentBlock::Text`] + * and [`ContentBlock::ResourceLink`] in prompt requests. + * + * Other variants must be explicitly opted in to. + * Capabilities for different types of content in prompt requests. + * + * Indicates which content types beyond the baseline (text and resource links) + * the agent can process. + * + * See protocol docs: [Prompt Capabilities](https://agentclientprotocol.com/protocol/initialization#prompt-capabilities) + */ +export type PromptCapabilities = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Agent supports [`ContentBlock::Audio`]. + */ + audio?: boolean; + /** + * Agent supports embedded context in `session/prompt` requests. + * + * When enabled, the Client is allowed to include [`ContentBlock::Resource`] + * in prompt requests for pieces of context that are referenced in the message. + */ + embeddedContext?: boolean; + /** + * Agent supports [`ContentBlock::Image`]. + */ + image?: boolean; +}; + +/** + * Request parameters for sending a user prompt to the agent. + * + * Contains the user's message and any additional context. + * + * See protocol docs: [User Message](https://agentclientprotocol.com/protocol/prompt-turn#1-user-message) + */ +export type PromptRequest = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The blocks of content that compose the user's message. + * + * As a baseline, the Agent MUST support [`ContentBlock::Text`] and [`ContentBlock::ResourceLink`], + * while other variants are optionally enabled via [`PromptCapabilities`]. + * + * The Client MUST adapt its interface according to [`PromptCapabilities`]. + * + * The client MAY include referenced pieces of context as either + * [`ContentBlock::Resource`] or [`ContentBlock::ResourceLink`]. + * + * When available, [`ContentBlock::Resource`] is preferred + * as it avoids extra round-trips and allows the message to include + * pieces of context from sources the agent may not have access to. + */ + prompt: Array; + /** + * The ID of the session to send this user message to + */ + sessionId: SessionId; +}; + +/** + * Response from processing a user prompt. + * + * See protocol docs: [Check for Completion](https://agentclientprotocol.com/protocol/prompt-turn#4-check-for-completion) + */ +export type PromptResponse = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Indicates why the agent stopped processing the turn. + */ + stopReason: StopReason; +}; + +/** + * Protocol version identifier. + * + * This version is only bumped for breaking changes. + * Non-breaking changes should be introduced via capabilities. + */ +export type ProtocolVersion = number; + +/** + * Request to read content from a text file. + * + * Only available if the client supports the `fs.readTextFile` capability. + */ +export type ReadTextFileRequest = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Maximum number of lines to read. + */ + limit?: number | null; + /** + * Line number to start reading from (1-based). + */ + line?: number | null; + /** + * Absolute path to the file to read. + */ + path: string; + /** + * The session ID for this request. + */ + sessionId: SessionId; +}; + +/** + * Response containing the contents of a text file. + */ +export type ReadTextFileResponse = { + /** + * Extension point for implementations + */ + _meta?: unknown; + content: string; +}; + +/** + * Request to release a terminal and free its resources. + */ +export type ReleaseTerminalRequest = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The session ID for this request. + */ + sessionId: SessionId; + /** + * The ID of the terminal to release. + */ + terminalId: string; +}; + +/** + * Response to terminal/release method + */ +export type ReleaseTerminalResponse = { + /** + * Extension point for implementations + */ + _meta?: unknown; +}; + +/** + * JSON RPC Request Id + * + * An identifier established by the Client that MUST contain a String, Number, or NULL value if included. If it is not included it is assumed to be a notification. The value SHOULD normally not be Null [1] and Numbers SHOULD NOT contain fractional parts [2] + * + * The Server MUST reply with the same value in the Response object if included. This member is used to correlate the context between the two objects. + * + * [1] The use of Null as a value for the id member in a Request object is discouraged, because this specification uses a value of Null for Responses with an unknown id. Also, because JSON-RPC 1.0 uses an id value of Null for Notifications this could cause confusion in handling. + * + * [2] Fractional parts may be problematic, since many decimal fractions cannot be represented exactly as binary fractions. + */ +export type RequestId = null | bigint | string; + +/** + * The outcome of a permission request. + */ +export type RequestPermissionOutcome = + | { + outcome: "cancelled"; + } + | (SelectedPermissionOutcome & { + outcome: "selected"; + }); + +/** + * Request for user permission to execute a tool call. + * + * Sent when the agent needs authorization before performing a sensitive operation. + * + * See protocol docs: [Requesting Permission](https://agentclientprotocol.com/protocol/tool-calls#requesting-permission) + */ +export type RequestPermissionRequest = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Available permission options for the user to choose from. + */ + options: Array; + /** + * The session ID for this request. + */ + sessionId: SessionId; + /** + * Details about the tool call requiring permission. + */ + toolCall: ToolCallUpdate; +}; + +/** + * Response to a permission request. + */ +export type RequestPermissionResponse = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The user's decision on the permission request. + */ + outcome: RequestPermissionOutcome; +}; + +/** + * A resource that the server is capable of reading, included in a prompt or tool call result. + */ +export type ResourceLink = { + /** + * Extension point for implementations + */ + _meta?: unknown; + annotations?: Annotations | null; + description?: string | null; + mimeType?: string | null; + name: string; + size?: bigint | null; + title?: string | null; + uri: string; +}; + +/** + * The sender or recipient of messages and data in a conversation. + */ +export type Role = "assistant" | "user"; + +/** + * The user selected one of the provided options. + */ +export type SelectedPermissionOutcome = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The ID of the option the user selected. + */ + optionId: PermissionOptionId; +}; + +/** + * Session capabilities supported by the agent. + * + * As a baseline, all Agents **MUST** support `session/new`, `session/prompt`, `session/cancel`, and `session/update`. + * + * Optionally, they **MAY** support other session methods and notifications by specifying additional capabilities. + * + * Note: `session/load` is still handled by the top-level `load_session` capability. This will be unified in future versions of the protocol. + * + * See protocol docs: [Session Capabilities](https://agentclientprotocol.com/protocol/initialization#session-capabilities) + */ +export type SessionCapabilities = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Whether the agent supports `session/list`. + * + * @experimental + */ + list?: SessionListCapabilities | null; +}; + +/** + * A unique identifier for a conversation session between a client and agent. + * + * Sessions maintain their own context, conversation history, and state, + * allowing multiple independent interactions with the same agent. + * + * See protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id) + */ +export type SessionId = string; + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Information about a session returned by session/list + * + * @experimental + */ +export type SessionInfo = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The working directory for this session. Must be an absolute path. + */ + cwd: string; + /** + * Unique identifier for the session + */ + sessionId: SessionId; + /** + * Human-readable title for the session + */ + title?: string | null; + /** + * ISO 8601 timestamp of last activity + */ + updatedAt?: string | null; +}; + +/** + * Capabilities for the `session/list` method. + * + * By supplying `{}` it means that the agent supports listing of sessions. + * + * Further capabilities can be added in the future for other means of filtering or searching the list. + */ +export type SessionListCapabilities = { + /** + * Extension point for implementations + */ + _meta?: unknown; +}; + +/** + * A mode the agent can operate in. + * + * See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) + */ +export type SessionMode = { + /** + * Extension point for implementations + */ + _meta?: unknown; + description?: string | null; + id: SessionModeId; + name: string; +}; + +/** + * Unique identifier for a Session Mode. + */ +export type SessionModeId = string; + +/** + * The set of modes and the one currently active. + */ +export type SessionModeState = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The set of modes that the Agent can operate in + */ + availableModes: Array; + /** + * The current mode the Agent is in. + */ + currentModeId: SessionModeId; +}; + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * The set of models and the one currently active. + * + * @experimental + */ +export type SessionModelState = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The set of models that the Agent can use + */ + availableModels: Array; + /** + * The current model the Agent is in. + */ + currentModelId: ModelId; +}; + +/** + * Notification containing a session update from the agent. + * + * Used to stream real-time progress and results during prompt processing. + * + * See protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/prompt-turn#3-agent-reports-output) + */ +export type SessionNotification = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The ID of the session this update pertains to. + */ + sessionId: SessionId; + /** + * The actual update content. + */ + update: SessionUpdate; +}; + +/** + * Different types of updates that can be sent during session processing. + * + * These updates provide real-time feedback about the agent's progress. + * + * See protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/prompt-turn#3-agent-reports-output) + */ +export type SessionUpdate = + | (ContentChunk & { + sessionUpdate: "user_message_chunk"; + }) + | (ContentChunk & { + sessionUpdate: "agent_message_chunk"; + }) + | (ContentChunk & { + sessionUpdate: "agent_thought_chunk"; + }) + | (ToolCall & { + sessionUpdate: "tool_call"; + }) + | (ToolCallUpdate & { + sessionUpdate: "tool_call_update"; + }) + | (Plan & { + sessionUpdate: "plan"; + }) + | (AvailableCommandsUpdate & { + sessionUpdate: "available_commands_update"; + }) + | (CurrentModeUpdate & { + sessionUpdate: "current_mode_update"; + }); + +/** + * Request parameters for setting a session mode. + */ +export type SetSessionModeRequest = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The ID of the mode to set. + */ + modeId: SessionModeId; + /** + * The ID of the session to set the mode for. + */ + sessionId: SessionId; +}; + +/** + * Response to `session/set_mode` method. + */ +export type SetSessionModeResponse = { + _meta?: unknown; +}; + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Request parameters for setting a session model. + * + * @experimental + */ +export type SetSessionModelRequest = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The ID of the model to set. + */ + modelId: ModelId; + /** + * The ID of the session to set the model for. + */ + sessionId: SessionId; +}; + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Response to `session/set_model` method. + * + * @experimental + */ +export type SetSessionModelResponse = { + /** + * Extension point for implementations + */ + _meta?: unknown; +}; + +/** + * Reasons why an agent stops processing a prompt turn. + * + * See protocol docs: [Stop Reasons](https://agentclientprotocol.com/protocol/prompt-turn#stop-reasons) + */ +export type StopReason = + | "end_turn" + | "max_tokens" + | "max_turn_requests" + | "refusal" + | "cancelled"; + +/** + * Embed a terminal created with `terminal/create` by its id. + * + * The terminal must be added before calling `terminal/release`. + * + * See protocol docs: [Terminal](https://agentclientprotocol.com/protocol/terminals) + */ +export type Terminal = { + /** + * Extension point for implementations + */ + _meta?: unknown; + terminalId: string; +}; + +/** + * Exit status of a terminal command. + */ +export type TerminalExitStatus = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The process exit code (may be null if terminated by signal). + */ + exitCode?: number | null; + /** + * The signal that terminated the process (may be null if exited normally). + */ + signal?: string | null; +}; + +/** + * Request to get the current output and status of a terminal. + */ +export type TerminalOutputRequest = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The session ID for this request. + */ + sessionId: SessionId; + /** + * The ID of the terminal to get output from. + */ + terminalId: string; +}; + +/** + * Response containing the terminal output and exit status. + */ +export type TerminalOutputResponse = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Exit status if the command has completed. + */ + exitStatus?: TerminalExitStatus | null; + /** + * The terminal output captured so far. + */ + output: string; + /** + * Whether the output was truncated due to byte limits. + */ + truncated: boolean; +}; + +/** + * Text provided to or from an LLM. + */ +export type TextContent = { + /** + * Extension point for implementations + */ + _meta?: unknown; + annotations?: Annotations | null; + text: string; +}; + +/** + * Text-based resource contents. + */ +export type TextResourceContents = { + /** + * Extension point for implementations + */ + _meta?: unknown; + mimeType?: string | null; + text: string; + uri: string; +}; + +/** + * Represents a tool call that the language model has requested. + * + * Tool calls are actions that the agent executes on behalf of the language model, + * such as reading files, executing code, or fetching data from external sources. + * + * See protocol docs: [Tool Calls](https://agentclientprotocol.com/protocol/tool-calls) + */ +export type ToolCall = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Content produced by the tool call. + */ + content?: Array; + /** + * The category of tool being invoked. + * Helps clients choose appropriate icons and UI treatment. + */ + kind?: ToolKind; + /** + * File locations affected by this tool call. + * Enables "follow-along" features in clients. + */ + locations?: Array; + /** + * Raw input parameters sent to the tool. + */ + rawInput?: unknown; + /** + * Raw output returned by the tool. + */ + rawOutput?: unknown; + /** + * Current execution status of the tool call. + */ + status?: ToolCallStatus; + /** + * Human-readable title describing what the tool is doing. + */ + title: string; + /** + * Unique identifier for this tool call within the session. + */ + toolCallId: ToolCallId; +}; + +/** + * Content produced by a tool call. + * + * Tool calls can produce different types of content including + * standard content blocks (text, images) or file diffs. + * + * See protocol docs: [Content](https://agentclientprotocol.com/protocol/tool-calls#content) + */ +export type ToolCallContent = + | (Content & { + type: "content"; + }) + | (Diff & { + type: "diff"; + }) + | (Terminal & { + type: "terminal"; + }); + +/** + * Unique identifier for a tool call within a session. + */ +export type ToolCallId = string; + +/** + * A file location being accessed or modified by a tool. + * + * Enables clients to implement "follow-along" features that track + * which files the agent is working with in real-time. + * + * See protocol docs: [Following the Agent](https://agentclientprotocol.com/protocol/tool-calls#following-the-agent) + */ +export type ToolCallLocation = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Optional line number within the file. + */ + line?: number | null; + /** + * The file path being accessed or modified. + */ + path: string; +}; + +/** + * Execution status of a tool call. + * + * Tool calls progress through different statuses during their lifecycle. + * + * See protocol docs: [Status](https://agentclientprotocol.com/protocol/tool-calls#status) + */ +export type ToolCallStatus = "pending" | "in_progress" | "completed" | "failed"; + +/** + * An update to an existing tool call. + * + * Used to report progress and results as tools execute. All fields except + * the tool call ID are optional - only changed fields need to be included. + * + * See protocol docs: [Updating](https://agentclientprotocol.com/protocol/tool-calls#updating) + */ +export type ToolCallUpdate = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * Replace the content collection. + */ + content?: Array | null; + /** + * Update the tool kind. + */ + kind?: ToolKind | null; + /** + * Replace the locations collection. + */ + locations?: Array | null; + /** + * Update the raw input. + */ + rawInput?: unknown; + /** + * Update the raw output. + */ + rawOutput?: unknown; + /** + * Update the execution status. + */ + status?: ToolCallStatus | null; + /** + * Update the human-readable title. + */ + title?: string | null; + /** + * The ID of the tool call being updated. + */ + toolCallId: ToolCallId; +}; + +/** + * Categories of tools that can be invoked. + * + * Tool kinds help clients choose appropriate icons and optimize how they + * display tool execution progress. + * + * See protocol docs: [Creating](https://agentclientprotocol.com/protocol/tool-calls#creating) + */ +export type ToolKind = + | "read" + | "edit" + | "delete" + | "move" + | "search" + | "execute" + | "think" + | "fetch" + | "switch_mode" + | "other"; + +/** + * All text that was typed after the command name is provided as input. + */ +export type UnstructuredCommandInput = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * A hint to display when the input hasn't been provided yet + */ + hint: string; +}; + +/** + * Request to wait for a terminal command to exit. + */ +export type WaitForTerminalExitRequest = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The session ID for this request. + */ + sessionId: SessionId; + /** + * The ID of the terminal to wait for. + */ + terminalId: string; +}; + +/** + * Response containing the exit status of a terminal command. + */ +export type WaitForTerminalExitResponse = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The process exit code (may be null if terminated by signal). + */ + exitCode?: number | null; + /** + * The signal that terminated the process (may be null if exited normally). + */ + signal?: string | null; +}; + +/** + * Request to write content to a text file. + * + * Only available if the client supports the `fs.writeTextFile` capability. + */ +export type WriteTextFileRequest = { + /** + * Extension point for implementations + */ + _meta?: unknown; + /** + * The text content to write to the file. + */ + content: string; + /** + * Absolute path to the file to write. + */ + path: string; + /** + * The session ID for this request. + */ + sessionId: SessionId; +}; + +/** + * Response to `fs/write_text_file` + */ +export type WriteTextFileResponse = { + /** + * Extension point for implementations + */ + _meta?: unknown; +}; diff --git a/src/schema/zod.gen.ts b/src/schema/zod.gen.ts new file mode 100644 index 00000000..1b0d2e45 --- /dev/null +++ b/src/schema/zod.gen.ts @@ -0,0 +1,1357 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { z } from "zod/v4"; + +/** + * Describes an available authentication method. + */ +export const zAuthMethod = z.object({ + _meta: z.unknown().optional(), + description: z.union([z.string(), z.null()]).optional(), + id: z.string(), + name: z.string(), +}); + +/** + * Request parameters for the authenticate method. + * + * Specifies which authentication method to use. + */ +export const zAuthenticateRequest = z.object({ + _meta: z.unknown().optional(), + methodId: z.string(), +}); + +/** + * Response to the `authenticate` method. + */ +export const zAuthenticateResponse = z.object({ + _meta: z.unknown().optional(), +}); + +/** + * Binary resource contents. + */ +export const zBlobResourceContents = z.object({ + _meta: z.unknown().optional(), + blob: z.string(), + mimeType: z.union([z.string(), z.null()]).optional(), + uri: z.string(), +}); + +/** + * Response containing the ID of the created terminal. + */ +export const zCreateTerminalResponse = z.object({ + _meta: z.unknown().optional(), + terminalId: z.string(), +}); + +/** + * A diff representing file modifications. + * + * Shows changes to files in a format suitable for display in the client UI. + * + * See protocol docs: [Content](https://agentclientprotocol.com/protocol/tool-calls#content) + */ +export const zDiff = z.object({ + _meta: z.unknown().optional(), + newText: z.string(), + oldText: z.union([z.string(), z.null()]).optional(), + path: z.string(), +}); + +/** + * An environment variable to set when launching an MCP server. + */ +export const zEnvVariable = z.object({ + _meta: z.unknown().optional(), + name: z.string(), + value: z.string(), +}); + +/** + * JSON-RPC error object. + * + * Represents an error that occurred during method execution, following the + * JSON-RPC 2.0 error object specification with optional additional data. + * + * See protocol docs: [JSON-RPC Error Object](https://www.jsonrpc.org/specification#error_object) + */ +export const zError = z.object({ + code: z.number().int(), + data: z.unknown().optional(), + message: z.string(), +}); + +/** + * Allows the Agent to send an arbitrary notification that is not part of the ACP spec. + * Extension notifications provide a way to send one-way messages for custom functionality + * while maintaining protocol compatibility. + * + * See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + */ +export const zExtNotification = z.unknown(); + +/** + * Allows for sending an arbitrary request that is not part of the ACP spec. + * Extension methods provide a way to add custom functionality while maintaining + * protocol compatibility. + * + * See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + */ +export const zExtRequest = z.unknown(); + +/** + * Allows for sending an arbitrary response to an [`ExtRequest`] that is not part of the ACP spec. + * Extension methods provide a way to add custom functionality while maintaining + * protocol compatibility. + * + * See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + */ +export const zExtResponse = z.unknown(); + +/** + * Filesystem capabilities supported by the client. + * File system capabilities that a client may support. + * + * See protocol docs: [FileSystem](https://agentclientprotocol.com/protocol/initialization#filesystem) + */ +export const zFileSystemCapability = z.object({ + _meta: z.unknown().optional(), + readTextFile: z.boolean().optional().default(false), + writeTextFile: z.boolean().optional().default(false), +}); + +/** + * Capabilities supported by the client. + * + * Advertised during initialization to inform the agent about + * available features and methods. + * + * See protocol docs: [Client Capabilities](https://agentclientprotocol.com/protocol/initialization#client-capabilities) + */ +export const zClientCapabilities = z.object({ + _meta: z.unknown().optional(), + fs: zFileSystemCapability + .optional() + .default({ readTextFile: false, writeTextFile: false }), + terminal: z.boolean().optional().default(false), +}); + +/** + * An HTTP header to set when making requests to the MCP server. + */ +export const zHttpHeader = z.object({ + _meta: z.unknown().optional(), + name: z.string(), + value: z.string(), +}); + +/** + * Metadata about the implementation of the client or agent. + * Describes the name and version of an MCP implementation, with an optional + * title for UI representation. + */ +export const zImplementation = z.object({ + _meta: z.unknown().optional(), + name: z.string(), + title: z.union([z.string(), z.null()]).optional(), + version: z.string(), +}); + +/** + * Response to terminal/kill command method + */ +export const zKillTerminalCommandResponse = z.object({ + _meta: z.unknown().optional(), +}); + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Request parameters for listing existing sessions. + * + * Only available if the Agent supports the `listSessions` capability. + * + * @experimental + */ +export const zListSessionsRequest = z.object({ + _meta: z.unknown().optional(), + cursor: z.union([z.string(), z.null()]).optional(), + cwd: z.union([z.string(), z.null()]).optional(), +}); + +/** + * MCP capabilities supported by the agent + */ +export const zMcpCapabilities = z.object({ + _meta: z.unknown().optional(), + http: z.boolean().optional().default(false), + sse: z.boolean().optional().default(false), +}); + +/** + * HTTP transport configuration for MCP. + */ +export const zMcpServerHttp = z.object({ + _meta: z.unknown().optional(), + headers: z.array(zHttpHeader), + name: z.string(), + url: z.string(), +}); + +/** + * SSE transport configuration for MCP. + */ +export const zMcpServerSse = z.object({ + _meta: z.unknown().optional(), + headers: z.array(zHttpHeader), + name: z.string(), + url: z.string(), +}); + +/** + * Stdio transport configuration for MCP. + */ +export const zMcpServerStdio = z.object({ + _meta: z.unknown().optional(), + args: z.array(z.string()), + command: z.string(), + env: z.array(zEnvVariable), + name: z.string(), +}); + +/** + * Configuration for connecting to an MCP (Model Context Protocol) server. + * + * MCP servers provide tools and context that the agent can use when + * processing prompts. + * + * See protocol docs: [MCP Servers](https://agentclientprotocol.com/protocol/session-setup#mcp-servers) + */ +export const zMcpServer = z.union([ + zMcpServerHttp.and( + z.object({ + type: z.literal("http"), + }), + ), + zMcpServerSse.and( + z.object({ + type: z.literal("sse"), + }), + ), + z + .object({ + type: z.literal("McpServerStdio").optional(), + }) + .and(zMcpServerStdio), +]); + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * A unique identifier for a model. + * + * @experimental + */ +export const zModelId = z.string(); + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Information about a selectable model. + * + * @experimental + */ +export const zModelInfo = z.object({ + _meta: z.unknown().optional(), + description: z.union([z.string(), z.null()]).optional(), + modelId: zModelId, + name: z.string(), +}); + +/** + * Request parameters for creating a new session. + * + * See protocol docs: [Creating a Session](https://agentclientprotocol.com/protocol/session-setup#creating-a-session) + */ +export const zNewSessionRequest = z.object({ + _meta: z.unknown().optional(), + cwd: z.string(), + mcpServers: z.array(zMcpServer), +}); + +/** + * Unique identifier for a permission option. + */ +export const zPermissionOptionId = z.string(); + +/** + * The type of permission option being presented to the user. + * + * Helps clients choose appropriate icons and UI treatment. + */ +export const zPermissionOptionKind = z.union([ + z.literal("allow_once"), + z.literal("allow_always"), + z.literal("reject_once"), + z.literal("reject_always"), +]); + +/** + * An option presented to the user when requesting permission. + */ +export const zPermissionOption = z.object({ + _meta: z.unknown().optional(), + kind: zPermissionOptionKind, + name: z.string(), + optionId: zPermissionOptionId, +}); + +/** + * Priority levels for plan entries. + * + * Used to indicate the relative importance or urgency of different + * tasks in the execution plan. + * See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent-plan#plan-entries) + */ +export const zPlanEntryPriority = z.union([ + z.literal("high"), + z.literal("medium"), + z.literal("low"), +]); + +/** + * Status of a plan entry in the execution flow. + * + * Tracks the lifecycle of each task from planning through completion. + * See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent-plan#plan-entries) + */ +export const zPlanEntryStatus = z.union([ + z.literal("pending"), + z.literal("in_progress"), + z.literal("completed"), +]); + +/** + * A single entry in the execution plan. + * + * Represents a task or goal that the assistant intends to accomplish + * as part of fulfilling the user's request. + * See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent-plan#plan-entries) + */ +export const zPlanEntry = z.object({ + _meta: z.unknown().optional(), + content: z.string(), + priority: zPlanEntryPriority, + status: zPlanEntryStatus, +}); + +/** + * An execution plan for accomplishing complex tasks. + * + * Plans consist of multiple entries representing individual tasks or goals. + * Agents report plans to clients to provide visibility into their execution strategy. + * Plans can evolve during execution as the agent discovers new requirements or completes tasks. + * + * See protocol docs: [Agent Plan](https://agentclientprotocol.com/protocol/agent-plan) + */ +export const zPlan = z.object({ + _meta: z.unknown().optional(), + entries: z.array(zPlanEntry), +}); + +/** + * Prompt capabilities supported by the agent in `session/prompt` requests. + * + * Baseline agent functionality requires support for [`ContentBlock::Text`] + * and [`ContentBlock::ResourceLink`] in prompt requests. + * + * Other variants must be explicitly opted in to. + * Capabilities for different types of content in prompt requests. + * + * Indicates which content types beyond the baseline (text and resource links) + * the agent can process. + * + * See protocol docs: [Prompt Capabilities](https://agentclientprotocol.com/protocol/initialization#prompt-capabilities) + */ +export const zPromptCapabilities = z.object({ + _meta: z.unknown().optional(), + audio: z.boolean().optional().default(false), + embeddedContext: z.boolean().optional().default(false), + image: z.boolean().optional().default(false), +}); + +/** + * Protocol version identifier. + * + * This version is only bumped for breaking changes. + * Non-breaking changes should be introduced via capabilities. + */ +export const zProtocolVersion = z.number().int().gte(0).lte(65535); + +/** + * Request parameters for the initialize method. + * + * Sent by the client to establish connection and negotiate capabilities. + * + * See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization) + */ +export const zInitializeRequest = z.object({ + _meta: z.unknown().optional(), + clientCapabilities: zClientCapabilities.optional().default({ + fs: { readTextFile: false, writeTextFile: false }, + terminal: false, + }), + clientInfo: z.union([zImplementation, z.null()]).optional(), + protocolVersion: zProtocolVersion, +}); + +/** + * Response containing the contents of a text file. + */ +export const zReadTextFileResponse = z.object({ + _meta: z.unknown().optional(), + content: z.string(), +}); + +/** + * Response to terminal/release method + */ +export const zReleaseTerminalResponse = z.object({ + _meta: z.unknown().optional(), +}); + +/** + * JSON RPC Request Id + * + * An identifier established by the Client that MUST contain a String, Number, or NULL value if included. If it is not included it is assumed to be a notification. The value SHOULD normally not be Null [1] and Numbers SHOULD NOT contain fractional parts [2] + * + * The Server MUST reply with the same value in the Response object if included. This member is used to correlate the context between the two objects. + * + * [1] The use of Null as a value for the id member in a Request object is discouraged, because this specification uses a value of Null for Responses with an unknown id. Also, because JSON-RPC 1.0 uses an id value of Null for Notifications this could cause confusion in handling. + * + * [2] Fractional parts may be problematic, since many decimal fractions cannot be represented exactly as binary fractions. + */ +export const zRequestId = z.union([z.null(), z.coerce.bigint(), z.string()]); + +/** + * The sender or recipient of messages and data in a conversation. + */ +export const zRole = z.enum(["assistant", "user"]); + +/** + * Optional annotations for the client. The client can use annotations to inform how objects are used or displayed + */ +export const zAnnotations = z.object({ + _meta: z.unknown().optional(), + audience: z.union([z.array(zRole), z.null()]).optional(), + lastModified: z.union([z.string(), z.null()]).optional(), + priority: z.union([z.number(), z.null()]).optional(), +}); + +/** + * Audio provided to or from an LLM. + */ +export const zAudioContent = z.object({ + _meta: z.unknown().optional(), + annotations: z.union([zAnnotations, z.null()]).optional(), + data: z.string(), + mimeType: z.string(), +}); + +/** + * An image provided to or from an LLM. + */ +export const zImageContent = z.object({ + _meta: z.unknown().optional(), + annotations: z.union([zAnnotations, z.null()]).optional(), + data: z.string(), + mimeType: z.string(), + uri: z.union([z.string(), z.null()]).optional(), +}); + +/** + * A resource that the server is capable of reading, included in a prompt or tool call result. + */ +export const zResourceLink = z.object({ + _meta: z.unknown().optional(), + annotations: z.union([zAnnotations, z.null()]).optional(), + description: z.union([z.string(), z.null()]).optional(), + mimeType: z.union([z.string(), z.null()]).optional(), + name: z.string(), + size: z.union([z.coerce.bigint(), z.null()]).optional(), + title: z.union([z.string(), z.null()]).optional(), + uri: z.string(), +}); + +/** + * The user selected one of the provided options. + */ +export const zSelectedPermissionOutcome = z.object({ + _meta: z.unknown().optional(), + optionId: zPermissionOptionId, +}); + +/** + * The outcome of a permission request. + */ +export const zRequestPermissionOutcome = z.union([ + z.object({ + outcome: z.literal("cancelled"), + }), + zSelectedPermissionOutcome.and( + z.object({ + outcome: z.literal("selected"), + }), + ), +]); + +/** + * Response to a permission request. + */ +export const zRequestPermissionResponse = z.object({ + _meta: z.unknown().optional(), + outcome: zRequestPermissionOutcome, +}); + +/** + * A unique identifier for a conversation session between a client and agent. + * + * Sessions maintain their own context, conversation history, and state, + * allowing multiple independent interactions with the same agent. + * + * See protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id) + */ +export const zSessionId = z.string(); + +/** + * Notification to cancel ongoing operations for a session. + * + * See protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/prompt-turn#cancellation) + */ +export const zCancelNotification = z.object({ + _meta: z.unknown().optional(), + sessionId: zSessionId, +}); + +export const zClientNotification = z.object({ + method: z.string(), + params: z + .union([z.union([zCancelNotification, zExtNotification]), z.null()]) + .optional(), +}); + +/** + * Request to create a new terminal and execute a command. + */ +export const zCreateTerminalRequest = z.object({ + _meta: z.unknown().optional(), + args: z.array(z.string()).optional(), + command: z.string(), + cwd: z.union([z.string(), z.null()]).optional(), + env: z.array(zEnvVariable).optional(), + outputByteLimit: z.union([z.number().int().gte(0), z.null()]).optional(), + sessionId: zSessionId, +}); + +/** + * Request to kill a terminal command without releasing the terminal. + */ +export const zKillTerminalCommandRequest = z.object({ + _meta: z.unknown().optional(), + sessionId: zSessionId, + terminalId: z.string(), +}); + +/** + * Request parameters for loading an existing session. + * + * Only available if the Agent supports the `loadSession` capability. + * + * See protocol docs: [Loading Sessions](https://agentclientprotocol.com/protocol/session-setup#loading-sessions) + */ +export const zLoadSessionRequest = z.object({ + _meta: z.unknown().optional(), + cwd: z.string(), + mcpServers: z.array(zMcpServer), + sessionId: zSessionId, +}); + +/** + * Request to read content from a text file. + * + * Only available if the client supports the `fs.readTextFile` capability. + */ +export const zReadTextFileRequest = z.object({ + _meta: z.unknown().optional(), + limit: z.union([z.number().int().gte(0), z.null()]).optional(), + line: z.union([z.number().int().gte(0), z.null()]).optional(), + path: z.string(), + sessionId: zSessionId, +}); + +/** + * Request to release a terminal and free its resources. + */ +export const zReleaseTerminalRequest = z.object({ + _meta: z.unknown().optional(), + sessionId: zSessionId, + terminalId: z.string(), +}); + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Information about a session returned by session/list + * + * @experimental + */ +export const zSessionInfo = z.object({ + _meta: z.unknown().optional(), + cwd: z.string(), + sessionId: zSessionId, + title: z.union([z.string(), z.null()]).optional(), + updatedAt: z.union([z.string(), z.null()]).optional(), +}); + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Response from listing sessions. + * + * @experimental + */ +export const zListSessionsResponse = z.object({ + _meta: z.unknown().optional(), + nextCursor: z.union([z.string(), z.null()]).optional(), + sessions: z.array(zSessionInfo), +}); + +/** + * Capabilities for the `session/list` method. + * + * By supplying `{}` it means that the agent supports listing of sessions. + * + * Further capabilities can be added in the future for other means of filtering or searching the list. + */ +export const zSessionListCapabilities = z.object({ + _meta: z.unknown().optional(), +}); + +/** + * Session capabilities supported by the agent. + * + * As a baseline, all Agents **MUST** support `session/new`, `session/prompt`, `session/cancel`, and `session/update`. + * + * Optionally, they **MAY** support other session methods and notifications by specifying additional capabilities. + * + * Note: `session/load` is still handled by the top-level `load_session` capability. This will be unified in future versions of the protocol. + * + * See protocol docs: [Session Capabilities](https://agentclientprotocol.com/protocol/initialization#session-capabilities) + */ +export const zSessionCapabilities = z.object({ + _meta: z.unknown().optional(), + list: z.union([zSessionListCapabilities, z.null()]).optional(), +}); + +/** + * Capabilities supported by the agent. + * + * Advertised during initialization to inform the client about + * available features and content types. + * + * See protocol docs: [Agent Capabilities](https://agentclientprotocol.com/protocol/initialization#agent-capabilities) + */ +export const zAgentCapabilities = z.object({ + _meta: z.unknown().optional(), + loadSession: z.boolean().optional().default(false), + mcpCapabilities: zMcpCapabilities + .optional() + .default({ http: false, sse: false }), + promptCapabilities: zPromptCapabilities.optional().default({ + audio: false, + embeddedContext: false, + image: false, + }), + sessionCapabilities: zSessionCapabilities.optional().default({}), +}); + +/** + * Response to the `initialize` method. + * + * Contains the negotiated protocol version and agent capabilities. + * + * See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization) + */ +export const zInitializeResponse = z.object({ + _meta: z.unknown().optional(), + agentCapabilities: zAgentCapabilities.optional().default({ + loadSession: false, + mcpCapabilities: { http: false, sse: false }, + promptCapabilities: { + audio: false, + embeddedContext: false, + image: false, + }, + sessionCapabilities: {}, + }), + agentInfo: z.union([zImplementation, z.null()]).optional(), + authMethods: z.array(zAuthMethod).optional().default([]), + protocolVersion: zProtocolVersion, +}); + +/** + * Unique identifier for a Session Mode. + */ +export const zSessionModeId = z.string(); + +/** + * The current mode of the session has changed + * + * See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) + */ +export const zCurrentModeUpdate = z.object({ + _meta: z.unknown().optional(), + currentModeId: zSessionModeId, +}); + +/** + * A mode the agent can operate in. + * + * See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) + */ +export const zSessionMode = z.object({ + _meta: z.unknown().optional(), + description: z.union([z.string(), z.null()]).optional(), + id: zSessionModeId, + name: z.string(), +}); + +/** + * The set of modes and the one currently active. + */ +export const zSessionModeState = z.object({ + _meta: z.unknown().optional(), + availableModes: z.array(zSessionMode), + currentModeId: zSessionModeId, +}); + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * The set of models and the one currently active. + * + * @experimental + */ +export const zSessionModelState = z.object({ + _meta: z.unknown().optional(), + availableModels: z.array(zModelInfo), + currentModelId: zModelId, +}); + +/** + * Response from loading an existing session. + */ +export const zLoadSessionResponse = z.object({ + _meta: z.unknown().optional(), + models: z.union([zSessionModelState, z.null()]).optional(), + modes: z.union([zSessionModeState, z.null()]).optional(), +}); + +/** + * Response from creating a new session. + * + * See protocol docs: [Creating a Session](https://agentclientprotocol.com/protocol/session-setup#creating-a-session) + */ +export const zNewSessionResponse = z.object({ + _meta: z.unknown().optional(), + models: z.union([zSessionModelState, z.null()]).optional(), + modes: z.union([zSessionModeState, z.null()]).optional(), + sessionId: zSessionId, +}); + +/** + * Request parameters for setting a session mode. + */ +export const zSetSessionModeRequest = z.object({ + _meta: z.unknown().optional(), + modeId: zSessionModeId, + sessionId: zSessionId, +}); + +/** + * Response to `session/set_mode` method. + */ +export const zSetSessionModeResponse = z.object({ + _meta: z.unknown().optional(), +}); + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Request parameters for setting a session model. + * + * @experimental + */ +export const zSetSessionModelRequest = z.object({ + _meta: z.unknown().optional(), + modelId: zModelId, + sessionId: zSessionId, +}); + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Response to `session/set_model` method. + * + * @experimental + */ +export const zSetSessionModelResponse = z.object({ + _meta: z.unknown().optional(), +}); + +/** + * Reasons why an agent stops processing a prompt turn. + * + * See protocol docs: [Stop Reasons](https://agentclientprotocol.com/protocol/prompt-turn#stop-reasons) + */ +export const zStopReason = z.union([ + z.literal("end_turn"), + z.literal("max_tokens"), + z.literal("max_turn_requests"), + z.literal("refusal"), + z.literal("cancelled"), +]); + +/** + * Response from processing a user prompt. + * + * See protocol docs: [Check for Completion](https://agentclientprotocol.com/protocol/prompt-turn#4-check-for-completion) + */ +export const zPromptResponse = z.object({ + _meta: z.unknown().optional(), + stopReason: zStopReason, +}); + +export const zAgentResponse = z.union([ + z.object({ + id: zRequestId, + result: z.union([ + zInitializeResponse, + zAuthenticateResponse, + zNewSessionResponse, + zLoadSessionResponse, + zListSessionsResponse, + zSetSessionModeResponse, + zPromptResponse, + zSetSessionModelResponse, + zExtResponse, + ]), + }), + z.object({ + error: zError, + id: zRequestId, + }), +]); + +/** + * Embed a terminal created with `terminal/create` by its id. + * + * The terminal must be added before calling `terminal/release`. + * + * See protocol docs: [Terminal](https://agentclientprotocol.com/protocol/terminals) + */ +export const zTerminal = z.object({ + _meta: z.unknown().optional(), + terminalId: z.string(), +}); + +/** + * Exit status of a terminal command. + */ +export const zTerminalExitStatus = z.object({ + _meta: z.unknown().optional(), + exitCode: z.union([z.number().int().gte(0), z.null()]).optional(), + signal: z.union([z.string(), z.null()]).optional(), +}); + +/** + * Request to get the current output and status of a terminal. + */ +export const zTerminalOutputRequest = z.object({ + _meta: z.unknown().optional(), + sessionId: zSessionId, + terminalId: z.string(), +}); + +/** + * Response containing the terminal output and exit status. + */ +export const zTerminalOutputResponse = z.object({ + _meta: z.unknown().optional(), + exitStatus: z.union([zTerminalExitStatus, z.null()]).optional(), + output: z.string(), + truncated: z.boolean(), +}); + +/** + * Text provided to or from an LLM. + */ +export const zTextContent = z.object({ + _meta: z.unknown().optional(), + annotations: z.union([zAnnotations, z.null()]).optional(), + text: z.string(), +}); + +/** + * Text-based resource contents. + */ +export const zTextResourceContents = z.object({ + _meta: z.unknown().optional(), + mimeType: z.union([z.string(), z.null()]).optional(), + text: z.string(), + uri: z.string(), +}); + +/** + * Resource content that can be embedded in a message. + */ +export const zEmbeddedResourceResource = z.union([ + zTextResourceContents, + zBlobResourceContents, +]); + +/** + * The contents of a resource, embedded into a prompt or tool call result. + */ +export const zEmbeddedResource = z.object({ + _meta: z.unknown().optional(), + annotations: z.union([zAnnotations, z.null()]).optional(), + resource: zEmbeddedResourceResource, +}); + +/** + * Content blocks represent displayable information in the Agent Client Protocol. + * + * They provide a structured way to handle various types of user-facing content—whether + * it's text from language models, images for analysis, or embedded resources for context. + * + * Content blocks appear in: + * - User prompts sent via `session/prompt` + * - Language model output streamed through `session/update` notifications + * - Progress updates and results from tool calls + * + * This structure is compatible with the Model Context Protocol (MCP), enabling + * agents to seamlessly forward content from MCP tool outputs without transformation. + * + * See protocol docs: [Content](https://agentclientprotocol.com/protocol/content) + */ +export const zContentBlock = z.union([ + zTextContent.and( + z.object({ + type: z.literal("text"), + }), + ), + zImageContent.and( + z.object({ + type: z.literal("image"), + }), + ), + zAudioContent.and( + z.object({ + type: z.literal("audio"), + }), + ), + zResourceLink.and( + z.object({ + type: z.literal("resource_link"), + }), + ), + zEmbeddedResource.and( + z.object({ + type: z.literal("resource"), + }), + ), +]); + +/** + * Standard content block (text, images, resources). + */ +export const zContent = z.object({ + _meta: z.unknown().optional(), + content: zContentBlock, +}); + +/** + * A streamed item of content + */ +export const zContentChunk = z.object({ + _meta: z.unknown().optional(), + content: zContentBlock, +}); + +/** + * Request parameters for sending a user prompt to the agent. + * + * Contains the user's message and any additional context. + * + * See protocol docs: [User Message](https://agentclientprotocol.com/protocol/prompt-turn#1-user-message) + */ +export const zPromptRequest = z.object({ + _meta: z.unknown().optional(), + prompt: z.array(zContentBlock), + sessionId: zSessionId, +}); + +export const zClientRequest = z.object({ + id: zRequestId, + method: z.string(), + params: z + .union([ + z.union([ + zInitializeRequest, + zAuthenticateRequest, + zNewSessionRequest, + zLoadSessionRequest, + zListSessionsRequest, + zSetSessionModeRequest, + zPromptRequest, + zSetSessionModelRequest, + zExtRequest, + ]), + z.null(), + ]) + .optional(), +}); + +/** + * Content produced by a tool call. + * + * Tool calls can produce different types of content including + * standard content blocks (text, images) or file diffs. + * + * See protocol docs: [Content](https://agentclientprotocol.com/protocol/tool-calls#content) + */ +export const zToolCallContent = z.union([ + zContent.and( + z.object({ + type: z.literal("content"), + }), + ), + zDiff.and( + z.object({ + type: z.literal("diff"), + }), + ), + zTerminal.and( + z.object({ + type: z.literal("terminal"), + }), + ), +]); + +/** + * Unique identifier for a tool call within a session. + */ +export const zToolCallId = z.string(); + +/** + * A file location being accessed or modified by a tool. + * + * Enables clients to implement "follow-along" features that track + * which files the agent is working with in real-time. + * + * See protocol docs: [Following the Agent](https://agentclientprotocol.com/protocol/tool-calls#following-the-agent) + */ +export const zToolCallLocation = z.object({ + _meta: z.unknown().optional(), + line: z.union([z.number().int().gte(0), z.null()]).optional(), + path: z.string(), +}); + +/** + * Execution status of a tool call. + * + * Tool calls progress through different statuses during their lifecycle. + * + * See protocol docs: [Status](https://agentclientprotocol.com/protocol/tool-calls#status) + */ +export const zToolCallStatus = z.union([ + z.literal("pending"), + z.literal("in_progress"), + z.literal("completed"), + z.literal("failed"), +]); + +/** + * Categories of tools that can be invoked. + * + * Tool kinds help clients choose appropriate icons and optimize how they + * display tool execution progress. + * + * See protocol docs: [Creating](https://agentclientprotocol.com/protocol/tool-calls#creating) + */ +export const zToolKind = z.union([ + z.literal("read"), + z.literal("edit"), + z.literal("delete"), + z.literal("move"), + z.literal("search"), + z.literal("execute"), + z.literal("think"), + z.literal("fetch"), + z.literal("switch_mode"), + z.literal("other"), +]); + +/** + * Represents a tool call that the language model has requested. + * + * Tool calls are actions that the agent executes on behalf of the language model, + * such as reading files, executing code, or fetching data from external sources. + * + * See protocol docs: [Tool Calls](https://agentclientprotocol.com/protocol/tool-calls) + */ +export const zToolCall = z.object({ + _meta: z.unknown().optional(), + content: z.array(zToolCallContent).optional(), + kind: zToolKind.optional(), + locations: z.array(zToolCallLocation).optional(), + rawInput: z.unknown().optional(), + rawOutput: z.unknown().optional(), + status: zToolCallStatus.optional(), + title: z.string(), + toolCallId: zToolCallId, +}); + +/** + * An update to an existing tool call. + * + * Used to report progress and results as tools execute. All fields except + * the tool call ID are optional - only changed fields need to be included. + * + * See protocol docs: [Updating](https://agentclientprotocol.com/protocol/tool-calls#updating) + */ +export const zToolCallUpdate = z.object({ + _meta: z.unknown().optional(), + content: z.union([z.array(zToolCallContent), z.null()]).optional(), + kind: z.union([zToolKind, z.null()]).optional(), + locations: z.union([z.array(zToolCallLocation), z.null()]).optional(), + rawInput: z.unknown().optional(), + rawOutput: z.unknown().optional(), + status: z.union([zToolCallStatus, z.null()]).optional(), + title: z.union([z.string(), z.null()]).optional(), + toolCallId: zToolCallId, +}); + +/** + * Request for user permission to execute a tool call. + * + * Sent when the agent needs authorization before performing a sensitive operation. + * + * See protocol docs: [Requesting Permission](https://agentclientprotocol.com/protocol/tool-calls#requesting-permission) + */ +export const zRequestPermissionRequest = z.object({ + _meta: z.unknown().optional(), + options: z.array(zPermissionOption), + sessionId: zSessionId, + toolCall: zToolCallUpdate, +}); + +/** + * All text that was typed after the command name is provided as input. + */ +export const zUnstructuredCommandInput = z.object({ + _meta: z.unknown().optional(), + hint: z.string(), +}); + +/** + * All text that was typed after the command name is provided as input. + */ +export const zAvailableCommandInput = zUnstructuredCommandInput; + +/** + * Information about a command. + */ +export const zAvailableCommand = z.object({ + _meta: z.unknown().optional(), + description: z.string(), + input: z.union([zAvailableCommandInput, z.null()]).optional(), + name: z.string(), +}); + +/** + * Available commands are ready or have changed + */ +export const zAvailableCommandsUpdate = z.object({ + _meta: z.unknown().optional(), + availableCommands: z.array(zAvailableCommand), +}); + +/** + * Different types of updates that can be sent during session processing. + * + * These updates provide real-time feedback about the agent's progress. + * + * See protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/prompt-turn#3-agent-reports-output) + */ +export const zSessionUpdate = z.union([ + zContentChunk.and( + z.object({ + sessionUpdate: z.literal("user_message_chunk"), + }), + ), + zContentChunk.and( + z.object({ + sessionUpdate: z.literal("agent_message_chunk"), + }), + ), + zContentChunk.and( + z.object({ + sessionUpdate: z.literal("agent_thought_chunk"), + }), + ), + zToolCall.and( + z.object({ + sessionUpdate: z.literal("tool_call"), + }), + ), + zToolCallUpdate.and( + z.object({ + sessionUpdate: z.literal("tool_call_update"), + }), + ), + zPlan.and( + z.object({ + sessionUpdate: z.literal("plan"), + }), + ), + zAvailableCommandsUpdate.and( + z.object({ + sessionUpdate: z.literal("available_commands_update"), + }), + ), + zCurrentModeUpdate.and( + z.object({ + sessionUpdate: z.literal("current_mode_update"), + }), + ), +]); + +/** + * Notification containing a session update from the agent. + * + * Used to stream real-time progress and results during prompt processing. + * + * See protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/prompt-turn#3-agent-reports-output) + */ +export const zSessionNotification = z.object({ + _meta: z.unknown().optional(), + sessionId: zSessionId, + update: zSessionUpdate, +}); + +export const zAgentNotification = z.object({ + method: z.string(), + params: z + .union([z.union([zSessionNotification, zExtNotification]), z.null()]) + .optional(), +}); + +/** + * Request to wait for a terminal command to exit. + */ +export const zWaitForTerminalExitRequest = z.object({ + _meta: z.unknown().optional(), + sessionId: zSessionId, + terminalId: z.string(), +}); + +/** + * Response containing the exit status of a terminal command. + */ +export const zWaitForTerminalExitResponse = z.object({ + _meta: z.unknown().optional(), + exitCode: z.union([z.number().int().gte(0), z.null()]).optional(), + signal: z.union([z.string(), z.null()]).optional(), +}); + +/** + * Request to write content to a text file. + * + * Only available if the client supports the `fs.writeTextFile` capability. + */ +export const zWriteTextFileRequest = z.object({ + _meta: z.unknown().optional(), + content: z.string(), + path: z.string(), + sessionId: zSessionId, +}); + +export const zAgentRequest = z.object({ + id: zRequestId, + method: z.string(), + params: z + .union([ + z.union([ + zWriteTextFileRequest, + zReadTextFileRequest, + zRequestPermissionRequest, + zCreateTerminalRequest, + zTerminalOutputRequest, + zReleaseTerminalRequest, + zWaitForTerminalExitRequest, + zKillTerminalCommandRequest, + zExtRequest, + ]), + z.null(), + ]) + .optional(), +}); + +/** + * Response to `fs/write_text_file` + */ +export const zWriteTextFileResponse = z.object({ + _meta: z.unknown().optional(), +}); + +export const zClientResponse = z.union([ + z.object({ + id: zRequestId, + result: z.union([ + zWriteTextFileResponse, + zReadTextFileResponse, + zRequestPermissionResponse, + zCreateTerminalResponse, + zTerminalOutputResponse, + zReleaseTerminalResponse, + zWaitForTerminalExitResponse, + zKillTerminalCommandResponse, + zExtResponse, + ]), + }), + z.object({ + error: zError, + id: zRequestId, + }), +]);