mirror of
https://github.com/trycua/computer.git
synced 2026-01-08 22:40:06 -06:00
Rename @cua/ to @trycua/, move ts example to ./examples, rename workflows for better organization
This commit is contained in:
4
.github/workflows/ci-lume.yml
vendored
4
.github/workflows/ci-lume.yml
vendored
@@ -20,7 +20,7 @@ jobs:
|
||||
- run: uname -a
|
||||
- run: sudo xcode-select -s /Applications/Xcode_16.app # Swift 6.0
|
||||
- run: swift test
|
||||
working-directory: ./libs/swift/lume
|
||||
working-directory: ./libs/lume
|
||||
build:
|
||||
name: Release build
|
||||
runs-on: macos-15
|
||||
@@ -29,4 +29,4 @@ jobs:
|
||||
- run: uname -a
|
||||
- run: sudo xcode-select -s /Applications/Xcode_16.app # Swift 6.0
|
||||
- run: swift build --configuration release
|
||||
working-directory: ./libs/swift/lume
|
||||
working-directory: ./libs/lume
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
name: Publish @cua/computer to npm
|
||||
name: Publish @trycua/computer to npm
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'computer-v*'
|
||||
- "computer-v*"
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
@@ -15,7 +15,7 @@ jobs:
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: lts/*
|
||||
registry-url: 'https://registry.npmjs.org'
|
||||
registry-url: "https://registry.npmjs.org"
|
||||
|
||||
- name: Install dependencies
|
||||
working-directory: ./libs/typescript/computer
|
||||
@@ -1,9 +1,9 @@
|
||||
name: Publish @cua/core to npm
|
||||
name: Publish @trycua/core to npm
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'core-v*'
|
||||
- "core-v*"
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
@@ -15,7 +15,7 @@ jobs:
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: lts/*
|
||||
registry-url: 'https://registry.npmjs.org'
|
||||
registry-url: "https://registry.npmjs.org"
|
||||
|
||||
- name: Install dependencies
|
||||
working-directory: ./libs/typescript/core
|
||||
26
.github/workflows/publish-lume.yml
vendored
26
.github/workflows/publish-lume.yml
vendored
@@ -85,7 +85,7 @@ jobs:
|
||||
|
||||
# Update version in Main.swift
|
||||
echo "Updating version in Main.swift to $VERSION"
|
||||
sed -i '' "s/static let current: String = \".*\"/static let current: String = \"$VERSION\"/" libs/swift/lume/src/Main.swift
|
||||
sed -i '' "s/static let current: String = \".*\"/static let current: String = \"$VERSION\"/" libs/lume/src/Main.swift
|
||||
|
||||
# Set output for later steps
|
||||
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
||||
@@ -147,7 +147,7 @@ jobs:
|
||||
CERT_APPLICATION_NAME: "Developer ID Application: ${{ secrets.DEVELOPER_NAME }} (${{ secrets.TEAM_ID }})"
|
||||
CERT_INSTALLER_NAME: "Developer ID Installer: ${{ secrets.DEVELOPER_NAME }} (${{ secrets.TEAM_ID }})"
|
||||
VERSION: ${{ steps.set_version.outputs.version }}
|
||||
working-directory: ./libs/swift/lume
|
||||
working-directory: ./libs/lume
|
||||
run: |
|
||||
# Minimal debug information
|
||||
echo "Starting build process..."
|
||||
@@ -185,7 +185,7 @@ jobs:
|
||||
|
||||
- name: Generate SHA256 Checksums
|
||||
id: generate_checksums
|
||||
working-directory: ./libs/swift/lume/.release
|
||||
working-directory: ./libs/lume/.release
|
||||
run: |
|
||||
# Use existing checksums file if it exists, otherwise generate one
|
||||
if [ -f "checksums.txt" ]; then
|
||||
@@ -208,7 +208,7 @@ jobs:
|
||||
ls -la
|
||||
|
||||
- name: Create Standard Version Releases
|
||||
working-directory: ./libs/swift/lume/.release
|
||||
working-directory: ./libs/lume/.release
|
||||
run: |
|
||||
VERSION=${{ steps.set_version.outputs.version }}
|
||||
ARCH=$(uname -m)
|
||||
@@ -230,14 +230,14 @@ jobs:
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: lume-notarized-tarball
|
||||
path: ./libs/swift/lume/${{ steps.build_notarize.outputs.tarball_path }}
|
||||
path: ./libs/lume/${{ steps.build_notarize.outputs.tarball_path }}
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Upload Notarized Package (Installer)
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: lume-notarized-installer
|
||||
path: ./libs/swift/lume/${{ steps.build_notarize.outputs.pkg_path }}
|
||||
path: ./libs/lume/${{ steps.build_notarize.outputs.pkg_path }}
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Create Release
|
||||
@@ -245,18 +245,18 @@ jobs:
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
files: |
|
||||
./libs/swift/lume/${{ steps.build_notarize.outputs.tarball_path }}
|
||||
./libs/swift/lume/${{ steps.build_notarize.outputs.pkg_path }}
|
||||
./libs/swift/lume/.release/lume-darwin.tar.gz
|
||||
./libs/swift/lume/.release/lume-darwin.pkg.tar.gz
|
||||
./libs/swift/lume/.release/lume.tar.gz
|
||||
./libs/swift/lume/.release/lume.pkg.tar.gz
|
||||
./libs/lume/${{ steps.build_notarize.outputs.tarball_path }}
|
||||
./libs/lume/${{ steps.build_notarize.outputs.pkg_path }}
|
||||
./libs/lume/.release/lume-darwin.tar.gz
|
||||
./libs/lume/.release/lume-darwin.pkg.tar.gz
|
||||
./libs/lume/.release/lume.tar.gz
|
||||
./libs/lume/.release/lume.pkg.tar.gz
|
||||
body: |
|
||||
${{ steps.generate_checksums.outputs.checksums }}
|
||||
|
||||
### Installation with script
|
||||
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/trycua/cua/main/libs/swift/lume/scripts/install.sh)"
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/trycua/cua/main/libs/lume/scripts/install.sh)"
|
||||
```
|
||||
generate_release_notes: true
|
||||
make_latest: true
|
||||
|
||||
@@ -141,7 +141,7 @@ jobs:
|
||||
|
||||
publish:
|
||||
needs: prepare
|
||||
uses: ./.github/workflows/reusable-publish.yml
|
||||
uses: ./.github/workflows/pypi-reusable-publish.yml
|
||||
with:
|
||||
package_name: "agent"
|
||||
package_dir: "libs/python/agent"
|
||||
@@ -61,7 +61,7 @@ jobs:
|
||||
|
||||
publish:
|
||||
needs: prepare
|
||||
uses: ./.github/workflows/reusable-publish.yml
|
||||
uses: ./.github/workflows/pypi-reusable-publish.yml
|
||||
with:
|
||||
package_name: "computer-server"
|
||||
package_dir: "libs/python/computer-server"
|
||||
@@ -121,7 +121,7 @@ jobs:
|
||||
|
||||
publish:
|
||||
needs: prepare
|
||||
uses: ./.github/workflows/reusable-publish.yml
|
||||
uses: ./.github/workflows/pypi-reusable-publish.yml
|
||||
with:
|
||||
package_name: "computer"
|
||||
package_dir: "libs/python/computer"
|
||||
@@ -52,7 +52,7 @@ jobs:
|
||||
|
||||
publish:
|
||||
needs: prepare
|
||||
uses: ./.github/workflows/reusable-publish.yml
|
||||
uses: ./.github/workflows/pypi-reusable-publish.yml
|
||||
with:
|
||||
package_name: "core"
|
||||
package_dir: "libs/python/core"
|
||||
@@ -137,7 +137,7 @@ jobs:
|
||||
|
||||
publish:
|
||||
needs: prepare
|
||||
uses: ./.github/workflows/reusable-publish.yml
|
||||
uses: ./.github/workflows/pypi-reusable-publish.yml
|
||||
with:
|
||||
package_name: "mcp-server"
|
||||
package_dir: "libs/python/mcp-server"
|
||||
@@ -71,7 +71,7 @@ jobs:
|
||||
|
||||
publish:
|
||||
needs: determine-version
|
||||
uses: ./.github/workflows/reusable-publish.yml
|
||||
uses: ./.github/workflows/pypi-reusable-publish.yml
|
||||
with:
|
||||
package_name: "pylume"
|
||||
package_dir: "libs/python/pylume"
|
||||
@@ -56,7 +56,7 @@ jobs:
|
||||
|
||||
publish:
|
||||
needs: determine-version
|
||||
uses: ./.github/workflows/reusable-publish.yml
|
||||
uses: ./.github/workflows/pypi-reusable-publish.yml
|
||||
with:
|
||||
package_name: "som"
|
||||
package_dir: "libs/python/som"
|
||||
@@ -1,10 +1,10 @@
|
||||
# cua-cloud-openai Example
|
||||
|
||||
This example demonstrates how to control a c/ua Cloud container using the OpenAI `computer-use-preview` model and the `@cua/computer` TypeScript library.
|
||||
This example demonstrates how to control a c/ua Cloud container using the OpenAI `computer-use-preview` model and the `@trycua/computer` TypeScript library.
|
||||
|
||||
## Overview
|
||||
|
||||
- Connects to a c/ua Cloud container via the `@cua/computer` library
|
||||
- Connects to a c/ua Cloud container via the `@trycua/computer` library
|
||||
- Sends screenshots and instructions to OpenAI's computer-use model
|
||||
- Executes AI-generated actions (clicks, typing, etc.) inside the container
|
||||
- Designed for Linux containers, but can be adapted for other OS types
|
||||
@@ -12,6 +12,7 @@ This example demonstrates how to control a c/ua Cloud container using the OpenAI
|
||||
## Getting Started
|
||||
|
||||
1. **Install dependencies:**
|
||||
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
@@ -23,6 +24,7 @@ This example demonstrates how to control a c/ua Cloud container using the OpenAI
|
||||
- `CUA_CONTAINER_NAME` — the name of your provisioned container
|
||||
|
||||
3. **Run the example:**
|
||||
|
||||
```bash
|
||||
npx tsx src/index.ts
|
||||
```
|
||||
@@ -13,7 +13,7 @@
|
||||
"license": "MIT",
|
||||
"packageManager": "pnpm@10.12.3",
|
||||
"dependencies": {
|
||||
"@cua/computer": "link:../../computer",
|
||||
"@trycua/computer": "link:../../libs/typescript/computer",
|
||||
"dotenv": "^16.5.0",
|
||||
"openai": "^5.7.0"
|
||||
},
|
||||
362
examples/computer-example-ts/pnpm-lock.yaml
generated
Normal file
362
examples/computer-example-ts/pnpm-lock.yaml
generated
Normal file
@@ -0,0 +1,362 @@
|
||||
lockfileVersion: '9.0'
|
||||
|
||||
settings:
|
||||
autoInstallPeers: true
|
||||
excludeLinksFromLockfile: false
|
||||
|
||||
importers:
|
||||
|
||||
.:
|
||||
dependencies:
|
||||
'@trycua/computer':
|
||||
specifier: link:../../libs/typescript/computer
|
||||
version: link:../../libs/typescript/computer
|
||||
dotenv:
|
||||
specifier: ^16.5.0
|
||||
version: 16.6.1
|
||||
openai:
|
||||
specifier: ^5.7.0
|
||||
version: 5.8.2
|
||||
devDependencies:
|
||||
'@types/node':
|
||||
specifier: ^22.15.33
|
||||
version: 22.15.34
|
||||
tsx:
|
||||
specifier: ^4.20.3
|
||||
version: 4.20.3
|
||||
typescript:
|
||||
specifier: ^5.8.3
|
||||
version: 5.8.3
|
||||
|
||||
packages:
|
||||
|
||||
'@esbuild/aix-ppc64@0.25.5':
|
||||
resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [ppc64]
|
||||
os: [aix]
|
||||
|
||||
'@esbuild/android-arm64@0.25.5':
|
||||
resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
||||
'@esbuild/android-arm@0.25.5':
|
||||
resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
|
||||
'@esbuild/android-x64@0.25.5':
|
||||
resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [android]
|
||||
|
||||
'@esbuild/darwin-arm64@0.25.5':
|
||||
resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@esbuild/darwin-x64@0.25.5':
|
||||
resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@esbuild/freebsd-arm64@0.25.5':
|
||||
resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [freebsd]
|
||||
|
||||
'@esbuild/freebsd-x64@0.25.5':
|
||||
resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
||||
'@esbuild/linux-arm64@0.25.5':
|
||||
resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-arm@0.25.5':
|
||||
resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-ia32@0.25.5':
|
||||
resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [ia32]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-loong64@0.25.5':
|
||||
resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [loong64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-mips64el@0.25.5':
|
||||
resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [mips64el]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-ppc64@0.25.5':
|
||||
resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-riscv64@0.25.5':
|
||||
resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-s390x@0.25.5':
|
||||
resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/linux-x64@0.25.5':
|
||||
resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@esbuild/netbsd-arm64@0.25.5':
|
||||
resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [netbsd]
|
||||
|
||||
'@esbuild/netbsd-x64@0.25.5':
|
||||
resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [netbsd]
|
||||
|
||||
'@esbuild/openbsd-arm64@0.25.5':
|
||||
resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [openbsd]
|
||||
|
||||
'@esbuild/openbsd-x64@0.25.5':
|
||||
resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [openbsd]
|
||||
|
||||
'@esbuild/sunos-x64@0.25.5':
|
||||
resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [sunos]
|
||||
|
||||
'@esbuild/win32-arm64@0.25.5':
|
||||
resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@esbuild/win32-ia32@0.25.5':
|
||||
resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
|
||||
'@esbuild/win32-x64@0.25.5':
|
||||
resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==}
|
||||
engines: {node: '>=18'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@types/node@22.15.34':
|
||||
resolution: {integrity: sha512-8Y6E5WUupYy1Dd0II32BsWAx5MWdcnRd8L84Oys3veg1YrYtNtzgO4CFhiBg6MDSjk7Ay36HYOnU7/tuOzIzcw==}
|
||||
|
||||
dotenv@16.6.1:
|
||||
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
esbuild@0.25.5:
|
||||
resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==}
|
||||
engines: {node: '>=18'}
|
||||
hasBin: true
|
||||
|
||||
fsevents@2.3.3:
|
||||
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
|
||||
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
||||
os: [darwin]
|
||||
|
||||
get-tsconfig@4.10.1:
|
||||
resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==}
|
||||
|
||||
openai@5.8.2:
|
||||
resolution: {integrity: sha512-8C+nzoHYgyYOXhHGN6r0fcb4SznuEn1R7YZMvlqDbnCuE0FM2mm3T1HiYW6WIcMS/F1Of2up/cSPjLPaWt0X9Q==}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
ws: ^8.18.0
|
||||
zod: ^3.23.8
|
||||
peerDependenciesMeta:
|
||||
ws:
|
||||
optional: true
|
||||
zod:
|
||||
optional: true
|
||||
|
||||
resolve-pkg-maps@1.0.0:
|
||||
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
|
||||
|
||||
tsx@4.20.3:
|
||||
resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
hasBin: true
|
||||
|
||||
typescript@5.8.3:
|
||||
resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
|
||||
engines: {node: '>=14.17'}
|
||||
hasBin: true
|
||||
|
||||
undici-types@6.21.0:
|
||||
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
|
||||
|
||||
snapshots:
|
||||
|
||||
'@esbuild/aix-ppc64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/android-arm64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/android-arm@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/android-x64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/darwin-arm64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/darwin-x64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/freebsd-arm64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/freebsd-x64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-arm64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-arm@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-ia32@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-loong64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-mips64el@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-ppc64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-riscv64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-s390x@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/linux-x64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/netbsd-arm64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/netbsd-x64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/openbsd-arm64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/openbsd-x64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/sunos-x64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/win32-arm64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/win32-ia32@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@esbuild/win32-x64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@types/node@22.15.34':
|
||||
dependencies:
|
||||
undici-types: 6.21.0
|
||||
|
||||
dotenv@16.6.1: {}
|
||||
|
||||
esbuild@0.25.5:
|
||||
optionalDependencies:
|
||||
'@esbuild/aix-ppc64': 0.25.5
|
||||
'@esbuild/android-arm': 0.25.5
|
||||
'@esbuild/android-arm64': 0.25.5
|
||||
'@esbuild/android-x64': 0.25.5
|
||||
'@esbuild/darwin-arm64': 0.25.5
|
||||
'@esbuild/darwin-x64': 0.25.5
|
||||
'@esbuild/freebsd-arm64': 0.25.5
|
||||
'@esbuild/freebsd-x64': 0.25.5
|
||||
'@esbuild/linux-arm': 0.25.5
|
||||
'@esbuild/linux-arm64': 0.25.5
|
||||
'@esbuild/linux-ia32': 0.25.5
|
||||
'@esbuild/linux-loong64': 0.25.5
|
||||
'@esbuild/linux-mips64el': 0.25.5
|
||||
'@esbuild/linux-ppc64': 0.25.5
|
||||
'@esbuild/linux-riscv64': 0.25.5
|
||||
'@esbuild/linux-s390x': 0.25.5
|
||||
'@esbuild/linux-x64': 0.25.5
|
||||
'@esbuild/netbsd-arm64': 0.25.5
|
||||
'@esbuild/netbsd-x64': 0.25.5
|
||||
'@esbuild/openbsd-arm64': 0.25.5
|
||||
'@esbuild/openbsd-x64': 0.25.5
|
||||
'@esbuild/sunos-x64': 0.25.5
|
||||
'@esbuild/win32-arm64': 0.25.5
|
||||
'@esbuild/win32-ia32': 0.25.5
|
||||
'@esbuild/win32-x64': 0.25.5
|
||||
|
||||
fsevents@2.3.3:
|
||||
optional: true
|
||||
|
||||
get-tsconfig@4.10.1:
|
||||
dependencies:
|
||||
resolve-pkg-maps: 1.0.0
|
||||
|
||||
openai@5.8.2: {}
|
||||
|
||||
resolve-pkg-maps@1.0.0: {}
|
||||
|
||||
tsx@4.20.3:
|
||||
dependencies:
|
||||
esbuild: 0.25.5
|
||||
get-tsconfig: 4.10.1
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.3
|
||||
|
||||
typescript@5.8.3: {}
|
||||
|
||||
undici-types@6.21.0: {}
|
||||
63
examples/computer-example-ts/src/helpers.ts
Normal file
63
examples/computer-example-ts/src/helpers.ts
Normal file
@@ -0,0 +1,63 @@
|
||||
import type { Computer } from "@trycua/computer";
|
||||
import type OpenAI from "openai";
|
||||
|
||||
export async function executeAction(
|
||||
computer: Computer,
|
||||
action: OpenAI.Responses.ResponseComputerToolCall["action"],
|
||||
) {
|
||||
switch (action.type) {
|
||||
case "click": {
|
||||
const { x, y, button } = action;
|
||||
console.log(`Executing click at (${x}, ${y}) with button '${button}'.`);
|
||||
await computer.interface.moveCursor(x, y);
|
||||
if (button === "right") await computer.interface.rightClick();
|
||||
else await computer.interface.leftClick();
|
||||
break;
|
||||
}
|
||||
case "type":
|
||||
{
|
||||
const { text } = action;
|
||||
console.log(`Typing text: ${text}`);
|
||||
await computer.interface.typeText(text);
|
||||
}
|
||||
break;
|
||||
case "scroll": {
|
||||
const { x: locX, y: locY, scroll_x, scroll_y } = action;
|
||||
console.log(
|
||||
`Scrolling at (${locX}, ${locY}) with offsets (scroll_x=${scroll_x}, scroll_y=${scroll_y}).`,
|
||||
);
|
||||
await computer.interface.moveCursor(locX, locY);
|
||||
await computer.interface.scroll(scroll_x, scroll_y);
|
||||
break;
|
||||
}
|
||||
case "keypress": {
|
||||
const { keys } = action;
|
||||
for (const key of keys) {
|
||||
console.log(`Pressing key: ${key}.`);
|
||||
// Map common key names to CUA equivalents
|
||||
if (key.toLowerCase() === "enter") {
|
||||
await computer.interface.pressKey("return");
|
||||
} else if (key.toLowerCase() === "space") {
|
||||
await computer.interface.pressKey("space");
|
||||
} else {
|
||||
await computer.interface.pressKey(key);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "wait": {
|
||||
console.log(`Waiting for 3 seconds.`);
|
||||
await new Promise((resolve) => setTimeout(resolve, 3 * 1000));
|
||||
break;
|
||||
}
|
||||
case "screenshot": {
|
||||
console.log("Taking screenshot.");
|
||||
// This is handled automatically in the main loop, but we can take an extra one if requested
|
||||
const screenshot = await computer.interface.screenshot();
|
||||
return screenshot;
|
||||
}
|
||||
default:
|
||||
console.log(`Unrecognized action: ${action.type}`);
|
||||
break;
|
||||
}
|
||||
}
|
||||
104
examples/computer-example-ts/src/index.ts
Normal file
104
examples/computer-example-ts/src/index.ts
Normal file
@@ -0,0 +1,104 @@
|
||||
import { Computer, OSType } from "@trycua/computer";
|
||||
import OpenAI from "openai";
|
||||
import { executeAction } from "./helpers";
|
||||
|
||||
import "dotenv/config";
|
||||
|
||||
const openai = new OpenAI({ apiKey: process.env.OPENAI_KEY });
|
||||
|
||||
const COMPUTER_USE_PROMPT = "Open firefox and go to trycua.com";
|
||||
|
||||
// Initialize the Computer Connection
|
||||
const computer = new Computer({
|
||||
apiKey: process.env.CUA_KEY!,
|
||||
name: process.env.CUA_CONTAINER_NAME!,
|
||||
osType: OSType.LINUX,
|
||||
});
|
||||
|
||||
await computer.run();
|
||||
// Take the initial screenshot
|
||||
const screenshot = await computer.interface.screenshot();
|
||||
const screenshotBase64 = screenshot.toString("base64");
|
||||
|
||||
// Setup openai config for computer use
|
||||
const computerUseConfig: OpenAI.Responses.ResponseCreateParamsNonStreaming = {
|
||||
model: "computer-use-preview",
|
||||
tools: [
|
||||
{
|
||||
type: "computer_use_preview",
|
||||
display_width: 1024,
|
||||
display_height: 768,
|
||||
environment: "linux", // we're using a linux vm
|
||||
},
|
||||
],
|
||||
truncation: "auto",
|
||||
};
|
||||
|
||||
// Send initial screenshot to the openai computer use model
|
||||
let res = await openai.responses.create({
|
||||
...computerUseConfig,
|
||||
input: [
|
||||
{
|
||||
role: "user",
|
||||
content: [
|
||||
// what we want the ai to do
|
||||
{ type: "input_text", text: COMPUTER_USE_PROMPT },
|
||||
// current screenshot of the vm
|
||||
{
|
||||
type: "input_image",
|
||||
image_url: `data:image/png;base64,${screenshotBase64}`,
|
||||
detail: "auto",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// Loop until there are no more computer use actions.
|
||||
while (true) {
|
||||
const computerCalls = res.output.filter((o) => o.type === "computer_call");
|
||||
if (computerCalls.length < 1) {
|
||||
console.log("No more computer calls. Loop complete.");
|
||||
break;
|
||||
}
|
||||
// Get the first call
|
||||
const call = computerCalls[0];
|
||||
const action = call.action;
|
||||
console.log("Received action from OpenAI Responses API:", action);
|
||||
let ackChecks: OpenAI.Responses.ResponseComputerToolCall.PendingSafetyCheck[] =
|
||||
[];
|
||||
if (call.pending_safety_checks.length > 0) {
|
||||
console.log("Safety checks pending:", call.pending_safety_checks);
|
||||
// In a real implementation, you would want to get user confirmation here
|
||||
ackChecks = call.pending_safety_checks;
|
||||
}
|
||||
|
||||
// Execute the action in the container
|
||||
await executeAction(computer, action);
|
||||
// Wait for changes to process within the container (1sec)
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||
|
||||
// Capture new screenshot
|
||||
const newScreenshot = await computer.interface.screenshot();
|
||||
const newScreenshotBase64 = newScreenshot.toString("base64");
|
||||
|
||||
// Screenshot back as computer_call_output
|
||||
|
||||
res = await openai.responses.create({
|
||||
...computerUseConfig,
|
||||
previous_response_id: res.id,
|
||||
input: [
|
||||
{
|
||||
type: "computer_call_output",
|
||||
call_id: call.call_id,
|
||||
acknowledged_safety_checks: ackChecks,
|
||||
output: {
|
||||
type: "computer_screenshot",
|
||||
image_url: `data:image/png;base64,${newScreenshotBase64}`,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
process.exit();
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
This repository contains TypeScript implementations of the C/UA libraries:
|
||||
|
||||
- `@cua/core`: Core functionality including telemetry and logging
|
||||
- `@cua/computer`: Computer interaction SDK for VM management and control
|
||||
- `@trycua/core`: Core functionality including telemetry and logging
|
||||
- `@trycua/computer`: Computer interaction SDK for VM management and control
|
||||
|
||||
## Project Structure
|
||||
|
||||
@@ -48,10 +48,10 @@ Build specific packages:
|
||||
|
||||
```bash
|
||||
# Build core package
|
||||
pnpm --filter @cua/core build
|
||||
pnpm --filter @trycua/core build
|
||||
|
||||
# Build computer package
|
||||
pnpm --filter @cua/computer build
|
||||
pnpm --filter @trycua/computer build
|
||||
```
|
||||
|
||||
### Running Tests
|
||||
@@ -66,10 +66,10 @@ Run tests for specific packages:
|
||||
|
||||
```bash
|
||||
# Test core package
|
||||
pnpm --filter @cua/core test
|
||||
pnpm --filter @trycua/core test
|
||||
|
||||
# Test computer package
|
||||
pnpm --filter @cua/computer test
|
||||
pnpm --filter @trycua/computer test
|
||||
```
|
||||
|
||||
### Linting
|
||||
@@ -88,14 +88,14 @@ pnpm lint:fix:all
|
||||
|
||||
## Package Details
|
||||
|
||||
### @cua/core
|
||||
### @trycua/core
|
||||
|
||||
Core functionality for C/UA libraries including:
|
||||
|
||||
- Telemetry with PostHog integration
|
||||
- Common utilities and types
|
||||
|
||||
### @cua/computer
|
||||
### @trycua/computer
|
||||
|
||||
Computer interaction SDK for managing and controlling virtual machines:
|
||||
|
||||
|
||||
@@ -9,15 +9,15 @@ This library is a TypeScript port of the Python computer library, providing the
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
npm install @cua/computer
|
||||
npm install @trycua/computer
|
||||
# or
|
||||
pnpm add @cua/computer
|
||||
pnpm add @trycua/computer
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```typescript
|
||||
import { Computer } from '@cua/computer';
|
||||
import { Computer } from '@trycua/computer';
|
||||
|
||||
// Create a new computer instance
|
||||
const computer = new Computer({
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "@cua/computer",
|
||||
"name": "@trycua/computer",
|
||||
"version": "0.0.1",
|
||||
"packageManager": "pnpm@10.11.0",
|
||||
"description": "Typescript SDK for c/ua computer interaction",
|
||||
@@ -38,7 +38,7 @@
|
||||
"prepublishOnly": "pnpm run build"
|
||||
},
|
||||
"dependencies": {
|
||||
"@cua/core": "link:../core",
|
||||
"@trycua/core": "link:../core",
|
||||
"pino": "^9.7.0",
|
||||
"ws": "^8.18.0"
|
||||
},
|
||||
|
||||
@@ -1,117 +1,117 @@
|
||||
import os from 'node:os';
|
||||
import { Telemetry } from '@cua/core';
|
||||
import pino from 'pino';
|
||||
import type { OSType } from '../../types';
|
||||
import type { BaseComputerConfig, Display, VMProviderType } from '../types';
|
||||
import os from "node:os";
|
||||
import { Telemetry } from "@trycua/core";
|
||||
import pino from "pino";
|
||||
import type { OSType } from "../../types";
|
||||
import type { BaseComputerConfig, Display, VMProviderType } from "../types";
|
||||
|
||||
const logger = pino({ name: 'computer.provider_base' });
|
||||
const logger = pino({ name: "computer.provider_base" });
|
||||
|
||||
/**
|
||||
* Base Computer class with shared functionality
|
||||
*/
|
||||
export abstract class BaseComputer {
|
||||
protected name: string;
|
||||
protected osType: OSType;
|
||||
protected vmProvider?: VMProviderType;
|
||||
protected telemetry: Telemetry;
|
||||
protected name: string;
|
||||
protected osType: OSType;
|
||||
protected vmProvider?: VMProviderType;
|
||||
protected telemetry: Telemetry;
|
||||
|
||||
constructor(config: BaseComputerConfig) {
|
||||
this.name = config.name;
|
||||
this.osType = config.osType;
|
||||
this.telemetry = new Telemetry();
|
||||
this.telemetry.recordEvent('module_init', {
|
||||
module: 'computer',
|
||||
version: process.env.npm_package_version,
|
||||
node_version: process.version,
|
||||
});
|
||||
constructor(config: BaseComputerConfig) {
|
||||
this.name = config.name;
|
||||
this.osType = config.osType;
|
||||
this.telemetry = new Telemetry();
|
||||
this.telemetry.recordEvent("module_init", {
|
||||
module: "computer",
|
||||
version: process.env.npm_package_version,
|
||||
node_version: process.version,
|
||||
});
|
||||
|
||||
this.telemetry.recordEvent('computer_initialized', {
|
||||
os: os.platform(),
|
||||
os_version: os.version(),
|
||||
node_version: process.version,
|
||||
});
|
||||
}
|
||||
this.telemetry.recordEvent("computer_initialized", {
|
||||
os: os.platform(),
|
||||
os_version: os.version(),
|
||||
node_version: process.version,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name of the computer
|
||||
*/
|
||||
getName(): string {
|
||||
return this.name;
|
||||
}
|
||||
/**
|
||||
* Get the name of the computer
|
||||
*/
|
||||
getName(): string {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the OS type of the computer
|
||||
*/
|
||||
getOSType(): OSType {
|
||||
return this.osType;
|
||||
}
|
||||
/**
|
||||
* Get the OS type of the computer
|
||||
*/
|
||||
getOSType(): OSType {
|
||||
return this.osType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the VM provider type
|
||||
*/
|
||||
getVMProviderType(): VMProviderType | undefined {
|
||||
return this.vmProvider;
|
||||
}
|
||||
/**
|
||||
* Get the VM provider type
|
||||
*/
|
||||
getVMProviderType(): VMProviderType | undefined {
|
||||
return this.vmProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
* Shared method available to all computer types
|
||||
*/
|
||||
async disconnect(): Promise<void> {
|
||||
logger.info(`Disconnecting from ${this.name}`);
|
||||
// Implementation would go here
|
||||
}
|
||||
/**
|
||||
* Shared method available to all computer types
|
||||
*/
|
||||
async disconnect(): Promise<void> {
|
||||
logger.info(`Disconnecting from ${this.name}`);
|
||||
// Implementation would go here
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse display string into Display object
|
||||
* @param display Display string in format "WIDTHxHEIGHT"
|
||||
* @returns Display object
|
||||
*/
|
||||
public static parseDisplayString(display: string): Display {
|
||||
const match = display.match(/^(\d+)x(\d+)$/);
|
||||
if (!match) {
|
||||
throw new Error(
|
||||
`Invalid display format: ${display}. Expected format: WIDTHxHEIGHT`
|
||||
);
|
||||
}
|
||||
/**
|
||||
* Parse display string into Display object
|
||||
* @param display Display string in format "WIDTHxHEIGHT"
|
||||
* @returns Display object
|
||||
*/
|
||||
public static parseDisplayString(display: string): Display {
|
||||
const match = display.match(/^(\d+)x(\d+)$/);
|
||||
if (!match) {
|
||||
throw new Error(
|
||||
`Invalid display format: ${display}. Expected format: WIDTHxHEIGHT`,
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
width: Number.parseInt(match[1], 10),
|
||||
height: Number.parseInt(match[2], 10),
|
||||
};
|
||||
}
|
||||
return {
|
||||
width: Number.parseInt(match[1], 10),
|
||||
height: Number.parseInt(match[2], 10),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse memory string to MB integer.
|
||||
*
|
||||
* Examples:
|
||||
* "8GB" -> 8192
|
||||
* "1024MB" -> 1024
|
||||
* "512" -> 512
|
||||
*
|
||||
* @param memoryStr - Memory string to parse
|
||||
* @returns Memory value in MB
|
||||
*/
|
||||
public static parseMemoryString(memoryStr: string): number {
|
||||
if (!memoryStr) {
|
||||
return 0;
|
||||
}
|
||||
/**
|
||||
* Parse memory string to MB integer.
|
||||
*
|
||||
* Examples:
|
||||
* "8GB" -> 8192
|
||||
* "1024MB" -> 1024
|
||||
* "512" -> 512
|
||||
*
|
||||
* @param memoryStr - Memory string to parse
|
||||
* @returns Memory value in MB
|
||||
*/
|
||||
public static parseMemoryString(memoryStr: string): number {
|
||||
if (!memoryStr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Convert to uppercase for case-insensitive matching
|
||||
const upperStr = memoryStr.toUpperCase().trim();
|
||||
// Convert to uppercase for case-insensitive matching
|
||||
const upperStr = memoryStr.toUpperCase().trim();
|
||||
|
||||
// Extract numeric value and unit
|
||||
const match = upperStr.match(/^(\d+(?:\.\d+)?)\s*(GB|MB)?$/);
|
||||
if (!match) {
|
||||
throw new Error(`Invalid memory format: ${memoryStr}`);
|
||||
}
|
||||
// Extract numeric value and unit
|
||||
const match = upperStr.match(/^(\d+(?:\.\d+)?)\s*(GB|MB)?$/);
|
||||
if (!match) {
|
||||
throw new Error(`Invalid memory format: ${memoryStr}`);
|
||||
}
|
||||
|
||||
const value = Number.parseFloat(match[1]);
|
||||
const unit = match[2] || 'MB'; // Default to MB if no unit specified
|
||||
const value = Number.parseFloat(match[1]);
|
||||
const unit = match[2] || "MB"; // Default to MB if no unit specified
|
||||
|
||||
// Convert to MB
|
||||
if (unit === 'GB') {
|
||||
return Math.round(value * 1024);
|
||||
}
|
||||
return Math.round(value);
|
||||
}
|
||||
// Convert to MB
|
||||
if (unit === "GB") {
|
||||
return Math.round(value * 1024);
|
||||
}
|
||||
return Math.round(value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "@cua/core",
|
||||
"name": "@trycua/core",
|
||||
"version": "0.0.1",
|
||||
"packageManager": "pnpm@10.11.0",
|
||||
"description": "Typescript SDK for c/ua core",
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
import { Computer } from "@cua/computer";
|
||||
import OpenAI from "openai";
|
||||
|
||||
export async function executeAction(
|
||||
computer: Computer,
|
||||
action: OpenAI.Responses.ResponseComputerToolCall['action']
|
||||
) {
|
||||
switch (action.type) {
|
||||
case 'click':
|
||||
const { x, y, button } = action;
|
||||
console.log(`Executing click at (${x}, ${y}) with button '${button}'.`);
|
||||
await computer.interface.moveCursor(x, y);
|
||||
if (button === 'right') await computer.interface.rightClick();
|
||||
else await computer.interface.leftClick();
|
||||
break;
|
||||
case 'type':
|
||||
const { text } = action;
|
||||
console.log(`Typing text: ${text}`);
|
||||
await computer.interface.typeText(text);
|
||||
break;
|
||||
case 'scroll':
|
||||
const { x: locX, y: locY, scroll_x, scroll_y } = action;
|
||||
console.log(
|
||||
`Scrolling at (${locX}, ${locY}) with offsets (scroll_x=${scroll_x}, scroll_y=${scroll_y}).`
|
||||
);
|
||||
await computer.interface.moveCursor(locX, locY);
|
||||
await computer.interface.scroll(scroll_x, scroll_y);
|
||||
break;
|
||||
case 'keypress':
|
||||
const { keys } = action;
|
||||
for (const key of keys) {
|
||||
console.log(`Pressing key: ${key}.`);
|
||||
// Map common key names to CUA equivalents
|
||||
if (key.toLowerCase() === 'enter') {
|
||||
await computer.interface.pressKey('return');
|
||||
} else if (key.toLowerCase() === 'space') {
|
||||
await computer.interface.pressKey('space');
|
||||
} else {
|
||||
await computer.interface.pressKey(key);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'wait':
|
||||
console.log(`Waiting for 3 seconds.`);
|
||||
await new Promise((resolve) => setTimeout(resolve, 3 * 1000));
|
||||
break;
|
||||
case 'screenshot':
|
||||
console.log('Taking screenshot.');
|
||||
// This is handled automatically in the main loop, but we can take an extra one if requested
|
||||
const screenshot = await computer.interface.screenshot();
|
||||
return screenshot;
|
||||
default:
|
||||
console.log(`Unrecognized action: ${action.type}`);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1,104 +0,0 @@
|
||||
import { Computer, OSType } from '@cua/computer';
|
||||
import OpenAI from 'openai';
|
||||
import { executeAction } from './helpers';
|
||||
|
||||
import 'dotenv/config';
|
||||
|
||||
const openai = new OpenAI({ apiKey: process.env.OPENAI_KEY });
|
||||
|
||||
const COMPUTER_USE_PROMPT = 'Open firefox and go to trycua.com';
|
||||
|
||||
// Initialize the Computer Connection
|
||||
const computer = new Computer({
|
||||
apiKey: process.env.CUA_KEY!,
|
||||
name: process.env.CUA_CONTAINER_NAME!,
|
||||
osType: OSType.LINUX,
|
||||
});
|
||||
|
||||
await computer.run();
|
||||
// Take the initial screenshot
|
||||
const screenshot = await computer.interface.screenshot();
|
||||
const screenshotBase64 = screenshot.toString('base64');
|
||||
|
||||
// Setup openai config for computer use
|
||||
const computerUseConfig: OpenAI.Responses.ResponseCreateParamsNonStreaming = {
|
||||
model: 'computer-use-preview',
|
||||
tools: [
|
||||
{
|
||||
type: 'computer_use_preview',
|
||||
display_width: 1024,
|
||||
display_height: 768,
|
||||
environment: 'linux', // we're using a linux vm
|
||||
},
|
||||
],
|
||||
truncation: 'auto',
|
||||
};
|
||||
|
||||
// Send initial screenshot to the openai computer use model
|
||||
let res = await openai.responses.create({
|
||||
...computerUseConfig,
|
||||
input: [
|
||||
{
|
||||
role: 'user',
|
||||
content: [
|
||||
// what we want the ai to do
|
||||
{ type: 'input_text', text: COMPUTER_USE_PROMPT },
|
||||
// current screenshot of the vm
|
||||
{
|
||||
type: 'input_image',
|
||||
image_url: `data:image/png;base64,${screenshotBase64}`,
|
||||
detail: 'auto',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// Loop until there are no more computer use actions.
|
||||
while (true) {
|
||||
const computerCalls = res.output.filter((o) => o.type === 'computer_call');
|
||||
if (computerCalls.length < 1) {
|
||||
console.log('No more computer calls. Loop complete.');
|
||||
break;
|
||||
}
|
||||
// Get the first call
|
||||
const call = computerCalls[0];
|
||||
const action = call.action;
|
||||
console.log('Received action from OpenAI Responses API:', action);
|
||||
let ackChecks: OpenAI.Responses.ResponseComputerToolCall.PendingSafetyCheck[] =
|
||||
[];
|
||||
if (call.pending_safety_checks.length > 0) {
|
||||
console.log('Safety checks pending:', call.pending_safety_checks);
|
||||
// In a real implementation, you would want to get user confirmation here
|
||||
ackChecks = call.pending_safety_checks;
|
||||
}
|
||||
|
||||
// Execute the action in the container
|
||||
await executeAction(computer, action);
|
||||
// Wait for changes to process within the container (1sec)
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||
|
||||
// Capture new screenshot
|
||||
const newScreenshot = await computer.interface.screenshot();
|
||||
const newScreenshotBase64 = newScreenshot.toString('base64');
|
||||
|
||||
// Screenshot back as computer_call_output
|
||||
|
||||
res = await openai.responses.create({
|
||||
...computerUseConfig,
|
||||
previous_response_id: res.id,
|
||||
input: [
|
||||
{
|
||||
type: 'computer_call_output',
|
||||
call_id: call.call_id,
|
||||
acknowledged_safety_checks: ackChecks,
|
||||
output: {
|
||||
type: 'computer_screenshot',
|
||||
image_url: `data:image/png;base64,${newScreenshotBase64}`,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
process.exit();
|
||||
@@ -8,11 +8,11 @@
|
||||
"scripts": {
|
||||
"lint": "biome check",
|
||||
"lint:fix": "biome check --fix",
|
||||
"build:core": "pnpm --filter @cua/core build",
|
||||
"build:computer": "pnpm --filter @cua/computer build",
|
||||
"build:core": "pnpm --filter @trycua/core build",
|
||||
"build:computer": "pnpm --filter @trycua/computer build",
|
||||
"build": "pnpm build:core && pnpm build:computer",
|
||||
"test:core": "pnpm --filter @cua/core test",
|
||||
"test:computer": "pnpm --filter @cua/computer test",
|
||||
"test:core": "pnpm --filter @trycua/core test",
|
||||
"test:computer": "pnpm --filter @trycua/computer test",
|
||||
"test": "pnpm -r test",
|
||||
"typecheck": "pnpm -r typecheck"
|
||||
},
|
||||
|
||||
358
libs/typescript/pnpm-lock.yaml
generated
358
libs/typescript/pnpm-lock.yaml
generated
@@ -14,7 +14,7 @@ importers:
|
||||
|
||||
computer:
|
||||
dependencies:
|
||||
'@cua/core':
|
||||
'@trycua/core':
|
||||
specifier: link:../core
|
||||
version: link:../core
|
||||
pino:
|
||||
@@ -22,14 +22,14 @@ importers:
|
||||
version: 9.7.0
|
||||
ws:
|
||||
specifier: ^8.18.0
|
||||
version: 8.18.2
|
||||
version: 8.18.3
|
||||
devDependencies:
|
||||
'@biomejs/biome':
|
||||
specifier: ^1.9.4
|
||||
version: 1.9.4
|
||||
'@types/node':
|
||||
specifier: ^22.15.17
|
||||
version: 22.15.33
|
||||
version: 22.15.34
|
||||
'@types/ws':
|
||||
specifier: ^8.18.1
|
||||
version: 8.18.1
|
||||
@@ -50,7 +50,7 @@ importers:
|
||||
version: 5.8.3
|
||||
vitest:
|
||||
specifier: ^3.1.3
|
||||
version: 3.2.4(@types/node@22.15.33)(happy-dom@17.6.3)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
|
||||
version: 3.2.4(@types/node@22.15.34)(happy-dom@17.6.3)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
|
||||
|
||||
core:
|
||||
dependencies:
|
||||
@@ -72,7 +72,7 @@ importers:
|
||||
version: 1.9.4
|
||||
'@types/node':
|
||||
specifier: ^22.15.17
|
||||
version: 22.15.33
|
||||
version: 22.15.34
|
||||
'@types/ws':
|
||||
specifier: ^8.18.1
|
||||
version: 8.18.1
|
||||
@@ -93,45 +93,7 @@ importers:
|
||||
version: 5.8.3
|
||||
vitest:
|
||||
specifier: ^3.1.3
|
||||
version: 3.2.4(@types/node@22.15.33)(happy-dom@17.6.3)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
|
||||
|
||||
examples/byo-operator-ts:
|
||||
dependencies:
|
||||
'@cua/computer':
|
||||
specifier: link:../../computer
|
||||
version: link:../../computer
|
||||
openai:
|
||||
specifier: ^5.7.0
|
||||
version: 5.7.0(ws@8.18.2)
|
||||
devDependencies:
|
||||
tsx:
|
||||
specifier: ^4.20.3
|
||||
version: 4.20.3
|
||||
typescript:
|
||||
specifier: ^5.8.3
|
||||
version: 5.8.3
|
||||
|
||||
examples/cua-openai:
|
||||
dependencies:
|
||||
'@cua/computer':
|
||||
specifier: link:../../computer
|
||||
version: link:../../computer
|
||||
dotenv:
|
||||
specifier: ^16.5.0
|
||||
version: 16.5.0
|
||||
openai:
|
||||
specifier: ^5.7.0
|
||||
version: 5.7.0(ws@8.18.2)
|
||||
devDependencies:
|
||||
'@types/node':
|
||||
specifier: ^22.15.33
|
||||
version: 22.15.33
|
||||
tsx:
|
||||
specifier: ^4.20.3
|
||||
version: 4.20.3
|
||||
typescript:
|
||||
specifier: ^5.8.3
|
||||
version: 5.8.3
|
||||
version: 3.2.4(@types/node@22.15.34)(happy-dom@17.6.3)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
|
||||
|
||||
packages:
|
||||
|
||||
@@ -147,13 +109,13 @@ packages:
|
||||
resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/parser@7.27.5':
|
||||
resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==}
|
||||
'@babel/parser@7.27.7':
|
||||
resolution: {integrity: sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
hasBin: true
|
||||
|
||||
'@babel/types@7.27.6':
|
||||
resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==}
|
||||
'@babel/types@7.27.7':
|
||||
resolution: {integrity: sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@biomejs/biome@1.9.4':
|
||||
@@ -368,23 +330,18 @@ packages:
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@jridgewell/gen-mapping@0.3.8':
|
||||
resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
'@jridgewell/gen-mapping@0.3.10':
|
||||
resolution: {integrity: sha512-HM2F4B9N4cA0RH2KQiIZOHAZqtP4xGS4IZ+SFe1SIbO4dyjf9MTY2Bo3vHYnm0hglWfXqBrzUBSa+cJfl3Xvrg==}
|
||||
|
||||
'@jridgewell/resolve-uri@3.1.2':
|
||||
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
|
||||
'@jridgewell/set-array@1.2.1':
|
||||
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
'@jridgewell/sourcemap-codec@1.5.2':
|
||||
resolution: {integrity: sha512-gKYheCylLIedI+CSZoDtGkFV9YEBxRRVcfCH7OfAqh4TyUyRjEE6WVE/aXDXX0p8BIe/QgLcaAoI0220KRRFgg==}
|
||||
|
||||
'@jridgewell/sourcemap-codec@1.5.0':
|
||||
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
|
||||
|
||||
'@jridgewell/trace-mapping@0.3.25':
|
||||
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
|
||||
'@jridgewell/trace-mapping@0.3.27':
|
||||
resolution: {integrity: sha512-VO95AxtSFMelbg3ouljAYnfvTEwSWVt/2YLf+U5Ejd8iT5mXE2Sa/1LGyvySMne2CGsepGLI7KpF3EzE3Aq9Mg==}
|
||||
|
||||
'@napi-rs/wasm-runtime@0.2.11':
|
||||
resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==}
|
||||
@@ -459,103 +416,103 @@ packages:
|
||||
'@rolldown/pluginutils@1.0.0-beta.9':
|
||||
resolution: {integrity: sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==}
|
||||
|
||||
'@rollup/rollup-android-arm-eabi@4.44.0':
|
||||
resolution: {integrity: sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==}
|
||||
'@rollup/rollup-android-arm-eabi@4.44.1':
|
||||
resolution: {integrity: sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
|
||||
'@rollup/rollup-android-arm64@4.44.0':
|
||||
resolution: {integrity: sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==}
|
||||
'@rollup/rollup-android-arm64@4.44.1':
|
||||
resolution: {integrity: sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
||||
'@rollup/rollup-darwin-arm64@4.44.0':
|
||||
resolution: {integrity: sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==}
|
||||
'@rollup/rollup-darwin-arm64@4.44.1':
|
||||
resolution: {integrity: sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@rollup/rollup-darwin-x64@4.44.0':
|
||||
resolution: {integrity: sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==}
|
||||
'@rollup/rollup-darwin-x64@4.44.1':
|
||||
resolution: {integrity: sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@rollup/rollup-freebsd-arm64@4.44.0':
|
||||
resolution: {integrity: sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==}
|
||||
'@rollup/rollup-freebsd-arm64@4.44.1':
|
||||
resolution: {integrity: sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==}
|
||||
cpu: [arm64]
|
||||
os: [freebsd]
|
||||
|
||||
'@rollup/rollup-freebsd-x64@4.44.0':
|
||||
resolution: {integrity: sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==}
|
||||
'@rollup/rollup-freebsd-x64@4.44.1':
|
||||
resolution: {integrity: sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
||||
'@rollup/rollup-linux-arm-gnueabihf@4.44.0':
|
||||
resolution: {integrity: sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==}
|
||||
'@rollup/rollup-linux-arm-gnueabihf@4.44.1':
|
||||
resolution: {integrity: sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-arm-musleabihf@4.44.0':
|
||||
resolution: {integrity: sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==}
|
||||
'@rollup/rollup-linux-arm-musleabihf@4.44.1':
|
||||
resolution: {integrity: sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-arm64-gnu@4.44.0':
|
||||
resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==}
|
||||
'@rollup/rollup-linux-arm64-gnu@4.44.1':
|
||||
resolution: {integrity: sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-arm64-musl@4.44.0':
|
||||
resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==}
|
||||
'@rollup/rollup-linux-arm64-musl@4.44.1':
|
||||
resolution: {integrity: sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-loongarch64-gnu@4.44.0':
|
||||
resolution: {integrity: sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==}
|
||||
'@rollup/rollup-linux-loongarch64-gnu@4.44.1':
|
||||
resolution: {integrity: sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==}
|
||||
cpu: [loong64]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-powerpc64le-gnu@4.44.0':
|
||||
resolution: {integrity: sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==}
|
||||
'@rollup/rollup-linux-powerpc64le-gnu@4.44.1':
|
||||
resolution: {integrity: sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-riscv64-gnu@4.44.0':
|
||||
resolution: {integrity: sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==}
|
||||
'@rollup/rollup-linux-riscv64-gnu@4.44.1':
|
||||
resolution: {integrity: sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-riscv64-musl@4.44.0':
|
||||
resolution: {integrity: sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==}
|
||||
'@rollup/rollup-linux-riscv64-musl@4.44.1':
|
||||
resolution: {integrity: sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-s390x-gnu@4.44.0':
|
||||
resolution: {integrity: sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==}
|
||||
'@rollup/rollup-linux-s390x-gnu@4.44.1':
|
||||
resolution: {integrity: sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-x64-gnu@4.44.0':
|
||||
resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==}
|
||||
'@rollup/rollup-linux-x64-gnu@4.44.1':
|
||||
resolution: {integrity: sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-linux-x64-musl@4.44.0':
|
||||
resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==}
|
||||
'@rollup/rollup-linux-x64-musl@4.44.1':
|
||||
resolution: {integrity: sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@rollup/rollup-win32-arm64-msvc@4.44.0':
|
||||
resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==}
|
||||
'@rollup/rollup-win32-arm64-msvc@4.44.1':
|
||||
resolution: {integrity: sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@rollup/rollup-win32-ia32-msvc@4.44.0':
|
||||
resolution: {integrity: sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==}
|
||||
'@rollup/rollup-win32-ia32-msvc@4.44.1':
|
||||
resolution: {integrity: sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
|
||||
'@rollup/rollup-win32-x64-msvc@4.44.0':
|
||||
resolution: {integrity: sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==}
|
||||
'@rollup/rollup-win32-x64-msvc@4.44.1':
|
||||
resolution: {integrity: sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
@@ -571,8 +528,8 @@ packages:
|
||||
'@types/estree@1.0.8':
|
||||
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
|
||||
|
||||
'@types/node@22.15.33':
|
||||
resolution: {integrity: sha512-wzoocdnnpSxZ+6CjW4ADCK1jVmd1S/J3ArNWfn8FDDQtRm8dkDg7TA+mvek2wNrfCgwuZxqEOiB9B1XCJ6+dbw==}
|
||||
'@types/node@22.15.34':
|
||||
resolution: {integrity: sha512-8Y6E5WUupYy1Dd0II32BsWAx5MWdcnRd8L84Oys3veg1YrYtNtzgO4CFhiBg6MDSjk7Ay36HYOnU7/tuOzIzcw==}
|
||||
|
||||
'@types/uuid@10.0.0':
|
||||
resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==}
|
||||
@@ -693,8 +650,8 @@ packages:
|
||||
resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==}
|
||||
engines: {node: '>=0.3.1'}
|
||||
|
||||
dotenv@16.5.0:
|
||||
resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==}
|
||||
dotenv@16.6.1:
|
||||
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
dts-resolver@2.1.1:
|
||||
@@ -807,18 +764,6 @@ packages:
|
||||
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
|
||||
openai@5.7.0:
|
||||
resolution: {integrity: sha512-zXWawZl6J/P5Wz57/nKzVT3kJQZvogfuyuNVCdEp4/XU2UNrjL7SsuNpWAyLZbo6HVymwmnfno9toVzBhelygA==}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
ws: ^8.18.0
|
||||
zod: ^3.23.8
|
||||
peerDependenciesMeta:
|
||||
ws:
|
||||
optional: true
|
||||
zod:
|
||||
optional: true
|
||||
|
||||
package-manager-detector@1.3.0:
|
||||
resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==}
|
||||
|
||||
@@ -849,8 +794,8 @@ packages:
|
||||
resolution: {integrity: sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==}
|
||||
hasBin: true
|
||||
|
||||
pkg-types@2.1.0:
|
||||
resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==}
|
||||
pkg-types@2.1.1:
|
||||
resolution: {integrity: sha512-eY0QFb6eSwc9+0d/5D2lFFUq+A3n3QNGSy/X2Nvp+6MfzGw2u6EbA7S80actgjY1lkvvI0pqB+a4hioMh443Ew==}
|
||||
|
||||
postcss@8.5.6:
|
||||
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
|
||||
@@ -883,8 +828,8 @@ packages:
|
||||
resolve-pkg-maps@1.0.0:
|
||||
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
|
||||
|
||||
rolldown-plugin-dts@0.13.12:
|
||||
resolution: {integrity: sha512-4QdQQfMOWNDLhmvoG3USAUpCm75dgwWk3IrK6SV9Fw2U5uwcSE7oQTqEcmsUGEBsNxZ58+gtM1oX38MMf0g5PA==}
|
||||
rolldown-plugin-dts@0.13.13:
|
||||
resolution: {integrity: sha512-Nchx9nQoa4IpfQ/BJzodKMvtJ3H3dT322siAJSp3uvQJ+Pi1qgEjOp7hSQwGSQRhaC5gC+9hparbWEH5oiAL9Q==}
|
||||
engines: {node: '>=20.18.0'}
|
||||
peerDependencies:
|
||||
'@typescript/native-preview': '>=7.0.0-dev.20250601.1'
|
||||
@@ -908,8 +853,8 @@ packages:
|
||||
'@oxc-project/runtime':
|
||||
optional: true
|
||||
|
||||
rollup@4.44.0:
|
||||
resolution: {integrity: sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==}
|
||||
rollup@4.44.1:
|
||||
resolution: {integrity: sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==}
|
||||
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
|
||||
hasBin: true
|
||||
|
||||
@@ -1101,8 +1046,8 @@ packages:
|
||||
engines: {node: '>=8'}
|
||||
hasBin: true
|
||||
|
||||
ws@8.18.2:
|
||||
resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
|
||||
ws@8.18.3:
|
||||
resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
|
||||
engines: {node: '>=10.0.0'}
|
||||
peerDependencies:
|
||||
bufferutil: ^4.0.1
|
||||
@@ -1122,21 +1067,21 @@ snapshots:
|
||||
|
||||
'@babel/generator@7.27.5':
|
||||
dependencies:
|
||||
'@babel/parser': 7.27.5
|
||||
'@babel/types': 7.27.6
|
||||
'@jridgewell/gen-mapping': 0.3.8
|
||||
'@jridgewell/trace-mapping': 0.3.25
|
||||
'@babel/parser': 7.27.7
|
||||
'@babel/types': 7.27.7
|
||||
'@jridgewell/gen-mapping': 0.3.10
|
||||
'@jridgewell/trace-mapping': 0.3.27
|
||||
jsesc: 3.1.0
|
||||
|
||||
'@babel/helper-string-parser@7.27.1': {}
|
||||
|
||||
'@babel/helper-validator-identifier@7.27.1': {}
|
||||
|
||||
'@babel/parser@7.27.5':
|
||||
'@babel/parser@7.27.7':
|
||||
dependencies:
|
||||
'@babel/types': 7.27.6
|
||||
'@babel/types': 7.27.7
|
||||
|
||||
'@babel/types@7.27.6':
|
||||
'@babel/types@7.27.7':
|
||||
dependencies:
|
||||
'@babel/helper-string-parser': 7.27.1
|
||||
'@babel/helper-validator-identifier': 7.27.1
|
||||
@@ -1267,22 +1212,19 @@ snapshots:
|
||||
'@esbuild/win32-x64@0.25.5':
|
||||
optional: true
|
||||
|
||||
'@jridgewell/gen-mapping@0.3.8':
|
||||
'@jridgewell/gen-mapping@0.3.10':
|
||||
dependencies:
|
||||
'@jridgewell/set-array': 1.2.1
|
||||
'@jridgewell/sourcemap-codec': 1.5.0
|
||||
'@jridgewell/trace-mapping': 0.3.25
|
||||
'@jridgewell/sourcemap-codec': 1.5.2
|
||||
'@jridgewell/trace-mapping': 0.3.27
|
||||
|
||||
'@jridgewell/resolve-uri@3.1.2': {}
|
||||
|
||||
'@jridgewell/set-array@1.2.1': {}
|
||||
'@jridgewell/sourcemap-codec@1.5.2': {}
|
||||
|
||||
'@jridgewell/sourcemap-codec@1.5.0': {}
|
||||
|
||||
'@jridgewell/trace-mapping@0.3.25':
|
||||
'@jridgewell/trace-mapping@0.3.27':
|
||||
dependencies:
|
||||
'@jridgewell/resolve-uri': 3.1.2
|
||||
'@jridgewell/sourcemap-codec': 1.5.0
|
||||
'@jridgewell/sourcemap-codec': 1.5.2
|
||||
|
||||
'@napi-rs/wasm-runtime@0.2.11':
|
||||
dependencies:
|
||||
@@ -1337,64 +1279,64 @@ snapshots:
|
||||
|
||||
'@rolldown/pluginutils@1.0.0-beta.9': {}
|
||||
|
||||
'@rollup/rollup-android-arm-eabi@4.44.0':
|
||||
'@rollup/rollup-android-arm-eabi@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-android-arm64@4.44.0':
|
||||
'@rollup/rollup-android-arm64@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-darwin-arm64@4.44.0':
|
||||
'@rollup/rollup-darwin-arm64@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-darwin-x64@4.44.0':
|
||||
'@rollup/rollup-darwin-x64@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-freebsd-arm64@4.44.0':
|
||||
'@rollup/rollup-freebsd-arm64@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-freebsd-x64@4.44.0':
|
||||
'@rollup/rollup-freebsd-x64@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-arm-gnueabihf@4.44.0':
|
||||
'@rollup/rollup-linux-arm-gnueabihf@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-arm-musleabihf@4.44.0':
|
||||
'@rollup/rollup-linux-arm-musleabihf@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-arm64-gnu@4.44.0':
|
||||
'@rollup/rollup-linux-arm64-gnu@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-arm64-musl@4.44.0':
|
||||
'@rollup/rollup-linux-arm64-musl@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-loongarch64-gnu@4.44.0':
|
||||
'@rollup/rollup-linux-loongarch64-gnu@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-powerpc64le-gnu@4.44.0':
|
||||
'@rollup/rollup-linux-powerpc64le-gnu@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-riscv64-gnu@4.44.0':
|
||||
'@rollup/rollup-linux-riscv64-gnu@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-riscv64-musl@4.44.0':
|
||||
'@rollup/rollup-linux-riscv64-musl@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-s390x-gnu@4.44.0':
|
||||
'@rollup/rollup-linux-s390x-gnu@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-x64-gnu@4.44.0':
|
||||
'@rollup/rollup-linux-x64-gnu@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-linux-x64-musl@4.44.0':
|
||||
'@rollup/rollup-linux-x64-musl@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-win32-arm64-msvc@4.44.0':
|
||||
'@rollup/rollup-win32-arm64-msvc@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-win32-ia32-msvc@4.44.0':
|
||||
'@rollup/rollup-win32-ia32-msvc@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@rollup/rollup-win32-x64-msvc@4.44.0':
|
||||
'@rollup/rollup-win32-x64-msvc@4.44.1':
|
||||
optional: true
|
||||
|
||||
'@tybys/wasm-util@0.9.0':
|
||||
@@ -1410,7 +1352,7 @@ snapshots:
|
||||
|
||||
'@types/estree@1.0.8': {}
|
||||
|
||||
'@types/node@22.15.33':
|
||||
'@types/node@22.15.34':
|
||||
dependencies:
|
||||
undici-types: 6.21.0
|
||||
|
||||
@@ -1418,7 +1360,7 @@ snapshots:
|
||||
|
||||
'@types/ws@8.18.1':
|
||||
dependencies:
|
||||
'@types/node': 22.15.33
|
||||
'@types/node': 22.15.34
|
||||
|
||||
'@vitest/expect@3.2.4':
|
||||
dependencies:
|
||||
@@ -1428,13 +1370,13 @@ snapshots:
|
||||
chai: 5.2.0
|
||||
tinyrainbow: 2.0.0
|
||||
|
||||
'@vitest/mocker@3.2.4(vite@7.0.0(@types/node@22.15.33)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0))':
|
||||
'@vitest/mocker@3.2.4(vite@7.0.0(@types/node@22.15.34)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0))':
|
||||
dependencies:
|
||||
'@vitest/spy': 3.2.4
|
||||
estree-walker: 3.0.3
|
||||
magic-string: 0.30.17
|
||||
optionalDependencies:
|
||||
vite: 7.0.0(@types/node@22.15.33)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
|
||||
vite: 7.0.0(@types/node@22.15.34)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
|
||||
|
||||
'@vitest/pretty-format@3.2.4':
|
||||
dependencies:
|
||||
@@ -1470,7 +1412,7 @@ snapshots:
|
||||
|
||||
ast-kit@2.1.0:
|
||||
dependencies:
|
||||
'@babel/parser': 7.27.5
|
||||
'@babel/parser': 7.27.7
|
||||
pathe: 2.0.3
|
||||
|
||||
atomic-sleep@1.0.0: {}
|
||||
@@ -1498,14 +1440,14 @@ snapshots:
|
||||
chokidar: 4.0.3
|
||||
confbox: 0.2.2
|
||||
defu: 6.1.4
|
||||
dotenv: 16.5.0
|
||||
dotenv: 16.6.1
|
||||
exsolve: 1.0.7
|
||||
giget: 2.0.0
|
||||
jiti: 2.4.2
|
||||
ohash: 2.0.11
|
||||
pathe: 2.0.3
|
||||
perfect-debounce: 1.0.0
|
||||
pkg-types: 2.1.0
|
||||
pkg-types: 2.1.1
|
||||
rc9: 2.1.2
|
||||
|
||||
cac@6.7.14: {}
|
||||
@@ -1544,7 +1486,7 @@ snapshots:
|
||||
|
||||
diff@8.0.2: {}
|
||||
|
||||
dotenv@16.5.0: {}
|
||||
dotenv@16.6.1: {}
|
||||
|
||||
dts-resolver@2.1.1: {}
|
||||
|
||||
@@ -1631,7 +1573,7 @@ snapshots:
|
||||
|
||||
magic-string@0.30.17:
|
||||
dependencies:
|
||||
'@jridgewell/sourcemap-codec': 1.5.0
|
||||
'@jridgewell/sourcemap-codec': 1.5.2
|
||||
|
||||
ms@2.1.3: {}
|
||||
|
||||
@@ -1644,17 +1586,13 @@ snapshots:
|
||||
citty: 0.1.6
|
||||
consola: 3.4.2
|
||||
pathe: 2.0.3
|
||||
pkg-types: 2.1.0
|
||||
pkg-types: 2.1.1
|
||||
tinyexec: 0.3.2
|
||||
|
||||
ohash@2.0.11: {}
|
||||
|
||||
on-exit-leak-free@2.1.2: {}
|
||||
|
||||
openai@5.7.0(ws@8.18.2):
|
||||
optionalDependencies:
|
||||
ws: 8.18.2
|
||||
|
||||
package-manager-detector@1.3.0: {}
|
||||
|
||||
pathe@2.0.3: {}
|
||||
@@ -1687,7 +1625,7 @@ snapshots:
|
||||
sonic-boom: 4.2.0
|
||||
thread-stream: 3.1.0
|
||||
|
||||
pkg-types@2.1.0:
|
||||
pkg-types@2.1.1:
|
||||
dependencies:
|
||||
confbox: 0.2.2
|
||||
exsolve: 1.0.7
|
||||
@@ -1718,11 +1656,11 @@ snapshots:
|
||||
|
||||
resolve-pkg-maps@1.0.0: {}
|
||||
|
||||
rolldown-plugin-dts@0.13.12(rolldown@1.0.0-beta.9)(typescript@5.8.3):
|
||||
rolldown-plugin-dts@0.13.13(rolldown@1.0.0-beta.9)(typescript@5.8.3):
|
||||
dependencies:
|
||||
'@babel/generator': 7.27.5
|
||||
'@babel/parser': 7.27.5
|
||||
'@babel/types': 7.27.6
|
||||
'@babel/parser': 7.27.7
|
||||
'@babel/types': 7.27.7
|
||||
ast-kit: 2.1.0
|
||||
birpc: 2.4.0
|
||||
debug: 4.4.1
|
||||
@@ -1754,30 +1692,30 @@ snapshots:
|
||||
'@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.9
|
||||
'@rolldown/binding-win32-x64-msvc': 1.0.0-beta.9
|
||||
|
||||
rollup@4.44.0:
|
||||
rollup@4.44.1:
|
||||
dependencies:
|
||||
'@types/estree': 1.0.8
|
||||
optionalDependencies:
|
||||
'@rollup/rollup-android-arm-eabi': 4.44.0
|
||||
'@rollup/rollup-android-arm64': 4.44.0
|
||||
'@rollup/rollup-darwin-arm64': 4.44.0
|
||||
'@rollup/rollup-darwin-x64': 4.44.0
|
||||
'@rollup/rollup-freebsd-arm64': 4.44.0
|
||||
'@rollup/rollup-freebsd-x64': 4.44.0
|
||||
'@rollup/rollup-linux-arm-gnueabihf': 4.44.0
|
||||
'@rollup/rollup-linux-arm-musleabihf': 4.44.0
|
||||
'@rollup/rollup-linux-arm64-gnu': 4.44.0
|
||||
'@rollup/rollup-linux-arm64-musl': 4.44.0
|
||||
'@rollup/rollup-linux-loongarch64-gnu': 4.44.0
|
||||
'@rollup/rollup-linux-powerpc64le-gnu': 4.44.0
|
||||
'@rollup/rollup-linux-riscv64-gnu': 4.44.0
|
||||
'@rollup/rollup-linux-riscv64-musl': 4.44.0
|
||||
'@rollup/rollup-linux-s390x-gnu': 4.44.0
|
||||
'@rollup/rollup-linux-x64-gnu': 4.44.0
|
||||
'@rollup/rollup-linux-x64-musl': 4.44.0
|
||||
'@rollup/rollup-win32-arm64-msvc': 4.44.0
|
||||
'@rollup/rollup-win32-ia32-msvc': 4.44.0
|
||||
'@rollup/rollup-win32-x64-msvc': 4.44.0
|
||||
'@rollup/rollup-android-arm-eabi': 4.44.1
|
||||
'@rollup/rollup-android-arm64': 4.44.1
|
||||
'@rollup/rollup-darwin-arm64': 4.44.1
|
||||
'@rollup/rollup-darwin-x64': 4.44.1
|
||||
'@rollup/rollup-freebsd-arm64': 4.44.1
|
||||
'@rollup/rollup-freebsd-x64': 4.44.1
|
||||
'@rollup/rollup-linux-arm-gnueabihf': 4.44.1
|
||||
'@rollup/rollup-linux-arm-musleabihf': 4.44.1
|
||||
'@rollup/rollup-linux-arm64-gnu': 4.44.1
|
||||
'@rollup/rollup-linux-arm64-musl': 4.44.1
|
||||
'@rollup/rollup-linux-loongarch64-gnu': 4.44.1
|
||||
'@rollup/rollup-linux-powerpc64le-gnu': 4.44.1
|
||||
'@rollup/rollup-linux-riscv64-gnu': 4.44.1
|
||||
'@rollup/rollup-linux-riscv64-musl': 4.44.1
|
||||
'@rollup/rollup-linux-s390x-gnu': 4.44.1
|
||||
'@rollup/rollup-linux-x64-gnu': 4.44.1
|
||||
'@rollup/rollup-linux-x64-musl': 4.44.1
|
||||
'@rollup/rollup-win32-arm64-msvc': 4.44.1
|
||||
'@rollup/rollup-win32-ia32-msvc': 4.44.1
|
||||
'@rollup/rollup-win32-x64-msvc': 4.44.1
|
||||
fsevents: 2.3.3
|
||||
|
||||
safe-stable-stringify@2.5.0: {}
|
||||
@@ -1833,7 +1771,7 @@ snapshots:
|
||||
empathic: 1.1.0
|
||||
hookable: 5.5.3
|
||||
rolldown: 1.0.0-beta.9
|
||||
rolldown-plugin-dts: 0.13.12(rolldown@1.0.0-beta.9)(typescript@5.8.3)
|
||||
rolldown-plugin-dts: 0.13.13(rolldown@1.0.0-beta.9)(typescript@5.8.3)
|
||||
semver: 7.7.2
|
||||
tinyexec: 1.0.1
|
||||
tinyglobby: 0.2.14
|
||||
@@ -1870,13 +1808,13 @@ snapshots:
|
||||
|
||||
uuid@11.1.0: {}
|
||||
|
||||
vite-node@3.2.4(@types/node@22.15.33)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0):
|
||||
vite-node@3.2.4(@types/node@22.15.34)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0):
|
||||
dependencies:
|
||||
cac: 6.7.14
|
||||
debug: 4.4.1
|
||||
es-module-lexer: 1.7.0
|
||||
pathe: 2.0.3
|
||||
vite: 7.0.0(@types/node@22.15.33)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
|
||||
vite: 7.0.0(@types/node@22.15.34)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
|
||||
transitivePeerDependencies:
|
||||
- '@types/node'
|
||||
- jiti
|
||||
@@ -1891,26 +1829,26 @@ snapshots:
|
||||
- tsx
|
||||
- yaml
|
||||
|
||||
vite@7.0.0(@types/node@22.15.33)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0):
|
||||
vite@7.0.0(@types/node@22.15.34)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0):
|
||||
dependencies:
|
||||
esbuild: 0.25.5
|
||||
fdir: 6.4.6(picomatch@4.0.2)
|
||||
picomatch: 4.0.2
|
||||
postcss: 8.5.6
|
||||
rollup: 4.44.0
|
||||
rollup: 4.44.1
|
||||
tinyglobby: 0.2.14
|
||||
optionalDependencies:
|
||||
'@types/node': 22.15.33
|
||||
'@types/node': 22.15.34
|
||||
fsevents: 2.3.3
|
||||
jiti: 2.4.2
|
||||
tsx: 4.20.3
|
||||
yaml: 2.8.0
|
||||
|
||||
vitest@3.2.4(@types/node@22.15.33)(happy-dom@17.6.3)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0):
|
||||
vitest@3.2.4(@types/node@22.15.34)(happy-dom@17.6.3)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0):
|
||||
dependencies:
|
||||
'@types/chai': 5.2.2
|
||||
'@vitest/expect': 3.2.4
|
||||
'@vitest/mocker': 3.2.4(vite@7.0.0(@types/node@22.15.33)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0))
|
||||
'@vitest/mocker': 3.2.4(vite@7.0.0(@types/node@22.15.34)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0))
|
||||
'@vitest/pretty-format': 3.2.4
|
||||
'@vitest/runner': 3.2.4
|
||||
'@vitest/snapshot': 3.2.4
|
||||
@@ -1928,11 +1866,11 @@ snapshots:
|
||||
tinyglobby: 0.2.14
|
||||
tinypool: 1.1.1
|
||||
tinyrainbow: 2.0.0
|
||||
vite: 7.0.0(@types/node@22.15.33)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
|
||||
vite-node: 3.2.4(@types/node@22.15.33)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
|
||||
vite: 7.0.0(@types/node@22.15.34)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
|
||||
vite-node: 3.2.4(@types/node@22.15.34)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
|
||||
why-is-node-running: 2.3.0
|
||||
optionalDependencies:
|
||||
'@types/node': 22.15.33
|
||||
'@types/node': 22.15.34
|
||||
happy-dom: 17.6.3
|
||||
transitivePeerDependencies:
|
||||
- jiti
|
||||
@@ -1957,6 +1895,6 @@ snapshots:
|
||||
siginfo: 2.0.0
|
||||
stackback: 0.0.2
|
||||
|
||||
ws@8.18.2: {}
|
||||
ws@8.18.3: {}
|
||||
|
||||
yaml@2.8.0: {}
|
||||
|
||||
Reference in New Issue
Block a user