diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 83d878b6..d1c1dbb9 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -49,33 +49,10 @@ jobs:
config: ./typos.toml
- name: Lint
- run: npm run lint
+ run: cargo clippy
- name: Build
- run: npm run build
+ run: cargo build --all-targets --all-features
- name: Run tests
- run: npm test
-
- - name: Generate TypeDoc documentation
- run: npm run docs:ts:build
-
- - name: Upload documentation artifact
- if: github.event_name == 'push' && github.ref == 'refs/heads/main'
- uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b
- with:
- path: ./typescript/docs
-
- deploy-docs:
- name: Deploy Documentation
- if: github.event_name == 'push' && github.ref == 'refs/heads/main'
- environment:
- name: github-pages
- url: ${{ steps.deployment.outputs.page_url }}
- runs-on: ubuntu-latest
- needs: build
-
- steps:
- - name: Deploy to GitHub Pages
- id: deployment
- uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e
+ run: cargo test --all-features
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index a5328c8d..d304d047 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -21,21 +21,3 @@ jobs:
- run: cargo publish
env:
CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}
- publish-npm:
- runs-on: ubuntu-latest
- environment: release # Optional: for enhanced security
- permissions:
- contents: read
- id-token: write
- steps:
- - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
- # Setup .npmrc file to publish to npm
- - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444
- with:
- node-version: "lts/*"
- registry-url: "https://registry.npmjs.org"
- - name: Update npm
- run: npm install -g npm@latest
- - run: npm ci
- - run: npm run build
- - run: npm publish
diff --git a/.prettierignore b/.prettierignore
deleted file mode 100644
index ea926093..00000000
--- a/.prettierignore
+++ /dev/null
@@ -1 +0,0 @@
-typescript/examples/README.md
diff --git a/AGENTS.md b/AGENTS.md
index 333d1617..ea986258 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -25,7 +25,6 @@ All paths in the protocol should be absolute
- Handle the new request in the blanket impl of MessageHandler<{Agent|Client}Side>
- Add the method to markdown_generator.rs SideDocs functions
- Run `npm run generate` and fix any issues that appear
-- Add the method to typescript/acp.ts classes and handlers
- Run `npm run check`
- Update the example agents and clients in tests and examples in both libraries
@@ -33,6 +32,5 @@ All paths in the protocol should be absolute
- Update the mintlify docs and guides in the `docs` directory
- Run `npm run check` to make sure the json and zod schemas gets generated properly
-- Params and responses docs make it to the schema, but the method-level docs, so make sure to update the typescript library accordingly.
Never write readme files related to the conversation unless explicitly asked to.
diff --git a/package-lock.json b/package-lock.json
index b154e2f8..da77cca9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,46 +1,16 @@
{
- "name": "@agentclientprotocol/sdk",
- "version": "0.4.6",
+ "name": "@agentclientprotocol/schema",
+ "version": "0.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "@agentclientprotocol/sdk",
- "version": "0.4.6",
+ "name": "@agentclientprotocol/schema",
+ "version": "0.0.0",
"license": "Apache-2.0",
- "dependencies": {
- "zod": "^3.0.0"
- },
"devDependencies": {
- "@types/node": "^24.1.0",
- "concurrently": "^9.1.0",
- "http-server": "^14.1.1",
- "json-schema-to-typescript": "^15.0.4",
"prettier": "^3.3.3",
- "ts-to-zod": "^3.15.0",
- "tsx": "^4.20.5",
- "typedoc": "^0.28.11",
- "typedoc-github-theme": "^0.3.1",
- "typescript": "^5.8.3",
- "vitest": "^3.2.4"
- }
- },
- "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"
- },
- "funding": {
- "url": "https://github.com/sponsors/philsturgeon"
+ "tsx": "^4.20.5"
}
},
"node_modules/@esbuild/aix-ppc64": {
@@ -485,3003 +455,106 @@
"node": ">=18"
}
},
- "node_modules/@gerrit0/mini-shiki": {
- "version": "3.13.0",
- "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.13.0.tgz",
- "integrity": "sha512-mCrNvZNYNrwKer5PWLF6cOc0OEe2eKzgy976x+IT2tynwJYl+7UpHTSeXQJGijgTcoOf+f359L946unWlYRnsg==",
- "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/vscode-textmate": "^10.0.2"
- }
- },
- "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==",
+ "node_modules/esbuild": {
+ "version": "0.25.10",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz",
+ "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==",
"dev": true,
+ "hasInstallScript": true,
"license": "MIT",
- "dependencies": {
- "chardet": "^2.1.0",
- "iconv-lite": "^0.7.0"
+ "bin": {
+ "esbuild": "bin/esbuild"
},
"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",
- "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@jsdevtools/ono": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
- "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@oclif/core": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.5.4.tgz",
- "integrity": "sha512-78YYJls8+KG96tReyUsesKKIKqC0qbFSY1peUSrt0P2uGsrgAuU9axQ0iBQdhAlIwZDcTyaj+XXVQkz2kl/O0w==",
- "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.6.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"
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.10",
+ "@esbuild/android-arm": "0.25.10",
+ "@esbuild/android-arm64": "0.25.10",
+ "@esbuild/android-x64": "0.25.10",
+ "@esbuild/darwin-arm64": "0.25.10",
+ "@esbuild/darwin-x64": "0.25.10",
+ "@esbuild/freebsd-arm64": "0.25.10",
+ "@esbuild/freebsd-x64": "0.25.10",
+ "@esbuild/linux-arm": "0.25.10",
+ "@esbuild/linux-arm64": "0.25.10",
+ "@esbuild/linux-ia32": "0.25.10",
+ "@esbuild/linux-loong64": "0.25.10",
+ "@esbuild/linux-mips64el": "0.25.10",
+ "@esbuild/linux-ppc64": "0.25.10",
+ "@esbuild/linux-riscv64": "0.25.10",
+ "@esbuild/linux-s390x": "0.25.10",
+ "@esbuild/linux-x64": "0.25.10",
+ "@esbuild/netbsd-arm64": "0.25.10",
+ "@esbuild/netbsd-x64": "0.25.10",
+ "@esbuild/openbsd-arm64": "0.25.10",
+ "@esbuild/openbsd-x64": "0.25.10",
+ "@esbuild/openharmony-arm64": "0.25.10",
+ "@esbuild/sunos-x64": "0.25.10",
+ "@esbuild/win32-arm64": "0.25.10",
+ "@esbuild/win32-ia32": "0.25.10",
+ "@esbuild/win32-x64": "0.25.10"
}
},
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.0.tgz",
- "integrity": "sha512-VxDYCDqOaR7NXzAtvRx7G1u54d2kEHopb28YH/pKzY6y0qmogP3gG7CSiWsq9WvDFxOQMpNEyjVAHZFXfH3o/A==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.0.tgz",
- "integrity": "sha512-pqDirm8koABIKvzL59YI9W9DWbRlTX7RWhN+auR8HXJxo89m4mjqbah7nJZjeKNTNYopqL+yGg+0mhCpf3xZtQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.0.tgz",
- "integrity": "sha512-YCdWlY/8ltN6H78HnMsRHYlPiKvqKagBP1r+D7SSylxX+HnsgXGCmLiV3Y4nSyY9hW8qr8U9LDUx/Lo7M6MfmQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.0.tgz",
- "integrity": "sha512-z4nw6y1j+OOSGzuVbSWdIp1IUks9qNw4dc7z7lWuWDKojY38VMWBlEN7F9jk5UXOkUcp97vA1N213DF+Lz8BRg==",
- "cpu": [
- "x64"
- ],
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
+ "hasInstallScript": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.0.tgz",
- "integrity": "sha512-Q/dv9Yvyr5rKlK8WQJZVrp5g2SOYeZUs9u/t2f9cQ2E0gJjYB/BWoedXfUT0EcDJefi2zzVfhcOj8drWCzTviw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.0.tgz",
- "integrity": "sha512-kdBsLs4Uile/fbjZVvCRcKB4q64R+1mUq0Yd7oU1CMm1Av336ajIFqNFovByipciuUQjBCPMxwJhCgfG2re3rg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.0.tgz",
- "integrity": "sha512-aL6hRwu0k7MTUESgkg7QHY6CoqPgr6gdQXRJI1/VbFlUMwsSzPGSR7sG5d+MCbYnJmJwThc2ol3nixj1fvI/zQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.0.tgz",
- "integrity": "sha512-BTs0M5s1EJejgIBJhCeiFo7GZZ2IXWkFGcyZhxX4+8usnIo5Mti57108vjXFIQmmJaRyDwmV59Tw64Ap1dkwMw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.0.tgz",
- "integrity": "sha512-uj672IVOU9m08DBGvoPKPi/J8jlVgjh12C9GmjjBxCTQc3XtVmRkRKyeHSmIKQpvJ7fIm1EJieBUcnGSzDVFyw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.0.tgz",
- "integrity": "sha512-/+IVbeDMDCtB/HP/wiWsSzduD10SEGzIZX2945KSgZRNi4TSkjHqRJtNTVtVb8IRwhJ65ssI56krlLik+zFWkw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loong64-gnu": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.0.tgz",
- "integrity": "sha512-U1vVzvSWtSMWKKrGoROPBXMh3Vwn93TA9V35PldokHGqiUbF6erSzox/5qrSMKp6SzakvyjcPiVF8yB1xKr9Pg==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.0.tgz",
- "integrity": "sha512-X/4WfuBAdQRH8cK3DYl8zC00XEE6aM472W+QCycpQJeLWVnHfkv7RyBFVaTqNUMsTgIX8ihMjCvFF9OUgeABzw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.0.tgz",
- "integrity": "sha512-xIRYc58HfWDBZoLmWfWXg2Sq8VCa2iJ32B7mqfWnkx5mekekl0tMe7FHpY8I72RXEcUkaWawRvl3qA55og+cwQ==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.0.tgz",
- "integrity": "sha512-mbsoUey05WJIOz8U1WzNdf+6UMYGwE3fZZnQqsM22FZ3wh1N887HT6jAOjXs6CNEK3Ntu2OBsyQDXfIjouI4dw==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.0.tgz",
- "integrity": "sha512-qP6aP970bucEi5KKKR4AuPFd8aTx9EF6BvutvYxmZuWLJHmnq4LvBfp0U+yFDMGwJ+AIJEH5sIP+SNypauMWzg==",
- "cpu": [
- "s390x"
],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
},
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.0.tgz",
- "integrity": "sha512-nmSVN+F2i1yKZ7rJNKO3G7ZzmxJgoQBQZ/6c4MuS553Grmr7WqR7LLDcYG53Z2m9409z3JLt4sCOhLdbKQ3HmA==",
- "cpu": [
- "x64"
- ],
+ "node_modules/get-tsconfig": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz",
+ "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
},
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.0.tgz",
- "integrity": "sha512-2d0qRo33G6TfQVjaMR71P+yJVGODrt5V6+T0BDYH4EMfGgdC/2HWDVjSSFw888GSzAZUwuska3+zxNUCDco6rQ==",
- "cpu": [
- "x64"
- ],
+ "node_modules/prettier": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
+ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
},
- "node_modules/@rollup/rollup-openharmony-arm64": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.0.tgz",
- "integrity": "sha512-A1JalX4MOaFAAyGgpO7XP5khquv/7xKzLIyLmhNrbiCxWpMlnsTYr8dnsWM7sEeotNmxvSOEL7F65j0HXFcFsw==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ]
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
},
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.0.tgz",
- "integrity": "sha512-YQugafP/rH0eOOHGjmNgDURrpYHrIX0yuojOI8bwCyXwxC9ZdTd3vYkmddPX0oHONLXu9Rb1dDmT0VNpjkzGGw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.0.tgz",
- "integrity": "sha512-zYdUYhi3Qe2fndujBqL5FjAFzvNeLxtIqfzNEVKD1I7C37/chv1VxhscWSQHTNfjPCrBFQMnynwA3kpZpZ8w4A==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-gnu": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.0.tgz",
- "integrity": "sha512-fGk03kQylNaCOQ96HDMeT7E2n91EqvCDd3RwvT5k+xNdFCeMGnj5b5hEgTGrQuyidqSsD3zJDQ21QIaxXqTBJw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.0.tgz",
- "integrity": "sha512-6iKDCVSIUQ8jPMoIV0OytRKniaYyy5EbY/RRydmLW8ZR3cEBhxbWl5ro0rkUNe0ef6sScvhbY79HrjRm8i3vDQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "3.13.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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "3.13.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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "3.13.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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@shikijs/vscode-textmate": "^10.0.2",
- "@types/hast": "^3.0.4"
- }
- },
- "node_modules/@shikijs/vscode-textmate": {
- "version": "10.0.2",
- "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
- "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/chai": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz",
- "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/deep-eql": "*"
- }
- },
- "node_modules/@types/deep-eql": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
- "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/hast": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
- "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/unist": "*"
- }
- },
- "node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "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.5.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.5.2.tgz",
- "integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "undici-types": "~7.12.0"
- }
- },
- "node_modules/@types/unist": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
- "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
- "dev": true,
- "license": "MIT"
- },
- "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": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz",
- "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/chai": "^5.2.2",
- "@vitest/spy": "3.2.4",
- "@vitest/utils": "3.2.4",
- "chai": "^5.2.0",
- "tinyrainbow": "^2.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/mocker": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz",
- "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vitest/spy": "3.2.4",
- "estree-walker": "^3.0.3",
- "magic-string": "^0.30.17"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- },
- "peerDependencies": {
- "msw": "^2.4.9",
- "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
- },
- "peerDependenciesMeta": {
- "msw": {
- "optional": true
- },
- "vite": {
- "optional": true
- }
- }
- },
- "node_modules/@vitest/pretty-format": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz",
- "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "tinyrainbow": "^2.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/runner": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz",
- "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vitest/utils": "3.2.4",
- "pathe": "^2.0.3",
- "strip-literal": "^3.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/snapshot": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz",
- "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vitest/pretty-format": "3.2.4",
- "magic-string": "^0.30.17",
- "pathe": "^2.0.3"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/spy": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz",
- "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "tinyspy": "^4.0.3"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/utils": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz",
- "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vitest/pretty-format": "3.2.4",
- "loupe": "^3.1.4",
- "tinyrainbow": "^2.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.21.3"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "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/anymatch/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true,
- "license": "Python-2.0"
- },
- "node_modules/assertion-error": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
- "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/async": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
- "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "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",
- "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "5.1.2"
- },
- "engines": {
- "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",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "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"
- }
- },
- "node_modules/cac": {
- "version": "6.7.14",
- "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
- "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/call-bind-apply-helpers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/call-bound": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
- "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "get-intrinsic": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "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": "5.3.3",
- "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz",
- "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "assertion-error": "^2.0.1",
- "check-error": "^2.1.1",
- "deep-eql": "^5.0.1",
- "loupe": "^3.1.0",
- "pathval": "^2.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/chalk/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "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/check-error": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
- "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 16"
- }
- },
- "node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "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"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "escape-string-regexp": "4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "restore-cursor": "^3.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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==",
- "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"
- }
- },
- "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": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/concurrently": {
- "version": "9.2.1",
- "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz",
- "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "4.1.2",
- "rxjs": "7.8.2",
- "shell-quote": "1.8.3",
- "supports-color": "8.1.1",
- "tree-kill": "1.2.2",
- "yargs": "17.7.2"
- },
- "bin": {
- "conc": "dist/bin/concurrently.js",
- "concurrently": "dist/bin/concurrently.js"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
- }
- },
- "node_modules/corser": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
- "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/deep-eql": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
- "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "clone": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "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",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-module-lexer": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
- "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/esbuild": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz",
- "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.10",
- "@esbuild/android-arm": "0.25.10",
- "@esbuild/android-arm64": "0.25.10",
- "@esbuild/android-x64": "0.25.10",
- "@esbuild/darwin-arm64": "0.25.10",
- "@esbuild/darwin-x64": "0.25.10",
- "@esbuild/freebsd-arm64": "0.25.10",
- "@esbuild/freebsd-x64": "0.25.10",
- "@esbuild/linux-arm": "0.25.10",
- "@esbuild/linux-arm64": "0.25.10",
- "@esbuild/linux-ia32": "0.25.10",
- "@esbuild/linux-loong64": "0.25.10",
- "@esbuild/linux-mips64el": "0.25.10",
- "@esbuild/linux-ppc64": "0.25.10",
- "@esbuild/linux-riscv64": "0.25.10",
- "@esbuild/linux-s390x": "0.25.10",
- "@esbuild/linux-x64": "0.25.10",
- "@esbuild/netbsd-arm64": "0.25.10",
- "@esbuild/netbsd-x64": "0.25.10",
- "@esbuild/openbsd-arm64": "0.25.10",
- "@esbuild/openbsd-x64": "0.25.10",
- "@esbuild/openharmony-arm64": "0.25.10",
- "@esbuild/sunos-x64": "0.25.10",
- "@esbuild/win32-arm64": "0.25.10",
- "@esbuild/win32-ia32": "0.25.10",
- "@esbuild/win32-x64": "0.25.10"
- }
- },
- "node_modules/escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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/estree-walker": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
- "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "^1.0.0"
- }
- },
- "node_modules/eventemitter3": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/expect-type": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz",
- "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "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/figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "escape-string-regexp": "^1.0.5"
- },
- "engines": {
- "node": ">=8"
- },
- "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"
- }
- },
- "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/follow-redirects": {
- "version": "1.15.11",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
- "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/RubenVerborgh"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=4.0"
- },
- "peerDependenciesMeta": {
- "debug": {
- "optional": true
- }
- }
- },
- "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",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "function-bind": "^1.1.2",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "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",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/get-tsconfig": {
- "version": "4.10.1",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz",
- "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "resolve-pkg-maps": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
- }
- },
- "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/gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "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/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/html-encoding-sniffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
- "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "whatwg-encoding": "^2.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/http-proxy": {
- "version": "1.18.1",
- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
- "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eventemitter3": "^4.0.0",
- "follow-redirects": "^1.0.0",
- "requires-port": "^1.0.0"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/http-server": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz",
- "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "basic-auth": "^2.0.1",
- "chalk": "^4.1.2",
- "corser": "^2.0.1",
- "he": "^1.2.0",
- "html-encoding-sniffer": "^3.0.0",
- "http-proxy": "^1.18.1",
- "mime": "^1.6.0",
- "minimist": "^1.2.6",
- "opener": "^1.5.1",
- "portfinder": "^1.0.28",
- "secure-compare": "3.0.1",
- "union": "~0.5.0",
- "url-join": "^4.0.1"
- },
- "bin": {
- "http-server": "bin/http-server"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "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/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==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-interactive": {
- "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==",
- "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"
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-docker": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "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==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "async": "^3.2.6",
- "filelist": "^1.0.4",
- "picocolors": "^1.1.1"
- },
- "bin": {
- "jake": "bin/cli.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/js-tokens": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
- "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "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/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/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",
- "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "uc.micro": "^2.0.0"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "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/loupe": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz",
- "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/lunr": {
- "version": "2.3.9",
- "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
- "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
- "dev": true,
- "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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.5"
- }
- },
- "node_modules/markdown-it": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
- "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1",
- "entities": "^4.4.0",
- "linkify-it": "^5.0.0",
- "mdurl": "^2.0.0",
- "punycode.js": "^2.3.1",
- "uc.micro": "^2.1.0"
- },
- "bin": {
- "markdown-it": "bin/markdown-it.mjs"
- }
- },
- "node_modules/math-intrinsics": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/mdurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
- "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "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",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "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",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.13.4",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
- "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "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==",
- "dev": true,
- "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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/opener": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
- "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
- "dev": true,
- "license": "(WTFPL OR MIT)",
- "bin": {
- "opener": "bin/opener-bin.js"
- }
- },
- "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/pathe": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
- "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/pathval": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz",
- "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 14.16"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
- },
- "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/portfinder": {
- "version": "1.0.38",
- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.38.tgz",
- "integrity": "sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "async": "^3.2.6",
- "debug": "^4.3.6"
- },
- "engines": {
- "node": ">= 10.12"
- }
- },
- "node_modules/postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.11",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/prettier": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
- "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "prettier": "bin/prettier.cjs"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
- }
- },
- "node_modules/punycode.js": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
- "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/qs": {
- "version": "6.14.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
- "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/readdirp/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/resolve-pkg-maps": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
- "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "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/rollup": {
- "version": "4.52.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.0.tgz",
- "integrity": "sha512-+IuescNkTJQgX7AkIDtITipZdIGcWF0pnVvZTWStiazUmcGA2ag8dfg0urest2XlXUi9kuhfQ+qmdc5Stc3z7g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "1.0.8"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.52.0",
- "@rollup/rollup-android-arm64": "4.52.0",
- "@rollup/rollup-darwin-arm64": "4.52.0",
- "@rollup/rollup-darwin-x64": "4.52.0",
- "@rollup/rollup-freebsd-arm64": "4.52.0",
- "@rollup/rollup-freebsd-x64": "4.52.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.52.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.52.0",
- "@rollup/rollup-linux-arm64-gnu": "4.52.0",
- "@rollup/rollup-linux-arm64-musl": "4.52.0",
- "@rollup/rollup-linux-loong64-gnu": "4.52.0",
- "@rollup/rollup-linux-ppc64-gnu": "4.52.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.52.0",
- "@rollup/rollup-linux-riscv64-musl": "4.52.0",
- "@rollup/rollup-linux-s390x-gnu": "4.52.0",
- "@rollup/rollup-linux-x64-gnu": "4.52.0",
- "@rollup/rollup-linux-x64-musl": "4.52.0",
- "@rollup/rollup-openharmony-arm64": "4.52.0",
- "@rollup/rollup-win32-arm64-msvc": "4.52.0",
- "@rollup/rollup-win32-ia32-msvc": "4.52.0",
- "@rollup/rollup-win32-x64-gnu": "4.52.0",
- "@rollup/rollup-win32-x64-msvc": "4.52.0",
- "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==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.2",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
- "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/secure-compare": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz",
- "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/semver": {
- "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": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/shell-quote": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
- "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
- "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3",
- "side-channel-list": "^1.0.0",
- "side-channel-map": "^1.0.1",
- "side-channel-weakmap": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-list": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-map": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
- "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-weakmap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
- "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3",
- "side-channel-map": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/siginfo": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
- "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
- "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",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/stackback": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
- "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/std-env": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz",
- "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==",
- "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",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-literal": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz",
- "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "js-tokens": "^9.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "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",
- "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
- "dev": true,
- "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==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/tinyglobby": {
- "version": "0.2.15",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
- "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.5.0",
- "picomatch": "^4.0.3"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tinypool": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz",
- "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.0.0 || >=20.0.0"
- }
- },
- "node_modules/tinyrainbow": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz",
- "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/tinyspy": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz",
- "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "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",
- "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "tree-kill": "cli.js"
- }
- },
- "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",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "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.5",
- "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.5.tgz",
- "integrity": "sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==",
+ "node_modules/tsx": {
+ "version": "4.20.5",
+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.5.tgz",
+ "integrity": "sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3497,443 +570,6 @@
"optionalDependencies": {
"fsevents": "~2.3.3"
}
- },
- "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.13",
- "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.13.tgz",
- "integrity": "sha512-dNWY8msnYB2a+7Audha+aTF1Pu3euiE7ySp53w8kEsXoYw7dMouV5A1UsTUY345aB152RHnmRMDiovuBi7BD+w==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@gerrit0/mini-shiki": "^3.12.0",
- "lunr": "^2.3.9",
- "markdown-it": "^14.1.0",
- "minimatch": "^9.0.5",
- "yaml": "^2.8.1"
- },
- "bin": {
- "typedoc": "bin/typedoc"
- },
- "engines": {
- "node": ">= 18",
- "pnpm": ">= 10"
- },
- "peerDependencies": {
- "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x"
- }
- },
- "node_modules/typedoc-github-theme": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/typedoc-github-theme/-/typedoc-github-theme-0.3.1.tgz",
- "integrity": "sha512-j6PmkAGmf/MGCzYjQcUH6jS9djPsNl/IoTXooxC+MoeMkBhbmPyKJlpR6Lw12BLoe2OYpYA2J1KMktUJXp/8Sw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18.0.0"
- },
- "peerDependencies": {
- "typedoc": "~0.28.0"
- }
- },
- "node_modules/typescript": {
- "version": "5.9.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
- "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/uc.micro": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
- "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/undici-types": {
- "version": "7.12.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.12.0.tgz",
- "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/union": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz",
- "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==",
- "dev": true,
- "dependencies": {
- "qs": "^6.4.0"
- },
- "engines": {
- "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/url-join": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
- "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
- "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.7",
- "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.7.tgz",
- "integrity": "sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "esbuild": "^0.25.0",
- "fdir": "^6.5.0",
- "picomatch": "^4.0.3",
- "postcss": "^8.5.6",
- "rollup": "^4.43.0",
- "tinyglobby": "^0.2.15"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^20.19.0 || >=22.12.0",
- "jiti": ">=1.21.0",
- "less": "^4.0.0",
- "lightningcss": "^1.21.0",
- "sass": "^1.70.0",
- "sass-embedded": "^1.70.0",
- "stylus": ">=0.54.8",
- "sugarss": "^5.0.0",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "jiti": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
- }
- },
- "node_modules/vite-node": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz",
- "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cac": "^6.7.14",
- "debug": "^4.4.1",
- "es-module-lexer": "^1.7.0",
- "pathe": "^2.0.3",
- "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
- },
- "bin": {
- "vite-node": "vite-node.mjs"
- },
- "engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/vitest": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz",
- "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/chai": "^5.2.2",
- "@vitest/expect": "3.2.4",
- "@vitest/mocker": "3.2.4",
- "@vitest/pretty-format": "^3.2.4",
- "@vitest/runner": "3.2.4",
- "@vitest/snapshot": "3.2.4",
- "@vitest/spy": "3.2.4",
- "@vitest/utils": "3.2.4",
- "chai": "^5.2.0",
- "debug": "^4.4.1",
- "expect-type": "^1.2.1",
- "magic-string": "^0.30.17",
- "pathe": "^2.0.3",
- "picomatch": "^4.0.2",
- "std-env": "^3.9.0",
- "tinybench": "^2.9.0",
- "tinyexec": "^0.3.2",
- "tinyglobby": "^0.2.14",
- "tinypool": "^1.1.1",
- "tinyrainbow": "^2.0.0",
- "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0",
- "vite-node": "3.2.4",
- "why-is-node-running": "^2.3.0"
- },
- "bin": {
- "vitest": "vitest.mjs"
- },
- "engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- },
- "peerDependencies": {
- "@edge-runtime/vm": "*",
- "@types/debug": "^4.1.12",
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "@vitest/browser": "3.2.4",
- "@vitest/ui": "3.2.4",
- "happy-dom": "*",
- "jsdom": "*"
- },
- "peerDependenciesMeta": {
- "@edge-runtime/vm": {
- "optional": true
- },
- "@types/debug": {
- "optional": true
- },
- "@types/node": {
- "optional": true
- },
- "@vitest/browser": {
- "optional": true
- },
- "@vitest/ui": {
- "optional": true
- },
- "happy-dom": {
- "optional": true
- },
- "jsdom": {
- "optional": true
- }
- }
- },
- "node_modules/wcwidth": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "defaults": "^1.0.3"
- }
- },
- "node_modules/whatwg-encoding": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
- "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "iconv-lite": "0.6.3"
- },
- "engines": {
- "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/why-is-node-running": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
- "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "siginfo": "^2.0.0",
- "stackback": "0.0.2"
- },
- "bin": {
- "why-is-node-running": "cli.js"
- },
- "engines": {
- "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/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",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yaml": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz",
- "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "yaml": "bin.mjs"
- },
- "engines": {
- "node": ">= 14.6"
- }
- },
- "node_modules/yargs": {
- "version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/zod": {
- "version": "3.25.76",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
- "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
}
}
}
diff --git a/package.json b/package.json
index 6c0a4c5e..5b58ef1d 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
- "name": "@agentclientprotocol/sdk",
- "version": "0.4.6",
+ "name": "@agentclientprotocol/schema",
+ "version": "0.0.0",
"publishConfig": {
"access": "public"
},
@@ -16,54 +16,22 @@
"license": "Apache-2.0",
"author": "Zed Industries",
"files": [
- "typescript",
- "dist",
"schema/schema.json",
"LICENSE-APACHE"
],
"type": "module",
- "main": "dist/acp.js",
- "types": "dist/acp.d.ts",
- "directories": {
- "example": "examples"
- },
"scripts": {
- "prepublishOnly": "cp typescript/README.md README.md",
- "postpublish": "git checkout README.md",
- "clean": "rm -rf dist tsconfig.tsbuildinfo && cargo clean",
- "test": "cargo check --all-targets && cargo test && vitest run",
- "test:ts": "vitest run",
- "test:ts:watch": "vitest",
"generate:json-schema": "cd rust && cargo run --bin generate --features unstable",
- "generate:ts-schema": "node typescript/generate.js",
"generate": "npm run generate:json-schema && npm run generate:ts-schema && npm run format",
- "build": "npm run generate && tsc",
"format": "prettier --write . && cargo fmt",
"format:check": "prettier --check . && cargo fmt -- --check",
- "lint": "cargo clippy",
- "lint:fix": "cargo clippy --fix",
"spellcheck": "./scripts/spellcheck.sh",
"spellcheck:fix": "./scripts/spellcheck.sh --write-changes",
- "check": "npm run lint && npm run format:check && npm run spellcheck && npm run build && npm run test && npm run docs:ts:verify",
- "docs": "cd docs && npx mint@4.2.93 dev",
- "docs:ts:build": "cd typescript && typedoc && echo 'TypeScript documentation generated in ./typescript/docs'",
- "docs:ts:dev": "concurrently \"cd typescript && typedoc --watch --preserveWatchOutput\" \"npx http-server typescript/docs -p 8081\"",
- "docs:ts:verify": "cd typescript && typedoc --emit none && echo 'TypeDoc verification passed'"
- },
- "dependencies": {
- "zod": "^3.0.0"
+ "check": "npm run lint && npm run format:check && npm run spellcheck && npm run build && npm run test",
+ "docs": "cd docs && npx mint@4.2.93 dev"
},
"devDependencies": {
- "@types/node": "^24.1.0",
- "concurrently": "^9.1.0",
- "http-server": "^14.1.1",
- "json-schema-to-typescript": "^15.0.4",
"prettier": "^3.3.3",
- "ts-to-zod": "^3.15.0",
- "tsx": "^4.20.5",
- "typedoc": "^0.28.11",
- "typedoc-github-theme": "^0.3.1",
- "typescript": "^5.8.3",
- "vitest": "^3.2.4"
+ "tsx": "^4.20.5"
}
}
diff --git a/tsconfig.json b/tsconfig.json
deleted file mode 100644
index 28f9c5ce..00000000
--- a/tsconfig.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "compilerOptions": {
- "strict": true,
- "esModuleInterop": true,
- "skipLibCheck": true,
- "resolveJsonModule": true,
- "forceConsistentCasingInFileNames": true,
- "sourceMap": true,
- "declaration": true,
- "allowSyntheticDefaultImports": true,
- "lib": ["ESNext", "DOM", "DOM.Iterable"],
- "module": "ESNext",
- "moduleResolution": "bundler",
- "target": "es2022",
- "types": ["node"],
- "rootDir": "typescript",
- "outDir": "dist",
- "paths": {}
- },
- "include": [
- "typescript/acp.ts",
- "typescript/connection.ts",
- "typescript/schemas.ts"
- ],
- "exclude": [
- "**/dist/**",
- "typescript/generate-schemas.ts",
- "typescript/example.ts",
- "tests/**"
- ]
-}
diff --git a/typescript/README.md b/typescript/README.md
deleted file mode 100644
index 1246258d..00000000
--- a/typescript/README.md
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-# ACP TypeScript Library
-
-The official TypeScript implementation of the Agent Client Protocol (ACP) — a standardized communication protocol between code editors and AI-powered coding agents.
-
-Learn more at https://agentclientprotocol.com
-
-## Installation
-
-```bash
-npm install @agentclientprotocol/sdk
-```
-
-## Get Started
-
-### Understand the Protocol
-
-Start by reading the [official ACP documentation](https://agentclientprotocol.com) to understand the core concepts and protocol specification.
-
-### Try the Examples
-
-The [examples directory](https://github.com/agentclientprotocol/agent-client-protocol/tree/main/typescript/examples) contains simple implementations of both Agents and Clients in TypeScript. These examples can be run from your terminal or from an ACP Client like [Zed](https://zed.dev), making them great starting points for your own integration!
-
-### Explore the API
-
-Browse the [TypeScript library reference](https://agentclientprotocol.github.io/agent-client-protocol) for detailed API documentation.
-
-If you're building an [Agent](https://agentclientprotocol.com/protocol/overview#agent), start with [AgentSideConnection](https://agentclientprotocol.github.io/agent-client-protocol/classes/AgentSideConnection.html).
-
-If you're building a [Client](https://agentclientprotocol.com/protocol/overview#client), start with [ClientSideConnection](https://agentclientprotocol.github.io/agent-client-protocol/classes/ClientSideConnection.html).
-
-### Study a Production Implementation
-
-For a complete, production-ready implementation, check out the [Gemini CLI Agent](https://github.com/google-gemini/gemini-cli/blob/main/packages/cli/src/zed-integration/zedIntegration.ts).
-
-## Resources
-
-- [Library docs](https://agentclientprotocol.github.io/agent-client-protocol)
-- [Examples](https://github.com/agentclientprotocol/agent-client-protocol/tree/main/typescript/examples)
-- [Protocol Documentation](https://agentclientprotocol.com)
-- [GitHub Repository](https://github.com/agentclientprotocol/agent-client-protocol)
-- [NPM Package](https://www.npmjs.com/package/@agentclientprotocol/sdk)
-
-## Contributing
-
-See the main [repository](https://github.com/agentclientprotocol/agent-client-protocol) for contribution guidelines.
diff --git a/typescript/acp.test.ts b/typescript/acp.test.ts
deleted file mode 100644
index 7dcea0be..00000000
--- a/typescript/acp.test.ts
+++ /dev/null
@@ -1,928 +0,0 @@
-import { describe, it, expect, beforeEach } from "vitest";
-import {
- Agent,
- ClientSideConnection,
- Client,
- AgentSideConnection,
- InitializeRequest,
- InitializeResponse,
- NewSessionRequest,
- NewSessionResponse,
- LoadSessionRequest,
- LoadSessionResponse,
- AuthenticateRequest,
- AuthenticateResponse,
- PromptRequest,
- PromptResponse,
- WriteTextFileRequest,
- WriteTextFileResponse,
- ReadTextFileRequest,
- ReadTextFileResponse,
- RequestPermissionRequest,
- RequestPermissionResponse,
- CancelNotification,
- SessionNotification,
- PROTOCOL_VERSION,
- ndJsonStream,
-} from "./acp.js";
-
-describe("Connection", () => {
- let clientToAgent: TransformStream;
- let agentToClient: TransformStream;
-
- beforeEach(() => {
- clientToAgent = new TransformStream();
- agentToClient = new TransformStream();
- });
-
- it("handles errors in bidirectional communication", async () => {
- // Create client that throws errors
- class TestClient implements Client {
- async writeTextFile(
- _: WriteTextFileRequest,
- ): Promise {
- throw new Error("Write failed");
- }
- async readTextFile(
- _: ReadTextFileRequest,
- ): Promise {
- throw new Error("Read failed");
- }
- async requestPermission(
- _: RequestPermissionRequest,
- ): Promise {
- throw new Error("Permission denied");
- }
- async sessionUpdate(_: SessionNotification): Promise {
- // no-op
- }
- }
-
- // Create agent that throws errors
- class TestAgent implements Agent {
- async initialize(_: InitializeRequest): Promise {
- throw new Error("Failed to initialize");
- }
- async newSession(_: NewSessionRequest): Promise {
- throw new Error("Failed to create session");
- }
- async loadSession(_: LoadSessionRequest): Promise {
- throw new Error("Failed to load session");
- }
- async authenticate(_: AuthenticateRequest): Promise {
- throw new Error("Authentication failed");
- }
- async prompt(_: PromptRequest): Promise {
- throw new Error("Prompt failed");
- }
- async cancel(_: CancelNotification): Promise {
- // no-op
- }
- }
-
- // Set up connections
- const agentConnection = new ClientSideConnection(
- () => new TestClient(),
- ndJsonStream(clientToAgent.writable, agentToClient.readable),
- );
-
- const clientConnection = new AgentSideConnection(
- () => new TestAgent(),
- ndJsonStream(agentToClient.writable, clientToAgent.readable),
- );
-
- // Test error handling in client->agent direction
- await expect(
- clientConnection.writeTextFile({
- path: "/test.txt",
- content: "test",
- sessionId: "test-session",
- }),
- ).rejects.toThrow();
-
- // Test error handling in agent->client direction
- await expect(
- agentConnection.newSession({
- cwd: "/test",
- mcpServers: [],
- }),
- ).rejects.toThrow();
- });
-
- it("handles concurrent requests", async () => {
- let requestCount = 0;
-
- // Create client
- class TestClient implements Client {
- async writeTextFile(
- _: WriteTextFileRequest,
- ): Promise {
- requestCount++;
- const currentCount = requestCount;
- await new Promise((resolve) => setTimeout(resolve, 40));
- console.log(`Write request ${currentCount} completed`);
- return {};
- }
- async readTextFile(
- params: ReadTextFileRequest,
- ): Promise {
- return { content: `Content of ${params.path}` };
- }
- async requestPermission(
- _: RequestPermissionRequest,
- ): Promise {
- return {
- outcome: {
- outcome: "selected",
- optionId: "allow",
- },
- };
- }
- async sessionUpdate(_: SessionNotification): Promise {
- // no-op
- }
- }
-
- // Create agent
- class TestAgent implements Agent {
- async initialize(_: InitializeRequest): Promise {
- return {
- protocolVersion: 1,
- agentCapabilities: { loadSession: false },
- authMethods: [],
- };
- }
-
- async newSession(_: NewSessionRequest): Promise {
- return {
- sessionId: "test-session",
- };
- }
- async loadSession(_: LoadSessionRequest): Promise {
- return {};
- }
- async authenticate(_: AuthenticateRequest): Promise {
- // no-op
- }
- async prompt(_: PromptRequest): Promise {
- return { stopReason: "end_turn" };
- }
- async cancel(_: CancelNotification): Promise {
- // no-op
- }
- }
-
- // Set up connections
- const agentConnection = new ClientSideConnection(
- () => new TestClient(),
- ndJsonStream(clientToAgent.writable, agentToClient.readable),
- );
-
- const clientConnection = new AgentSideConnection(
- () => new TestAgent(),
- ndJsonStream(agentToClient.writable, clientToAgent.readable),
- );
-
- // Send multiple concurrent requests
- const promises = [
- clientConnection.writeTextFile({
- path: "/file1.txt",
- content: "content1",
- sessionId: "session1",
- }),
- clientConnection.writeTextFile({
- path: "/file2.txt",
- content: "content2",
- sessionId: "session1",
- }),
- clientConnection.writeTextFile({
- path: "/file3.txt",
- content: "content3",
- sessionId: "session1",
- }),
- ];
-
- const results = await Promise.all(promises);
-
- // Verify all requests completed successfully
- expect(results).toHaveLength(3);
- expect(results[0]).toEqual({});
- expect(results[1]).toEqual({});
- expect(results[2]).toEqual({});
- expect(requestCount).toBe(3);
- });
-
- it("handles message ordering correctly", async () => {
- const messageLog: string[] = [];
-
- // Create client
- class TestClient implements Client {
- async writeTextFile(
- params: WriteTextFileRequest,
- ): Promise {
- messageLog.push(`writeTextFile called: ${params.path}`);
- return {};
- }
- async readTextFile(
- params: ReadTextFileRequest,
- ): Promise {
- messageLog.push(`readTextFile called: ${params.path}`);
- return { content: "test content" };
- }
- async requestPermission(
- params: RequestPermissionRequest,
- ): Promise {
- messageLog.push(`requestPermission called: ${params.toolCall.title}`);
- return {
- outcome: {
- outcome: "selected",
- optionId: "allow",
- },
- };
- }
- async sessionUpdate(params: SessionNotification): Promise {
- messageLog.push("sessionUpdate called");
- }
- }
-
- // Create agent
- class TestAgent implements Agent {
- async initialize(_: InitializeRequest): Promise {
- return {
- protocolVersion: 1,
- agentCapabilities: { loadSession: false },
- authMethods: [],
- };
- }
- async newSession(
- request: NewSessionRequest,
- ): Promise {
- messageLog.push(`newSession called: ${request.cwd}`);
- return {
- sessionId: "test-session",
- };
- }
- async loadSession(
- params: LoadSessionRequest,
- ): Promise {
- messageLog.push(`loadSession called: ${params.sessionId}`);
- return {};
- }
- async authenticate(params: AuthenticateRequest): Promise {
- messageLog.push(`authenticate called: ${params.methodId}`);
- }
- async prompt(params: PromptRequest): Promise {
- messageLog.push(`prompt called: ${params.sessionId}`);
- return { stopReason: "end_turn" };
- }
- async cancel(params: CancelNotification): Promise {
- messageLog.push(`cancelled called: ${params.sessionId}`);
- }
- }
-
- // Set up connections
- const agentConnection = new ClientSideConnection(
- () => new TestClient(),
- ndJsonStream(clientToAgent.writable, agentToClient.readable),
- );
-
- const clientConnection = new AgentSideConnection(
- () => new TestAgent(),
- ndJsonStream(agentToClient.writable, clientToAgent.readable),
- );
-
- // Send requests in specific order
- await agentConnection.newSession({
- cwd: "/test",
- mcpServers: [],
- });
- await clientConnection.writeTextFile({
- path: "/test.txt",
- content: "test",
- sessionId: "test-session",
- });
- await clientConnection.readTextFile({
- path: "/test.txt",
- sessionId: "test-session",
- });
- await clientConnection.requestPermission({
- sessionId: "test-session",
- toolCall: {
- title: "Execute command",
- kind: "execute",
- status: "pending",
- toolCallId: "tool-123",
- content: [
- {
- type: "content",
- content: {
- type: "text",
- text: "ls -la",
- },
- },
- ],
- },
- options: [
- {
- kind: "allow_once",
- name: "Allow",
- optionId: "allow",
- },
- {
- kind: "reject_once",
- name: "Reject",
- optionId: "reject",
- },
- ],
- });
-
- // Verify order
- expect(messageLog).toEqual([
- "newSession called: /test",
- "writeTextFile called: /test.txt",
- "readTextFile called: /test.txt",
- "requestPermission called: Execute command",
- ]);
- });
-
- it("handles notifications correctly", async () => {
- const notificationLog: string[] = [];
-
- // Create client
- class TestClient implements Client {
- async writeTextFile(
- _: WriteTextFileRequest,
- ): Promise {
- return {};
- }
- async readTextFile(
- _: ReadTextFileRequest,
- ): Promise {
- return { content: "test" };
- }
- async requestPermission(
- _: RequestPermissionRequest,
- ): Promise {
- return {
- outcome: {
- outcome: "selected",
- optionId: "allow",
- },
- };
- }
- async sessionUpdate(notification: SessionNotification): Promise {
- if (
- notification.update &&
- "sessionUpdate" in notification.update &&
- notification.update.sessionUpdate === "agent_message_chunk"
- ) {
- notificationLog.push(
- `agent message: ${(notification.update.content as any).text}`,
- );
- }
- }
- }
-
- // Create agent
- class TestAgent implements Agent {
- async initialize(_: InitializeRequest): Promise {
- return {
- protocolVersion: 1,
- agentCapabilities: { loadSession: false },
- authMethods: [],
- };
- }
- async newSession(_: NewSessionRequest): Promise {
- return {
- sessionId: "test-session",
- };
- }
- async loadSession(_: LoadSessionRequest): Promise {
- return {};
- }
- async authenticate(_: AuthenticateRequest): Promise {
- // no-op
- }
- async prompt(_: PromptRequest): Promise {
- return { stopReason: "end_turn" };
- }
- async cancel(params: CancelNotification): Promise {
- notificationLog.push(`cancelled: ${params.sessionId}`);
- }
- }
-
- // Create shared instances
- const testClient = () => new TestClient();
- const testAgent = () => new TestAgent();
-
- // Set up connections
- const agentConnection = new ClientSideConnection(
- testClient,
- ndJsonStream(clientToAgent.writable, agentToClient.readable),
- );
-
- const clientConnection = new AgentSideConnection(
- testAgent,
- ndJsonStream(agentToClient.writable, clientToAgent.readable),
- );
-
- // Send notifications
- await clientConnection.sessionUpdate({
- sessionId: "test-session",
- update: {
- sessionUpdate: "agent_message_chunk",
- content: {
- type: "text",
- text: "Hello from agent",
- },
- },
- });
-
- await agentConnection.cancel({
- sessionId: "test-session",
- });
-
- // Wait a bit for async handlers
- await new Promise((resolve) => setTimeout(resolve, 50));
-
- // Verify notifications were received
- expect(notificationLog).toContain("agent message: Hello from agent");
- expect(notificationLog).toContain("cancelled: test-session");
- });
-
- it("handles initialize method", async () => {
- // Create client
- class TestClient implements Client {
- async writeTextFile(
- _: WriteTextFileRequest,
- ): Promise {
- return {};
- }
- async readTextFile(
- _: ReadTextFileRequest,
- ): Promise {
- return { content: "test" };
- }
- async requestPermission(
- _: RequestPermissionRequest,
- ): Promise {
- return {
- outcome: {
- outcome: "selected",
- optionId: "allow",
- },
- };
- }
- async sessionUpdate(_: SessionNotification): Promise {
- // no-op
- }
- }
-
- // Create agent
- class TestAgent implements Agent {
- async initialize(params: InitializeRequest): Promise {
- return {
- protocolVersion: params.protocolVersion,
- agentCapabilities: { loadSession: true },
- authMethods: [
- {
- id: "oauth",
- name: "OAuth",
- description: "Authenticate with OAuth",
- },
- ],
- };
- }
- async newSession(_: NewSessionRequest): Promise {
- return { sessionId: "test-session" };
- }
- async loadSession(_: LoadSessionRequest): Promise {
- return {};
- }
- async authenticate(_: AuthenticateRequest): Promise {
- // no-op
- }
- async prompt(_: PromptRequest): Promise {
- return { stopReason: "end_turn" };
- }
- async cancel(_: CancelNotification): Promise {
- // no-op
- }
- }
-
- // Set up connections
- const agentConnection = new ClientSideConnection(
- () => new TestClient(),
- ndJsonStream(clientToAgent.writable, agentToClient.readable),
- );
-
- const clientConnection = new AgentSideConnection(
- () => new TestAgent(),
- ndJsonStream(agentToClient.writable, clientToAgent.readable),
- );
-
- // Test initialize request
- const response = await agentConnection.initialize({
- protocolVersion: PROTOCOL_VERSION,
- clientCapabilities: {
- fs: {
- readTextFile: false,
- writeTextFile: false,
- },
- },
- });
-
- expect(response.protocolVersion).toBe(PROTOCOL_VERSION);
- expect(response.agentCapabilities?.loadSession).toBe(true);
- expect(response.authMethods).toHaveLength(1);
- expect(response.authMethods?.[0].id).toBe("oauth");
- });
-
- it("handles extension methods and notifications", async () => {
- const extensionLog: string[] = [];
-
- // Create client with extension method support
- class TestClient implements Client {
- async writeTextFile(
- _: WriteTextFileRequest,
- ): Promise {
- return {};
- }
- async readTextFile(
- _: ReadTextFileRequest,
- ): Promise {
- return { content: "test" };
- }
- async requestPermission(
- _: RequestPermissionRequest,
- ): Promise {
- return {
- outcome: {
- outcome: "selected",
- optionId: "allow",
- },
- };
- }
- async sessionUpdate(_: SessionNotification): Promise {
- // no-op
- }
- async extMethod(
- method: string,
- params: Record,
- ): Promise> {
- if (method === "example.com/ping") {
- return { response: "pong", params };
- }
- throw new Error(`Unknown method: ${method}`);
- }
- async extNotification(
- method: string,
- params: Record,
- ): Promise {
- extensionLog.push(`client extNotification: ${method}`);
- }
- }
-
- // Create agent with extension method support
- class TestAgent implements Agent {
- async initialize(_: InitializeRequest): Promise {
- return {
- protocolVersion: PROTOCOL_VERSION,
- agentCapabilities: { loadSession: false },
- };
- }
- async newSession(_: NewSessionRequest): Promise {
- return { sessionId: "test-session" };
- }
- async authenticate(_: AuthenticateRequest): Promise {
- // no-op
- }
- async prompt(_: PromptRequest): Promise {
- return { stopReason: "end_turn" };
- }
- async cancel(_: CancelNotification): Promise {
- // no-op
- }
- async extMethod(
- method: string,
- params: Record,
- ): Promise> {
- if (method === "example.com/echo") {
- return { echo: params };
- }
- throw new Error(`Unknown method: ${method}`);
- }
- async extNotification(
- method: string,
- params: Record,
- ): Promise {
- extensionLog.push(`agent extNotification: ${method}`);
- }
- }
-
- // Set up connections
- const agentConnection = new ClientSideConnection(
- () => new TestClient(),
- ndJsonStream(clientToAgent.writable, agentToClient.readable),
- );
-
- const clientConnection = new AgentSideConnection(
- () => new TestAgent(),
- ndJsonStream(agentToClient.writable, clientToAgent.readable),
- );
-
- // Test agent calling client extension method
- const clientResponse = await clientConnection.extMethod(
- "example.com/ping",
- {
- data: "test",
- },
- );
- expect(clientResponse).toEqual({
- response: "pong",
- params: { data: "test" },
- });
-
- // Test client calling agent extension method
- const agentResponse = await agentConnection.extMethod("example.com/echo", {
- message: "hello",
- });
- expect(agentResponse).toEqual({ echo: { message: "hello" } });
-
- // Test extension notifications
- await clientConnection.extNotification("example.com/client/notify", {
- info: "client notification",
- });
- await agentConnection.extNotification("example.com/agent/notify", {
- info: "agent notification",
- });
-
- // Wait a bit for async handlers
- await new Promise((resolve) => setTimeout(resolve, 50));
-
- // Verify notifications were logged
- expect(extensionLog).toContain(
- "client extNotification: example.com/client/notify",
- );
- expect(extensionLog).toContain(
- "agent extNotification: example.com/agent/notify",
- );
- });
-
- it("handles optional extension methods correctly", async () => {
- // Create client WITHOUT extension methods
- class TestClientWithoutExtensions implements Client {
- async writeTextFile(
- _: WriteTextFileRequest,
- ): Promise {
- return {};
- }
- async readTextFile(
- _: ReadTextFileRequest,
- ): Promise {
- return { content: "test" };
- }
- async requestPermission(
- _: RequestPermissionRequest,
- ): Promise {
- return {
- outcome: {
- outcome: "selected",
- optionId: "allow",
- },
- };
- }
- async sessionUpdate(_: SessionNotification): Promise {
- // no-op
- }
- // Note: No extMethod or extNotification implemented
- }
-
- // Create agent WITHOUT extension methods
- class TestAgentWithoutExtensions implements Agent {
- async initialize(_: InitializeRequest): Promise {
- return {
- protocolVersion: PROTOCOL_VERSION,
- agentCapabilities: { loadSession: false },
- };
- }
- async newSession(_: NewSessionRequest): Promise {
- return { sessionId: "test-session" };
- }
- async authenticate(_: AuthenticateRequest): Promise {
- // no-op
- }
- async prompt(_: PromptRequest): Promise {
- return { stopReason: "end_turn" };
- }
- async cancel(_: CancelNotification): Promise {
- // no-op
- }
- // Note: No extMethod or extNotification implemented
- }
-
- // Set up connections
- const agentConnection = new ClientSideConnection(
- () => new TestClientWithoutExtensions(),
- ndJsonStream(clientToAgent.writable, agentToClient.readable),
- );
-
- const clientConnection = new AgentSideConnection(
- () => new TestAgentWithoutExtensions(),
- ndJsonStream(agentToClient.writable, clientToAgent.readable),
- );
-
- // Test that calling extension methods on connections without them throws method not found
- try {
- await clientConnection.extMethod("example.com/ping", { data: "test" });
- expect.fail("Should have thrown method not found error");
- } catch (error: any) {
- expect(error.code).toBe(-32601); // Method not found
- expect(error.data.method).toBe("_example.com/ping"); // Should show full method name with underscore
- }
-
- try {
- await agentConnection.extMethod("example.com/echo", { message: "hello" });
- expect.fail("Should have thrown method not found error");
- } catch (error: any) {
- expect(error.code).toBe(-32601); // Method not found
- expect(error.data.method).toBe("_example.com/echo"); // Should show full method name with underscore
- }
-
- // Notifications should be ignored when not implemented (no error thrown)
- await clientConnection.extNotification("example.com/notify", {
- info: "test",
- });
- await agentConnection.extNotification("example.com/notify", {
- info: "test",
- });
- });
-
- it("handles methods returning response objects with _meta or void", async () => {
- // Create client that returns both response objects and void
- class TestClient implements Client {
- async writeTextFile(
- params: WriteTextFileRequest,
- ): Promise {
- // Return response object with _meta
- return {
- _meta: {
- timestamp: new Date().toISOString(),
- version: "1.0.0",
- },
- };
- }
- async readTextFile(
- params: ReadTextFileRequest,
- ): Promise {
- return {
- content: "test content",
- _meta: {
- encoding: "utf-8",
- },
- };
- }
- async requestPermission(
- params: RequestPermissionRequest,
- ): Promise {
- return {
- outcome: {
- outcome: "selected",
- optionId: "allow",
- },
- _meta: {
- userId: "test-user",
- },
- };
- }
- async sessionUpdate(params: SessionNotification): Promise {
- // Returns void
- }
- }
-
- // Create agent that returns both response objects and void
- class TestAgent implements Agent {
- async initialize(params: InitializeRequest): Promise {
- return {
- protocolVersion: params.protocolVersion,
- agentCapabilities: { loadSession: true },
- _meta: {
- agentVersion: "2.0.0",
- },
- };
- }
- async newSession(params: NewSessionRequest): Promise {
- return {
- sessionId: "test-session",
- _meta: {
- sessionType: "ephemeral",
- },
- };
- }
- async loadSession(
- params: LoadSessionRequest,
- ): Promise {
- // Test returning minimal response
- return {};
- }
- async authenticate(
- params: AuthenticateRequest,
- ): Promise {
- if (params.methodId === "none") {
- // Test returning void
- return;
- }
- // Test returning response with _meta
- return {
- _meta: {
- authenticated: true,
- method: params.methodId,
- },
- };
- }
- async prompt(params: PromptRequest): Promise {
- return { stopReason: "end_turn" };
- }
- async cancel(params: CancelNotification): Promise {
- // Returns void
- }
- }
-
- // Set up connections
- const agentConnection = new ClientSideConnection(
- () => new TestClient(),
- ndJsonStream(clientToAgent.writable, agentToClient.readable),
- );
-
- const clientConnection = new AgentSideConnection(
- () => new TestAgent(),
- ndJsonStream(agentToClient.writable, clientToAgent.readable),
- );
-
- // Test writeTextFile returns response with _meta
- const writeResponse = await clientConnection.writeTextFile({
- path: "/test.txt",
- content: "test",
- sessionId: "test-session",
- });
- expect(writeResponse).toEqual({
- _meta: {
- timestamp: expect.any(String),
- version: "1.0.0",
- },
- });
-
- // Test readTextFile returns response with content and _meta
- const readResponse = await clientConnection.readTextFile({
- path: "/test.txt",
- sessionId: "test-session",
- });
- expect(readResponse.content).toBe("test content");
- expect(readResponse._meta).toEqual({
- encoding: "utf-8",
- });
-
- // Test initialize with _meta
- const initResponse = await agentConnection.initialize({
- protocolVersion: PROTOCOL_VERSION,
- clientCapabilities: {},
- });
- expect(initResponse._meta).toEqual({
- agentVersion: "2.0.0",
- });
-
- // Test authenticate returning void
- const authResponseVoid = await agentConnection.authenticate({
- methodId: "none",
- });
- expect(authResponseVoid).toEqual({});
-
- // Test authenticate returning response with _meta
- const authResponse = await agentConnection.authenticate({
- methodId: "oauth",
- });
- expect(authResponse).toEqual({
- _meta: {
- authenticated: true,
- method: "oauth",
- },
- });
-
- // Test newSession with _meta
- const sessionResponse = await agentConnection.newSession({
- cwd: "/test",
- mcpServers: [],
- });
- expect(sessionResponse._meta).toEqual({
- sessionType: "ephemeral",
- });
-
- // Test loadSession returning minimal response
- const loadResponse = await agentConnection.loadSession({
- sessionId: "test-session",
- mcpServers: [],
- cwd: "/test",
- });
- expect(loadResponse).toEqual({});
- });
-});
diff --git a/typescript/acp.ts b/typescript/acp.ts
deleted file mode 100644
index e6263e4d..00000000
--- a/typescript/acp.ts
+++ /dev/null
@@ -1,1295 +0,0 @@
-import { z } from "zod";
-import * as schema from "./schema.js";
-export * from "./schema.js";
-export * from "./stream.js";
-
-import type { Stream } from "./stream.js";
-import type {
- AnyMessage,
- AnyResponse,
- Result,
- ErrorResponse,
- PendingResponse,
- RequestHandler,
- NotificationHandler,
-} from "./jsonrpc.js";
-
-/**
- * An agent-side connection to a client.
- *
- * This class provides the agent's view of an ACP connection, allowing
- * agents to communicate with clients. It implements the {@link Client} interface
- * to provide methods for requesting permissions, accessing the file system,
- * and sending session updates.
- *
- * See protocol docs: [Agent](https://agentclientprotocol.com/protocol/overview#agent)
- */
-export class AgentSideConnection {
- #connection: Connection;
-
- /**
- * Creates a new agent-side connection to a client.
- *
- * This establishes the communication channel from the agent's perspective
- * following the ACP specification.
- *
- * @param toAgent - A function that creates an Agent handler to process incoming client requests
- * @param stream - The bidirectional message stream for communication. Typically created using
- * {@link ndJsonStream} for stdio-based connections.
- *
- * See protocol docs: [Communication Model](https://agentclientprotocol.com/protocol/overview#communication-model)
- */
- constructor(toAgent: (conn: AgentSideConnection) => Agent, stream: Stream) {
- const agent = toAgent(this);
-
- const requestHandler = async (
- method: string,
- params: unknown,
- ): Promise => {
- switch (method) {
- case schema.AGENT_METHODS.initialize: {
- const validatedParams = schema.initializeRequestSchema.parse(params);
- return agent.initialize(validatedParams);
- }
- case schema.AGENT_METHODS.session_new: {
- const validatedParams = schema.newSessionRequestSchema.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);
- 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 result = await agent.setSessionMode(validatedParams);
- return result ?? {};
- }
- case schema.AGENT_METHODS.authenticate: {
- const validatedParams =
- schema.authenticateRequestSchema.parse(params);
- const result = await agent.authenticate(validatedParams);
- return result ?? {};
- }
- case schema.AGENT_METHODS.session_prompt: {
- const validatedParams = schema.promptRequestSchema.parse(params);
- return agent.prompt(validatedParams);
- }
- case schema.AGENT_METHODS.session_set_model: {
- if (!agent.setSessionModel) {
- throw RequestError.methodNotFound(method);
- }
- const validatedParams =
- schema.setSessionModelRequestSchema.parse(params);
- return agent.setSessionModel(validatedParams);
- }
- default:
- if (method.startsWith("_")) {
- if (!agent.extMethod) {
- throw RequestError.methodNotFound(method);
- }
- return agent.extMethod(
- method.substring(1),
- params as Record,
- );
- }
- throw RequestError.methodNotFound(method);
- }
- };
-
- const notificationHandler = async (
- method: string,
- params: unknown,
- ): Promise => {
- switch (method) {
- case schema.AGENT_METHODS.session_cancel: {
- const validatedParams = schema.cancelNotificationSchema.parse(params);
- return agent.cancel(validatedParams);
- }
- default:
- if (method.startsWith("_")) {
- if (!agent.extNotification) {
- return;
- }
- return agent.extNotification(
- method.substring(1),
- params as Record,
- );
- }
- throw RequestError.methodNotFound(method);
- }
- };
-
- this.#connection = new Connection(
- requestHandler,
- notificationHandler,
- stream,
- );
- }
-
- /**
- * Handles session update notifications from the agent.
- *
- * This is a notification endpoint (no response expected) that sends
- * 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)
- */
- async sessionUpdate(params: schema.SessionNotification): Promise {
- return await this.#connection.sendNotification(
- schema.CLIENT_METHODS.session_update,
- params,
- );
- }
-
- /**
- * 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)
- */
- async requestPermission(
- params: schema.RequestPermissionRequest,
- ): Promise {
- return await this.#connection.sendRequest(
- schema.CLIENT_METHODS.session_request_permission,
- params,
- );
- }
-
- /**
- * 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)
- */
- async readTextFile(
- params: schema.ReadTextFileRequest,
- ): Promise {
- return await this.#connection.sendRequest(
- schema.CLIENT_METHODS.fs_read_text_file,
- params,
- );
- }
-
- /**
- * 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)
- */
- async writeTextFile(
- params: schema.WriteTextFileRequest,
- ): Promise {
- return (
- (await this.#connection.sendRequest(
- schema.CLIENT_METHODS.fs_write_text_file,
- params,
- )) ?? {}
- );
- }
-
- /**
- * Executes a command in a new terminal.
- *
- * Returns a `TerminalHandle` that can be used to get output, wait for exit,
- * kill the command, or release the terminal.
- *
- * The terminal can also be embedded in tool calls by using its ID in
- * `ToolCallContent` with type "terminal".
- *
- * @param params - The terminal creation parameters
- * @returns A handle to control and monitor the terminal
- */
- async createTerminal(
- params: schema.CreateTerminalRequest,
- ): Promise {
- const response = await this.#connection.sendRequest<
- schema.CreateTerminalRequest,
- schema.CreateTerminalResponse
- >(schema.CLIENT_METHODS.terminal_create, params);
-
- return new TerminalHandle(
- response.terminalId,
- params.sessionId,
- this.#connection,
- );
- }
-
- /**
- * Extension method
- *
- * Allows the Agent to send an arbitrary request that is not part of the ACP spec.
- */
- async extMethod(
- method: string,
- params: Record,
- ): Promise> {
- return await this.#connection.sendRequest(`_${method}`, params);
- }
-
- /**
- * Extension notification
- *
- * Allows the Agent to send an arbitrary notification that is not part of the ACP spec.
- */
- async extNotification(
- method: string,
- params: Record,
- ): Promise {
- return await this.#connection.sendNotification(`_${method}`, params);
- }
-}
-
-/**
- * Handle for controlling and monitoring a terminal created via `createTerminal`.
- *
- * Provides methods to:
- * - Get current output without waiting
- * - Wait for command completion
- * - Kill the running command
- * - Release terminal resources
- *
- * **Important:** Always call `release()` when done with the terminal to free resources.
-
- * The terminal supports async disposal via `Symbol.asyncDispose` for automatic cleanup.
-
- * You can use `await using` to ensure the terminal is automatically released when it
- * goes out of scope.
- */
-export class TerminalHandle {
- #sessionId: string;
- #connection: Connection;
-
- constructor(
- public id: string,
- sessionId: string,
- conn: Connection,
- ) {
- this.#sessionId = sessionId;
- this.#connection = conn;
- }
-
- /**
- * Gets the current terminal output without waiting for the command to exit.
- */
- async currentOutput(): Promise {
- return await this.#connection.sendRequest(
- schema.CLIENT_METHODS.terminal_output,
- {
- sessionId: this.#sessionId,
- terminalId: this.id,
- },
- );
- }
-
- /**
- * Waits for the terminal command to complete and returns its exit status.
- */
- async waitForExit(): Promise {
- return await this.#connection.sendRequest(
- schema.CLIENT_METHODS.terminal_wait_for_exit,
- {
- sessionId: this.#sessionId,
- terminalId: this.id,
- },
- );
- }
-
- /**
- * Kills the terminal command without releasing the terminal.
- *
- * The terminal remains valid after killing, allowing you to:
- * - Get the final output with `currentOutput()`
- * - Check the exit status
- * - Release the terminal when done
- *
- * Useful for implementing timeouts or cancellation.
- */
- async kill(): Promise {
- return (
- (await this.#connection.sendRequest(schema.CLIENT_METHODS.terminal_kill, {
- sessionId: this.#sessionId,
- terminalId: this.id,
- })) ?? {}
- );
- }
-
- /**
- * Releases the terminal and frees all associated resources.
- *
- * If the command is still running, it will be killed.
- * After release, the terminal ID becomes invalid and cannot be used
- * with other terminal methods.
- *
- * Tool calls that already reference this terminal will continue to
- * display its output.
- *
- * **Important:** Always call this method when done with the terminal.
- */
- async release(): Promise {
- return (
- (await this.#connection.sendRequest(
- schema.CLIENT_METHODS.terminal_release,
- {
- sessionId: this.#sessionId,
- terminalId: this.id,
- },
- )) ?? {}
- );
- }
-
- async [Symbol.asyncDispose](): Promise {
- await this.release();
- }
-}
-
-/**
- * A client-side connection to an agent.
- *
- * This class provides the client's view of an ACP connection, allowing
- * clients (such as code editors) to communicate with agents. It implements
- * the {@link Agent} interface to provide methods for initializing sessions, sending
- * prompts, and managing the agent lifecycle.
- *
- * See protocol docs: [Client](https://agentclientprotocol.com/protocol/overview#client)
- */
-export class ClientSideConnection implements Agent {
- #connection: Connection;
-
- /**
- * Creates a new client-side connection to an agent.
- *
- * This establishes the communication channel between a client and agent
- * following the ACP specification.
- *
- * @param toClient - A function that creates a Client handler to process incoming agent requests
- * @param stream - The bidirectional message stream for communication. Typically created using
- * {@link ndJsonStream} for stdio-based connections.
- *
- * See protocol docs: [Communication Model](https://agentclientprotocol.com/protocol/overview#communication-model)
- */
- constructor(toClient: (agent: Agent) => Client, stream: Stream) {
- const client = toClient(this);
-
- const requestHandler = async (
- method: string,
- params: unknown,
- ): Promise => {
- switch (method) {
- case schema.CLIENT_METHODS.fs_write_text_file: {
- const validatedParams =
- schema.writeTextFileRequestSchema.parse(params);
- return client.writeTextFile?.(validatedParams);
- }
- case schema.CLIENT_METHODS.fs_read_text_file: {
- const validatedParams =
- schema.readTextFileRequestSchema.parse(params);
- return client.readTextFile?.(validatedParams);
- }
- case schema.CLIENT_METHODS.session_request_permission: {
- const validatedParams =
- schema.requestPermissionRequestSchema.parse(params);
- return client.requestPermission(validatedParams);
- }
- case schema.CLIENT_METHODS.terminal_create: {
- const validatedParams =
- schema.createTerminalRequestSchema.parse(params);
- return client.createTerminal?.(validatedParams);
- }
- case schema.CLIENT_METHODS.terminal_output: {
- const validatedParams =
- schema.terminalOutputRequestSchema.parse(params);
- return client.terminalOutput?.(validatedParams);
- }
- case schema.CLIENT_METHODS.terminal_release: {
- const validatedParams =
- schema.releaseTerminalRequestSchema.parse(params);
- const result = await client.releaseTerminal?.(validatedParams);
- return result ?? {};
- }
- case schema.CLIENT_METHODS.terminal_wait_for_exit: {
- const validatedParams =
- schema.waitForTerminalExitRequestSchema.parse(params);
- return client.waitForTerminalExit?.(validatedParams);
- }
- case schema.CLIENT_METHODS.terminal_kill: {
- const validatedParams =
- schema.killTerminalCommandRequestSchema.parse(params);
- const result = await client.killTerminal?.(validatedParams);
- return result ?? {};
- }
- default:
- // Handle extension methods (any method starting with '_')
- if (method.startsWith("_")) {
- const customMethod = method.substring(1);
- if (!client.extMethod) {
- throw RequestError.methodNotFound(method);
- }
- return client.extMethod(
- customMethod,
- params as Record,
- );
- }
- throw RequestError.methodNotFound(method);
- }
- };
-
- const notificationHandler = async (
- method: string,
- params: unknown,
- ): Promise => {
- switch (method) {
- case schema.CLIENT_METHODS.session_update: {
- const validatedParams =
- schema.sessionNotificationSchema.parse(params);
- return client.sessionUpdate(validatedParams);
- }
- default:
- // Handle extension notifications (any method starting with '_')
- if (method.startsWith("_")) {
- const customMethod = method.substring(1);
- if (!client.extNotification) {
- return;
- }
- return client.extNotification(
- customMethod,
- params as Record,
- );
- }
- throw RequestError.methodNotFound(method);
- }
- };
-
- this.#connection = new Connection(
- requestHandler,
- notificationHandler,
- stream,
- );
- }
-
- /**
- * 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)
- */
- async initialize(
- params: schema.InitializeRequest,
- ): Promise {
- return await this.#connection.sendRequest(
- schema.AGENT_METHODS.initialize,
- params,
- );
- }
-
- /**
- * 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)
- */
- async newSession(
- params: schema.NewSessionRequest,
- ): Promise {
- return await this.#connection.sendRequest(
- schema.AGENT_METHODS.session_new,
- params,
- );
- }
-
- /**
- * 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)
- */
- async loadSession(
- params: schema.LoadSessionRequest,
- ): Promise {
- return (
- (await this.#connection.sendRequest(
- schema.AGENT_METHODS.session_load,
- params,
- )) ?? {}
- );
- }
-
- /**
- * Sets the operational 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 turn.
- *
- * See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)
- */
- async setSessionMode(
- params: schema.SetSessionModeRequest,
- ): Promise {
- return (
- (await this.#connection.sendRequest(
- schema.AGENT_METHODS.session_set_mode,
- params,
- )) ?? {}
- );
- }
-
- /**
- * **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.
- */
- async setSessionModel(
- params: schema.SetSessionModelRequest,
- ): Promise {
- return (
- (await this.#connection.sendRequest(
- schema.AGENT_METHODS.session_set_mode,
- params,
- )) ?? {}
- );
- }
-
- /**
- * 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
- * `newSession` without receiving an `auth_required` error.
- *
- * See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)
- */
- async authenticate(
- params: schema.AuthenticateRequest,
- ): Promise {
- return (
- (await this.#connection.sendRequest(
- schema.AGENT_METHODS.authenticate,
- params,
- )) ?? {}
- );
- }
-
- /**
- * 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)
- */
- async prompt(params: schema.PromptRequest): Promise {
- return await this.#connection.sendRequest(
- schema.AGENT_METHODS.session_prompt,
- params,
- );
- }
-
- /**
- * 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)
- */
- async cancel(params: schema.CancelNotification): Promise {
- return await this.#connection.sendNotification(
- schema.AGENT_METHODS.session_cancel,
- params,
- );
- }
-
- /**
- * Extension method
- *
- * Allows the Client to send an arbitrary request that is not part of the ACP spec.
- */
- async extMethod(
- method: string,
- params: Record,
- ): Promise> {
- return await this.#connection.sendRequest(`_${method}`, params);
- }
-
- /**
- * Extension notification
- *
- * Allows the Client to send an arbitrary notification that is not part of the ACP spec.
- */
- async extNotification(
- method: string,
- params: Record,
- ): Promise {
- return await this.#connection.sendNotification(`_${method}`, params);
- }
-}
-
-export type { AnyMessage } from "./jsonrpc.js";
-
-class Connection {
- #pendingResponses: Map = new Map();
- #nextRequestId: number = 0;
- #requestHandler: RequestHandler;
- #notificationHandler: NotificationHandler;
- #stream: Stream;
- #writeQueue: Promise = Promise.resolve();
-
- constructor(
- requestHandler: RequestHandler,
- notificationHandler: NotificationHandler,
- stream: Stream,
- ) {
- this.#requestHandler = requestHandler;
- this.#notificationHandler = notificationHandler;
- this.#stream = stream;
- this.#receive();
- }
-
- async #receive() {
- const reader = this.#stream.readable.getReader();
- try {
- while (true) {
- const { value: message, done } = await reader.read();
- if (done) {
- break;
- }
- if (!message) {
- continue;
- }
-
- try {
- this.#processMessage(message);
- } catch (err) {
- console.error(
- "Unexpected error during message processing:",
- message,
- err,
- );
- // Only send error response if the message had an id (was a request)
- if ("id" in message && message.id !== undefined) {
- this.#sendMessage({
- jsonrpc: "2.0",
- id: message.id,
- error: {
- code: -32700,
- message: "Parse error",
- },
- });
- }
- }
- }
- } finally {
- reader.releaseLock();
- }
- }
-
- async #processMessage(message: AnyMessage) {
- if ("method" in message && "id" in message) {
- // It's a request
- const response = await this.#tryCallRequestHandler(
- message.method,
- message.params,
- );
- if ("error" in response) {
- console.error("Error handling request", message, response.error);
- }
-
- await this.#sendMessage({
- jsonrpc: "2.0",
- id: message.id,
- ...response,
- });
- } else if ("method" in message) {
- // It's a notification
- const response = await this.#tryCallNotificationHandler(
- message.method,
- message.params,
- );
- if ("error" in response) {
- console.error("Error handling notification", message, response.error);
- }
- } else if ("id" in message) {
- // It's a response
- this.#handleResponse(message);
- } else {
- console.error("Invalid message", { message });
- }
- }
-
- async #tryCallRequestHandler(
- method: string,
- params: unknown,
- ): Promise> {
- try {
- const result = await this.#requestHandler(method, params);
- return { result: result ?? null };
- } catch (error: unknown) {
- if (error instanceof RequestError) {
- return error.toResult();
- }
-
- if (error instanceof z.ZodError) {
- return RequestError.invalidParams(error.format()).toResult();
- }
-
- let details;
-
- if (error instanceof Error) {
- details = error.message;
- } else if (
- typeof error === "object" &&
- error != null &&
- "message" in error &&
- typeof error.message === "string"
- ) {
- details = error.message;
- }
-
- try {
- return RequestError.internalError(
- details ? JSON.parse(details) : {},
- ).toResult();
- } catch (_err) {
- return RequestError.internalError({ details }).toResult();
- }
- }
- }
-
- async #tryCallNotificationHandler(
- method: string,
- params: unknown,
- ): Promise> {
- try {
- await this.#notificationHandler(method, params);
- return { result: null };
- } catch (error: unknown) {
- if (error instanceof RequestError) {
- return error.toResult();
- }
-
- if (error instanceof z.ZodError) {
- return RequestError.invalidParams(error.format()).toResult();
- }
-
- let details;
-
- if (error instanceof Error) {
- details = error.message;
- } else if (
- typeof error === "object" &&
- error != null &&
- "message" in error &&
- typeof error.message === "string"
- ) {
- details = error.message;
- }
-
- try {
- return RequestError.internalError(
- details ? JSON.parse(details) : {},
- ).toResult();
- } catch (_err) {
- return RequestError.internalError({ details }).toResult();
- }
- }
- }
-
- #handleResponse(response: AnyResponse) {
- const pendingResponse = this.#pendingResponses.get(response.id);
- if (pendingResponse) {
- if ("result" in response) {
- pendingResponse.resolve(response.result);
- } else if ("error" in response) {
- pendingResponse.reject(response.error);
- }
- this.#pendingResponses.delete(response.id);
- } else {
- console.error("Got response to unknown request", response.id);
- }
- }
-
- async sendRequest(method: string, params?: Req): Promise {
- const id = this.#nextRequestId++;
- const responsePromise = new Promise((resolve, reject) => {
- this.#pendingResponses.set(id, { resolve, reject });
- });
- await this.#sendMessage({ jsonrpc: "2.0", id, method, params });
- return responsePromise as Promise;
- }
-
- async sendNotification(method: string, params?: N): Promise {
- await this.#sendMessage({ jsonrpc: "2.0", method, params });
- }
-
- async #sendMessage(message: AnyMessage) {
- this.#writeQueue = this.#writeQueue
- .then(async () => {
- const writer = this.#stream.writable.getWriter();
- try {
- await writer.write(message);
- } finally {
- writer.releaseLock();
- }
- })
- .catch((error) => {
- // Continue processing writes on error
- console.error("ACP write error:", error);
- });
- return this.#writeQueue;
- }
-}
-
-/**
- * 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 class RequestError extends Error {
- data?: unknown;
-
- constructor(
- public code: number,
- message: string,
- data?: unknown,
- ) {
- super(message);
- this.name = "RequestError";
- this.data = data;
- }
-
- /**
- * Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text.
- */
- static parseError(data?: object): RequestError {
- return new RequestError(-32700, "Parse error", data);
- }
-
- /**
- * The JSON sent is not a valid Request object.
- */
- static invalidRequest(data?: object): RequestError {
- return new RequestError(-32600, "Invalid request", data);
- }
-
- /**
- * The method does not exist / is not available.
- */
- static methodNotFound(method: string): RequestError {
- return new RequestError(-32601, "Method not found", { method });
- }
-
- /**
- * Invalid method parameter(s).
- */
- static invalidParams(data?: object): RequestError {
- return new RequestError(-32602, "Invalid params", data);
- }
-
- /**
- * Internal JSON-RPC error.
- */
- static internalError(data?: object): RequestError {
- return new RequestError(-32603, "Internal error", data);
- }
-
- /**
- * Authentication required.
- */
- static authRequired(data?: object): RequestError {
- return new RequestError(-32000, "Authentication required", data);
- }
-
- /**
- * Resource, such as a file, was not found
- */
- static resourceNotFound(uri?: string): RequestError {
- return new RequestError(-32002, "Resource not found", uri && { uri });
- }
-
- toResult(): Result {
- return {
- error: {
- code: this.code,
- message: this.message,
- data: this.data,
- },
- };
- }
-
- toErrorResponse(): ErrorResponse {
- return {
- code: this.code,
- message: this.message,
- data: this.data,
- };
- }
-}
-
-/**
- * The Client interface defines the interface that ACP-compliant clients must implement.
- *
- * Clients are typically code editors (IDEs, text editors) that provide the interface
- * between users and AI agents. They manage the environment, handle user interactions,
- * and control access to resources.
- */
-export interface Client {
- /**
- * 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)
- */
- requestPermission(
- params: schema.RequestPermissionRequest,
- ): Promise;
- /**
- * 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)
- */
- sessionUpdate(params: schema.SessionNotification): Promise;
- /**
- * 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)
- */
- writeTextFile?(
- params: schema.WriteTextFileRequest,
- ): Promise;
- /**
- * 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)
- */
- readTextFile?(
- params: schema.ReadTextFileRequest,
- ): Promise;
-
- /**
- * Creates a new terminal to execute a command.
- *
- * Only available if the `terminal` capability is set to `true`.
- *
- * The Agent must call `releaseTerminal` when done with the terminal
- * to free resources.
-
- * @see {@link https://agentclientprotocol.com/protocol/terminals | Terminal Documentation}
- */
- createTerminal?(
- params: schema.CreateTerminalRequest,
- ): Promise;
-
- /**
- * Gets the current output and exit status of a terminal.
- *
- * Returns immediately without waiting for the command to complete.
- * If the command has already exited, the exit status is included.
- *
- * @see {@link https://agentclientprotocol.com/protocol/terminals#getting-output | Getting Terminal Output}
- */
- terminalOutput?(
- params: schema.TerminalOutputRequest,
- ): Promise;
-
- /**
- * Releases a terminal and frees all associated resources.
- *
- * The command is killed if it hasn't exited yet. After release,
- * the terminal ID becomes invalid for all other terminal methods.
- *
- * Tool calls that already contain the terminal ID continue to
- * display its output.
- *
- * @see {@link https://agentclientprotocol.com/protocol/terminals#releasing-terminals | Releasing Terminals}
- */
- releaseTerminal?(
- params: schema.ReleaseTerminalRequest,
- ): Promise;
-
- /**
- * Waits for a terminal command to exit and returns its exit status.
- *
- * This method returns once the command completes, providing the
- * exit code and/or signal that terminated the process.
- *
- * @see {@link https://agentclientprotocol.com/protocol/terminals#waiting-for-exit | Waiting for Exit}
- */
- waitForTerminalExit?(
- params: schema.WaitForTerminalExitRequest,
- ): Promise;
-
- /**
- * Kills a terminal command without releasing the terminal.
- *
- * While `releaseTerminal` also kills the command, this method keeps
- * the terminal ID valid so it can be used with other methods.
- *
- * Useful for implementing command timeouts that terminate the command
- * and then retrieve the final output.
- *
- * Note: Call `releaseTerminal` when the terminal is no longer needed.
- *
- * @see {@link https://agentclientprotocol.com/protocol/terminals#killing-commands | Killing Commands}
- */
- killTerminal?(
- params: schema.KillTerminalCommandRequest,
- ): Promise;
-
- /**
- * Extension method
- *
- * Allows the Agent to send an arbitrary request that is not part of the ACP spec.
- *
- * To help avoid conflicts, it's a good practice to prefix extension
- * methods with a unique identifier such as domain name.
- */
- extMethod?(
- method: string,
- params: Record,
- ): Promise>;
-
- /**
- * Extension notification
- *
- * Allows the Agent to send an arbitrary notification that is not part of the ACP spec.
- */
- extNotification?(
- method: string,
- params: Record,
- ): Promise;
-}
-
-/**
- * The Agent interface defines the interface that all ACP-compliant agents must implement.
- *
- * Agents are programs that use generative AI to autonomously modify code. They handle
- * requests from clients and execute tasks using language models and tools.
- */
-export interface Agent {
- /**
- * 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)
- */
- initialize(
- params: schema.InitializeRequest,
- ): Promise;
- /**
- * 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)
- */
- newSession(
- params: schema.NewSessionRequest,
- ): Promise;
- /**
- * 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)
- */
- loadSession?(
- params: schema.LoadSessionRequest,
- ): Promise;
- /**
- * Sets the operational 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 turn.
- *
- * See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)
- */
- setSessionMode?(
- params: schema.SetSessionModeRequest,
- ): Promise;
- /**
- * **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.
- */
- setSessionModel?(
- params: schema.SetSessionModelRequest,
- ): Promise;
- /**
- * 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
- * `newSession` without receiving an `auth_required` error.
- *
- * See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)
- */
- authenticate(
- params: schema.AuthenticateRequest,
- ): Promise;
- /**
- * 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)
- */
- prompt(params: schema.PromptRequest): Promise;
- /**
- * 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)
- */
- cancel(params: schema.CancelNotification): Promise;
-
- /**
- * Extension method
- *
- * Allows the Client to send an arbitrary request that is not part of the ACP spec.
- *
- * To help avoid conflicts, it's a good practice to prefix extension
- * methods with a unique identifier such as domain name.
- */
- extMethod?(
- method: string,
- params: Record,
- ): Promise>;
-
- /**
- * Extension notification
- *
- * Allows the Client to send an arbitrary notification that is not part of the ACP spec.
- */
- extNotification?(
- method: string,
- params: Record,
- ): Promise;
-}
diff --git a/typescript/examples/README.md b/typescript/examples/README.md
deleted file mode 100644
index 8edf47a2..00000000
--- a/typescript/examples/README.md
+++ /dev/null
@@ -1,77 +0,0 @@
-# ACP TypeScript Examples
-
-This directory contains examples using the [ACP](https://agentclientprotocol.com) library for TypeScript:
-
-- [`agent.ts`](./agent.ts) - A minimal agent implementation that simulates LLM interaction
-- [`client.ts`](./client.ts) - A minimal client implementation that spawns the [`agent.ts`](./agent.ts) as a subprocess
-
-## Running the Agent
-
-### In Zed
-
-While minimal, [`agent.ts`](./agent.ts) implements a compliant [ACP](https://agentclientprotocol.com) Agent. This means we can connect to it from an ACP client like [Zed](https://zed.dev)!
-
-1. Clone this repo
-
-```sh
-$ git clone https://github.com/agentclientprotocol/agent-client-protocol.git
-```
-
-2. Add the following at the root of your [Zed](https://zed.dev) settings:
-
-```json
- "agent_servers": {
- "Example Agent": {
- "command": "npx",
- "args": [
- "tsx",
- "/path/to/agent-client-protocol/typescript/examples/agent.ts"
- ]
- }
-```
-
-❕ Make sure to replace `/path/to/agent-client-protocol` with the path to your clone of this repository.
-
-Note: This configuration assumes you have [npx](https://docs.npmjs.com/cli/v8/commands/npx) in your `PATH`.
-
-3. Run the `acp: open acp logs` action from the command palette (⌘⇧P on macOS, ctrl-shift-p on Windows/Linux) to see the messages exchanged between the example agent and Zed.
-
-4. Then open the Agent Panel, and click "New Example Agent Thread" from the `+` menu on the top-right.
-
-
-
-5. Finally, send a message and see the Agent respond!
-
-
-
-### By itself
-
-You can also run the Agent directly and send messages to it:
-
-```bash
-npx tsx typescript/examples/agent.ts
-```
-
-Paste this into your terminal and press enter:
-
-```json
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":1}}
-```
-
-You should see it respond with something like:
-
-```json
-{"jsonrpc":"2.0","id":0,"result":{"protocolVersion":1,"agentCapabilities":{"loadSession":false}}}
-```
-
-From there, you can try making a [new session](https://agentclientprotocol.com/protocol/session-setup#creating-a-session) and [sending a prompt](https://agentclientprotocol.com/protocol/prompt-turn#1-user-message).
-
-## Running the Client
-
-Run the client example from the root directory:
-
-```bash
-npx tsx typescript/examples/client.ts
-```
-
-This client will spawn the example agent as a subprocess, send a message, and print the content it receives from it.
diff --git a/typescript/examples/agent.ts b/typescript/examples/agent.ts
deleted file mode 100644
index e3d0fcd1..00000000
--- a/typescript/examples/agent.ts
+++ /dev/null
@@ -1,274 +0,0 @@
-#!/usr/bin/env node
-
-import * as acp from "../acp.js";
-import { Readable, Writable } from "node:stream";
-
-interface AgentSession {
- pendingPrompt: AbortController | null;
-}
-
-class ExampleAgent implements acp.Agent {
- private connection: acp.AgentSideConnection;
- private sessions: Map;
-
- constructor(connection: acp.AgentSideConnection) {
- this.connection = connection;
- this.sessions = new Map();
- }
-
- async initialize(
- params: acp.InitializeRequest,
- ): Promise {
- return {
- protocolVersion: acp.PROTOCOL_VERSION,
- agentCapabilities: {
- loadSession: false,
- },
- };
- }
-
- async newSession(
- params: acp.NewSessionRequest,
- ): Promise {
- const sessionId = Math.random().toString(36).substring(2);
-
- this.sessions.set(sessionId, {
- pendingPrompt: null,
- });
-
- return {
- sessionId,
- };
- }
-
- async authenticate(
- params: acp.AuthenticateRequest,
- ): Promise {
- // No auth needed - return empty response
- return {};
- }
-
- async setSessionMode(
- params: acp.SetSessionModeRequest,
- ): Promise {
- // Session mode changes not implemented in this example
- return {};
- }
-
- async prompt(params: acp.PromptRequest): Promise {
- const session = this.sessions.get(params.sessionId);
-
- if (!session) {
- throw new Error(`Session ${params.sessionId} not found`);
- }
-
- session.pendingPrompt?.abort();
- session.pendingPrompt = new AbortController();
-
- try {
- await this.simulateTurn(params.sessionId, session.pendingPrompt.signal);
- } catch (err) {
- if (session.pendingPrompt.signal.aborted) {
- return { stopReason: "cancelled" };
- }
-
- throw err;
- }
-
- session.pendingPrompt = null;
-
- return {
- stopReason: "end_turn",
- };
- }
-
- private async simulateTurn(
- sessionId: string,
- abortSignal: AbortSignal,
- ): Promise {
- // Send initial text chunk
- await this.connection.sessionUpdate({
- sessionId,
- update: {
- sessionUpdate: "agent_message_chunk",
- content: {
- type: "text",
- text: "I'll help you with that. Let me start by reading some files to understand the current situation.",
- },
- },
- });
-
- await this.simulateModelInteraction(abortSignal);
-
- // Send a tool call that doesn't need permission
- await this.connection.sessionUpdate({
- sessionId,
- update: {
- sessionUpdate: "tool_call",
- toolCallId: "call_1",
- title: "Reading project files",
- kind: "read",
- status: "pending",
- locations: [{ path: "/project/README.md" }],
- rawInput: { path: "/project/README.md" },
- },
- });
-
- await this.simulateModelInteraction(abortSignal);
-
- // Update tool call to completed
- await this.connection.sessionUpdate({
- sessionId,
- update: {
- sessionUpdate: "tool_call_update",
- toolCallId: "call_1",
- status: "completed",
- content: [
- {
- type: "content",
- content: {
- type: "text",
- text: "# My Project\n\nThis is a sample project...",
- },
- },
- ],
- rawOutput: { content: "# My Project\n\nThis is a sample project..." },
- },
- });
-
- await this.simulateModelInteraction(abortSignal);
-
- // Send more text
- await this.connection.sessionUpdate({
- sessionId,
- update: {
- sessionUpdate: "agent_message_chunk",
- content: {
- type: "text",
- text: " Now I understand the project structure. I need to make some changes to improve it.",
- },
- },
- });
-
- await this.simulateModelInteraction(abortSignal);
-
- // Send a tool call that DOES need permission
- await this.connection.sessionUpdate({
- sessionId,
- update: {
- sessionUpdate: "tool_call",
- toolCallId: "call_2",
- title: "Modifying critical configuration file",
- kind: "edit",
- status: "pending",
- locations: [{ path: "/project/config.json" }],
- rawInput: {
- path: "/project/config.json",
- content: '{"database": {"host": "new-host"}}',
- },
- },
- });
-
- // Request permission for the sensitive operation
- const permissionResponse = await this.connection.requestPermission({
- sessionId,
- toolCall: {
- toolCallId: "call_2",
- title: "Modifying critical configuration file",
- kind: "edit",
- status: "pending",
- locations: [{ path: "/home/user/project/config.json" }],
- rawInput: {
- path: "/home/user/project/config.json",
- content: '{"database": {"host": "new-host"}}',
- },
- },
- options: [
- {
- kind: "allow_once",
- name: "Allow this change",
- optionId: "allow",
- },
- {
- kind: "reject_once",
- name: "Skip this change",
- optionId: "reject",
- },
- ],
- });
-
- if (permissionResponse.outcome.outcome === "cancelled") {
- return;
- }
-
- switch (permissionResponse.outcome.optionId) {
- case "allow": {
- await this.connection.sessionUpdate({
- sessionId,
- update: {
- sessionUpdate: "tool_call_update",
- toolCallId: "call_2",
- status: "completed",
- rawOutput: { success: true, message: "Configuration updated" },
- },
- });
-
- await this.simulateModelInteraction(abortSignal);
-
- await this.connection.sessionUpdate({
- sessionId,
- update: {
- sessionUpdate: "agent_message_chunk",
- content: {
- type: "text",
- text: " Perfect! I've successfully updated the configuration. The changes have been applied.",
- },
- },
- });
- break;
- }
- case "reject": {
- await this.simulateModelInteraction(abortSignal);
-
- await this.connection.sessionUpdate({
- sessionId,
- update: {
- sessionUpdate: "agent_message_chunk",
- content: {
- type: "text",
- text: " I understand you prefer not to make that change. I'll skip the configuration update.",
- },
- },
- });
- break;
- }
- default:
- throw new Error(
- `Unexpected permission outcome ${permissionResponse.outcome}`,
- );
- }
- }
-
- private simulateModelInteraction(abortSignal: AbortSignal): Promise {
- return new Promise((resolve, reject) =>
- setTimeout(() => {
- // In a real agent, you'd pass this abort signal to the LLM client
- if (abortSignal.aborted) {
- reject();
- } else {
- resolve();
- }
- }, 1000),
- );
- }
-
- async cancel(params: acp.CancelNotification): Promise {
- this.sessions.get(params.sessionId)?.pendingPrompt?.abort();
- }
-}
-
-const input = Writable.toWeb(process.stdout);
-const output = Readable.toWeb(process.stdin) as ReadableStream;
-
-const stream = acp.ndJsonStream(input, output);
-new acp.AgentSideConnection((conn) => new ExampleAgent(conn), stream);
diff --git a/typescript/examples/client.ts b/typescript/examples/client.ts
deleted file mode 100644
index 68bc9daf..00000000
--- a/typescript/examples/client.ts
+++ /dev/null
@@ -1,165 +0,0 @@
-#!/usr/bin/env node
-
-import { spawn } from "node:child_process";
-import { fileURLToPath } from "node:url";
-import { dirname, join } from "node:path";
-import { Writable, Readable } from "node:stream";
-import readline from "node:readline/promises";
-
-import * as acp from "../acp.js";
-
-class ExampleClient implements acp.Client {
- async requestPermission(
- params: acp.RequestPermissionRequest,
- ): Promise {
- console.log(`\n🔐 Permission requested: ${params.toolCall.title}`);
-
- console.log(`\nOptions:`);
- params.options.forEach((option, index) => {
- console.log(` ${index + 1}. ${option.name} (${option.kind})`);
- });
-
- while (true) {
- const rl = readline.createInterface({
- input: process.stdin,
- output: process.stdout,
- });
-
- let answer = await rl.question("\nChoose an option: ");
- const trimmedAnswer = answer.trim();
-
- const optionIndex = parseInt(trimmedAnswer) - 1;
- if (optionIndex >= 0 && optionIndex < params.options.length) {
- return {
- outcome: {
- outcome: "selected",
- optionId: params.options[optionIndex].optionId,
- },
- };
- } else {
- console.log("Invalid option. Please try again.");
- }
- }
- }
-
- async sessionUpdate(params: acp.SessionNotification): Promise {
- const update = params.update;
-
- switch (update.sessionUpdate) {
- case "agent_message_chunk":
- if (update.content.type === "text") {
- console.log(update.content.text);
- } else {
- console.log(`[${update.content.type}]`);
- }
- break;
- case "tool_call":
- console.log(`\n🔧 ${update.title} (${update.status})`);
- break;
- case "tool_call_update":
- console.log(
- `\n🔧 Tool call \`${update.toolCallId}\` updated: ${update.status}\n`,
- );
- break;
- case "plan":
- case "agent_thought_chunk":
- case "user_message_chunk":
- console.log(`[${update.sessionUpdate}]`);
- break;
- }
- }
-
- async writeTextFile(
- params: acp.WriteTextFileRequest,
- ): Promise {
- console.error(
- "[Client] Write text file called with:",
- JSON.stringify(params, null, 2),
- );
-
- return {};
- }
-
- async readTextFile(
- params: acp.ReadTextFileRequest,
- ): Promise {
- console.error(
- "[Client] Read text file called with:",
- JSON.stringify(params, null, 2),
- );
-
- return {
- content: "Mock file content",
- };
- }
-}
-
-async function main() {
- // Get the current file's directory to find agent.ts
- const __filename = fileURLToPath(import.meta.url);
- const __dirname = dirname(__filename);
- const agentPath = join(__dirname, "agent.ts");
-
- // Spawn the agent as a subprocess using tsx
- const agentProcess = spawn("npx", ["tsx", agentPath], {
- stdio: ["pipe", "pipe", "inherit"],
- });
-
- // Create streams to communicate with the agent
- const input = Writable.toWeb(agentProcess.stdin!);
- const output = Readable.toWeb(
- agentProcess.stdout!,
- ) as ReadableStream;
-
- // Create the client connection
- const client = new ExampleClient();
- const stream = acp.ndJsonStream(input, output);
- const connection = new acp.ClientSideConnection((_agent) => client, stream);
-
- try {
- // Initialize the connection
- const initResult = await connection.initialize({
- protocolVersion: acp.PROTOCOL_VERSION,
- clientCapabilities: {
- fs: {
- readTextFile: true,
- writeTextFile: true,
- },
- },
- });
-
- console.log(
- `✅ Connected to agent (protocol v${initResult.protocolVersion})`,
- );
-
- // Create a new session
- const sessionResult = await connection.newSession({
- cwd: process.cwd(),
- mcpServers: [],
- });
-
- console.log(`📝 Created session: ${sessionResult.sessionId}`);
- console.log(`💬 User: Hello, agent!\n`);
- process.stdout.write(" ");
-
- // Send a test prompt
- const promptResult = await connection.prompt({
- sessionId: sessionResult.sessionId,
- prompt: [
- {
- type: "text",
- text: "Hello, agent!",
- },
- ],
- });
-
- console.log(`\n\n✅ Agent completed with: ${promptResult.stopReason}`);
- } catch (error) {
- console.error("[Client] Error:", error);
- } finally {
- agentProcess.kill();
- process.exit(0);
- }
-}
-
-main().catch(console.error);
diff --git a/typescript/examples/img/final.png b/typescript/examples/img/final.png
deleted file mode 100644
index ea173c99..00000000
Binary files a/typescript/examples/img/final.png and /dev/null differ
diff --git a/typescript/examples/img/menu.png b/typescript/examples/img/menu.png
deleted file mode 100644
index 737303c2..00000000
Binary files a/typescript/examples/img/menu.png and /dev/null differ
diff --git a/typescript/generate.js b/typescript/generate.js
deleted file mode 100644
index d8d54102..00000000
--- a/typescript/generate.js
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/env node
-
-import { compile } from "json-schema-to-typescript";
-import { generate } from "ts-to-zod";
-import fs from "fs";
-
-const jsonSchema = JSON.parse(fs.readFileSync("./schema/schema.json", "utf8"));
-const metadata = JSON.parse(fs.readFileSync("./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",
- ];
-
- let result = src;
-
- for (const typeName of typesToExclude) {
- const regex = new RegExp(`(export type ${typeName}\\b)`, "g");
- result = result.replace(regex, "/** @internal */\n$1");
- }
-
- 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");
-}
-
-fs.writeFileSync("typescript/schema.ts", schemaTs, "utf8");
diff --git a/typescript/jsonrpc.ts b/typescript/jsonrpc.ts
deleted file mode 100644
index b5d8214d..00000000
--- a/typescript/jsonrpc.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * JSON-RPC 2.0 type definitions for internal use.
- */
-
-export type AnyMessage = AnyRequest | AnyResponse | AnyNotification;
-
-export type AnyRequest = {
- jsonrpc: "2.0";
- id: string | number | null;
- method: string;
- params?: unknown;
-};
-
-export type AnyResponse = {
- jsonrpc: "2.0";
- id: string | number | null;
-} & Result;
-
-export type AnyNotification = {
- jsonrpc: "2.0";
- method: string;
- params?: unknown;
-};
-
-export type Result =
- | {
- result: T;
- }
- | {
- error: ErrorResponse;
- };
-
-export type ErrorResponse = {
- code: number;
- message: string;
- data?: unknown;
-};
-
-export type PendingResponse = {
- resolve: (response: unknown) => void;
- reject: (error: ErrorResponse) => void;
-};
-
-export type RequestHandler = (
- method: string,
- params: unknown,
-) => Promise;
-export type NotificationHandler = (
- method: string,
- params: unknown,
-) => Promise;
diff --git a/typescript/schema.ts b/typescript/schema.ts
deleted file mode 100644
index 4bd3b6dc..00000000
--- a/typescript/schema.ts
+++ /dev/null
@@ -1,2446 +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 =
- | ClientRequest
- | ClientResponse
- | ClientNotification
- | AgentRequest
- | AgentResponse
- | AgentNotification;
-/**
- * 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 ClientRequest =
- | 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 =
- | {
- /**
- * 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)
- */
- 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";
-/**
- * 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
- | ExtMethodResponse;
-/**
- * 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 | ExtNotification;
-/**
- * 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 AgentRequest =
- | 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";
- };
-/**
- * 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
- | ExtMethodResponse1;
-/**
- * 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 | ExtNotification1;
-/**
- * The input specification for a command.
- */
-export type AvailableCommandInput = UnstructuredCommandInput;
-
-/**
- * Request to write content to a text file.
- *
- * Only available if the client supports the `fs.writeTextFile` capability.
- */
-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;
-}
-/**
- * Request to read content from a text file.
- *
- * Only available if the client supports the `fs.readTextFile` capability.
- */
-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;
-}
-/**
- * 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 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;
- toolCall: ToolCallUpdate;
-}
-/**
- * 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;
-}
-/**
- * Details about the tool call requiring permission.
- */
-export interface ToolCallUpdate {
- /**
- * 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;
-}
-/**
- * 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;
-}
-/**
- * Request to create a new terminal and execute a command.
- */
-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;
-}
-/**
- * Request to get the current output and status of a terminal.
- */
-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;
-}
-/**
- * Request to release a terminal and free its resources.
- */
-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;
-}
-/**
- * Request to wait for a terminal command to exit.
- */
-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;
-}
-/**
- * Request to kill a terminal command without releasing the terminal.
- */
-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;
-}
-export interface ExtMethodRequest {
- [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 ExtMethodResponse {
- [k: string]: unknown;
-}
-/**
- * Notification to cancel ongoing operations for a session.
- *
- * 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;
-}
-export interface ExtNotification {
- [k: string]: unknown;
-}
-/**
- * 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 interface InitializeRequest {
- /**
- * Extension point for implementations
- */
- _meta?: {
- [k: string]: unknown;
- };
- clientCapabilities?: ClientCapabilities;
- /**
- * 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;
-}
-/**
- * Request parameters for the authenticate method.
- *
- * Specifies which authentication method to use.
- */
-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;
-}
-/**
- * Request parameters for creating a new session.
- *
- * See protocol docs: [Creating a Session](https://agentclientprotocol.com/protocol/session-setup#creating-a-session)
- */
-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;
-}
-/**
- * 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 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;
-}
-/**
- * Request parameters for setting a session mode.
- */
-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;
-}
-/**
- * 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 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.
- *
- * Request parameters for setting a session model.
- */
-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;
-}
-export interface ExtMethodRequest1 {
- [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;
- /**
- * 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 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 ExtMethodResponse1 {
- [k: string]: unknown;
-}
-/**
- * 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 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:
- | {
- content: ContentBlock;
- sessionUpdate: "user_message_chunk";
- }
- | {
- content: ContentBlock;
- sessionUpdate: "agent_message_chunk";
- }
- | {
- content: ContentBlock;
- 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";
- }
- | {
- availableCommands: AvailableCommand[];
- sessionUpdate: "available_commands_update";
- }
- | {
- currentModeId: SessionModeId;
- 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;
-}
-export interface ExtNotification1 {
- [k: string]: unknown;
-}
-
-/** @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 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 extMethodResponseSchema = z.record(z.unknown());
-
-/** @internal */
-export const cancelNotificationSchema = z.object({
- _meta: z.record(z.unknown()).optional(),
- sessionId: z.string(),
-});
-
-/** @internal */
-export const extNotificationSchema = z.record(z.unknown());
-
-/** @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 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 extMethodResponse1Schema = z.record(z.unknown());
-
-/** @internal */
-export const sessionModeIdSchema = z.string();
-
-/** @internal */
-export const extNotification1Schema = z.record(z.unknown());
-
-/** @internal */
-export const unstructuredCommandInputSchema = z.object({
- hint: z.string(),
-});
-
-/** @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 terminalExitStatusSchema = z.object({
- _meta: z.record(z.unknown()).optional(),
- exitCode: z.number().optional().nullable(),
- signal: z.string().optional().nullable(),
-});
-
-/** @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 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 clientNotificationSchema = z.union([
- cancelNotificationSchema,
- extNotificationSchema,
-]);
-
-/** @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 terminalOutputResponseSchema = z.object({
- _meta: z.record(z.unknown()).optional(),
- exitStatus: terminalExitStatusSchema.optional().nullable(),
- output: z.string(),
- truncated: z.boolean(),
-});
-
-/** @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 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 toolCallUpdateSchema = 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 clientCapabilitiesSchema = z.object({
- _meta: z.record(z.unknown()).optional(),
- fs: fileSystemCapabilitySchema.optional(),
- terminal: z.boolean().optional(),
-});
-
-/** @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 clientResponseSchema = z.union([
- writeTextFileResponseSchema,
- readTextFileResponseSchema,
- requestPermissionResponseSchema,
- createTerminalResponseSchema,
- terminalOutputResponseSchema,
- releaseTerminalResponseSchema,
- waitForTerminalExitResponseSchema,
- killTerminalResponseSchema,
- extMethodResponseSchema,
-]);
-
-/** @internal */
-export const requestPermissionRequestSchema = z.object({
- _meta: z.record(z.unknown()).optional(),
- options: z.array(permissionOptionSchema),
- sessionId: z.string(),
- toolCall: toolCallUpdateSchema,
-});
-
-/** @internal */
-export const initializeRequestSchema = z.object({
- _meta: z.record(z.unknown()).optional(),
- clientCapabilities: clientCapabilitiesSchema.optional(),
- protocolVersion: z.number(),
-});
-
-/** @internal */
-export const initializeResponseSchema = z.object({
- _meta: z.record(z.unknown()).optional(),
- agentCapabilities: agentCapabilitiesSchema.optional(),
- 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({
- content: contentBlockSchema,
- sessionUpdate: z.literal("user_message_chunk"),
- }),
- z.object({
- content: contentBlockSchema,
- sessionUpdate: z.literal("agent_message_chunk"),
- }),
- z.object({
- content: contentBlockSchema,
- 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({
- availableCommands: z.array(availableCommandSchema),
- sessionUpdate: z.literal("available_commands_update"),
- }),
- z.object({
- currentModeId: sessionModeIdSchema,
- sessionUpdate: z.literal("current_mode_update"),
- }),
- ]),
-});
-
-/** @internal */
-export const clientRequestSchema = z.union([
- writeTextFileRequestSchema,
- readTextFileRequestSchema,
- requestPermissionRequestSchema,
- createTerminalRequestSchema,
- terminalOutputRequestSchema,
- releaseTerminalRequestSchema,
- waitForTerminalExitRequestSchema,
- killTerminalCommandRequestSchema,
- extMethodRequestSchema,
-]);
-
-/** @internal */
-export const agentRequestSchema = z.union([
- initializeRequestSchema,
- authenticateRequestSchema,
- newSessionRequestSchema,
- loadSessionRequestSchema,
- setSessionModeRequestSchema,
- promptRequestSchema,
- setSessionModelRequestSchema,
- extMethodRequest1Schema,
-]);
-
-/** @internal */
-export const agentResponseSchema = z.union([
- initializeResponseSchema,
- authenticateResponseSchema,
- newSessionResponseSchema,
- loadSessionResponseSchema,
- setSessionModeResponseSchema,
- promptResponseSchema,
- setSessionModelResponseSchema,
- extMethodResponse1Schema,
-]);
-
-/** @internal */
-export const agentNotificationSchema = z.union([
- sessionNotificationSchema,
- extNotification1Schema,
-]);
-
-/** @internal */
-export const agentClientProtocolSchema = z.union([
- clientRequestSchema,
- clientResponseSchema,
- clientNotificationSchema,
- agentRequestSchema,
- agentResponseSchema,
- agentNotificationSchema,
-]);
diff --git a/typescript/stream.ts b/typescript/stream.ts
deleted file mode 100644
index d7f08c7e..00000000
--- a/typescript/stream.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import type { AnyMessage } from "./jsonrpc.js";
-
-/**
- * Stream interface for ACP connections.
- *
- * This type powers the bidirectional communication for an ACP connection,
- * providing readable and writable streams of messages.
- *
- * The most common way to create a Stream is using {@link ndJsonStream}.
- */
-export type Stream = {
- writable: WritableStream;
- readable: ReadableStream;
-};
-
-/**
- * Creates an ACP Stream from a pair of newline-delimited JSON streams.
- *
- * This is the typical way to handle ACP connections over stdio, converting
- * between AnyMessage objects and newline-delimited JSON.
- *
- * @param output - The writable stream to send encoded messages to
- * @param input - The readable stream to receive encoded messages from
- * @returns A Stream for bidirectional ACP communication
- */
-export function ndJsonStream(
- output: WritableStream,
- input: ReadableStream,
-): Stream {
- const textEncoder = new TextEncoder();
- const textDecoder = new TextDecoder();
-
- const readable = new ReadableStream({
- async start(controller) {
- let content = "";
- const reader = input.getReader();
- try {
- while (true) {
- const { value, done } = await reader.read();
- if (done) {
- break;
- }
- if (!value) {
- continue;
- }
- content += textDecoder.decode(value, { stream: true });
- const lines = content.split("\n");
- content = lines.pop() || "";
-
- for (const line of lines) {
- const trimmedLine = line.trim();
- if (trimmedLine) {
- try {
- const message = JSON.parse(trimmedLine) as AnyMessage;
- controller.enqueue(message);
- } catch (err) {
- console.error(
- "Failed to parse JSON message:",
- trimmedLine,
- err,
- );
- }
- }
- }
- }
- } finally {
- reader.releaseLock();
- controller.close();
- }
- },
- });
-
- const writable = new WritableStream({
- async write(message) {
- const content = JSON.stringify(message) + "\n";
- const writer = output.getWriter();
- try {
- await writer.write(textEncoder.encode(content));
- } finally {
- writer.releaseLock();
- }
- },
- });
-
- return { readable, writable };
-}
diff --git a/typescript/typedoc.json b/typescript/typedoc.json
deleted file mode 100644
index 58c22745..00000000
--- a/typescript/typedoc.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
- "$schema": "https://typedoc.org/schema.json",
- "name": "Agent Client Protocol",
- "entryPoints": ["./acp.ts"],
- "out": "./docs",
- "navigationLinks": {
- "Protocol Docs": "https://agentclientprotocol.com",
- "GitHub": "https://github.com/agentclientprotocol/agent-client-protocol",
- "NPM": "https://www.npmjs.com/package/@agentclientprotocol/sdk"
- },
- "tsconfig": "../tsconfig.json",
- "excludePrivate": true,
- "excludeProtected": true,
- "excludeInternal": true,
- "excludeExternals": false,
- "includeVersion": true,
- "searchInComments": true,
- "categorizeByGroup": true,
- "sort": ["source-order"],
- "visibilityFilters": {
- "protected": false,
- "private": false,
- "inherited": true,
- "external": false
- },
- "plugin": ["typedoc-github-theme"],
- "theme": "typedoc-github-theme",
- "lightHighlightTheme": "github-light",
- "darkHighlightTheme": "github-dark",
- "readme": "./README.md",
- "exclude": [
- "**/node_modules/**",
- "**/dist/**",
- "**/tests/**",
- "**/test/**",
- "**/*.test.ts",
- "**/*.spec.ts",
- "**/generate.js"
- ],
- "externalPattern": ["**/node_modules/**"],
- "excludeNotDocumented": false,
- "excludeReferences": false,
- "validation": {
- "notExported": true,
- "invalidLink": true,
- "notDocumented": false
- },
- "treatWarningsAsErrors": false,
- "skipErrorChecking": false,
- "disableSources": false,
- "gitRevision": "main",
- "gitRemote": "origin",
- "hideGenerator": false
-}
diff --git a/typos.toml b/typos.toml
index 508daa50..19643f20 100644
--- a/typos.toml
+++ b/typos.toml
@@ -13,12 +13,6 @@ extend-exclude = [
# Package lock files contain hashes and encoded data
"package-lock.json",
"Cargo.lock",
-
- # TypeScript documentation output
- "typescript/docs/",
-
- # Build artifacts
- "tsconfig.tsbuildinfo",
]
[default]