diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 0000000..16c180f --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [], + "snapshot": { + "useCalculatedVersion": true, + "prereleaseTemplate": "{tag}-{datetime}-{commit}" + } +} diff --git a/.changeset/polite-ends-drive.md b/.changeset/polite-ends-drive.md new file mode 100644 index 0000000..e1937ef --- /dev/null +++ b/.changeset/polite-ends-drive.md @@ -0,0 +1,6 @@ +--- +"@upstash/box-cli": minor +"@upstash/box": minor +--- + +Initalize SDK and CLI diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml new file mode 100644 index 0000000..c23f7bb --- /dev/null +++ b/.github/workflows/canary.yml @@ -0,0 +1,75 @@ +name: Canary Release + +on: + workflow_dispatch: + inputs: + package: + description: Package to release + required: true + type: choice + options: + - "@upstash/box" + - "@upstash/box-cli" + +jobs: + canary: + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + with: + version: 10 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: pnpm + + - run: pnpm install --frozen-lockfile + + - name: Version snapshot + run: pnpm changeset version --snapshot canary + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Read snapshot version + id: version + run: | + if [ "${{ inputs.package }}" = "@upstash/box" ]; then + PKG_DIR="packages/sdk" + else + PKG_DIR="packages/cli" + fi + VERSION=$(node -p "require('./${PKG_DIR}/package.json').version") + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + echo "Snapshot version: $VERSION" + + - run: pnpm build + + - name: Create GitHub prerelease + run: | + TAG="${{ inputs.package }}@${{ steps.version.outputs.version }}" + gh release create "$TAG" \ + --prerelease \ + --target "${{ github.sha }}" \ + --title "$TAG" \ + --generate-notes + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Create release metadata + run: | + jq -n \ + --arg name "${{ inputs.package }}" \ + --arg version "${{ steps.version.outputs.version }}" \ + '{packages: [{name: $name, version: $version}], prerelease: true}' > release-meta.json + + - name: Upload release metadata + uses: actions/upload-artifact@v4 + with: + name: release-meta + path: release-meta.json diff --git a/.github/workflows/changeset.yml b/.github/workflows/changeset.yml new file mode 100644 index 0000000..9b780f3 --- /dev/null +++ b/.github/workflows/changeset.yml @@ -0,0 +1,55 @@ +name: Changeset + +on: + push: + branches: [main] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: false + +jobs: + release: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + with: + version: 10 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: pnpm + + - run: pnpm install --frozen-lockfile + + - run: pnpm build + + - uses: changesets/action@v1 + id: changesets + with: + version: pnpm ci:version + publish: pnpm ci:tag + createGithubReleases: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Create release metadata + if: steps.changesets.outputs.published == 'true' + run: | + echo "$PUBLISHED" | jq '{packages: ., prerelease: false}' > release-meta.json + env: + PUBLISHED: ${{ steps.changesets.outputs.publishedPackages }} + + - name: Upload release metadata + if: steps.changesets.outputs.published == 'true' + uses: actions/upload-artifact@v4 + with: + name: release-meta + path: release-meta.json diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml new file mode 100644 index 0000000..68b8b06 --- /dev/null +++ b/.github/workflows/npm-publish.yml @@ -0,0 +1,106 @@ +name: npm Publish + +on: + workflow_run: + workflows: ["Changeset", "Canary Release"] + types: [completed] + +permissions: + id-token: write + contents: read + actions: read + +jobs: + load: + if: github.event.workflow_run.conclusion == 'success' + runs-on: ubuntu-latest + outputs: + packages: ${{ steps.meta.outputs.packages }} + prerelease: ${{ steps.meta.outputs.prerelease }} + has_packages: ${{ steps.meta.outputs.has_packages }} + + steps: + - name: Download release metadata + id: download + uses: actions/download-artifact@v4 + with: + name: release-meta + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + continue-on-error: true + + - name: Read metadata + id: meta + run: | + if [ -f release-meta.json ]; then + echo "has_packages=true" >> "$GITHUB_OUTPUT" + echo "packages=$(jq -c '.packages' release-meta.json)" >> "$GITHUB_OUTPUT" + echo "prerelease=$(jq -r '.prerelease' release-meta.json)" >> "$GITHUB_OUTPUT" + else + echo "has_packages=false" >> "$GITHUB_OUTPUT" + echo "packages=[]" >> "$GITHUB_OUTPUT" + echo "prerelease=false" >> "$GITHUB_OUTPUT" + fi + + publish: + needs: load + if: needs.load.outputs.has_packages == 'true' + runs-on: ubuntu-latest + strategy: + matrix: + package: ${{ fromJson(needs.load.outputs.packages) }} + + steps: + - name: Parse package info + id: parse + run: | + PACKAGE="${{ matrix.package.name }}" + VERSION="${{ matrix.package.version }}" + + if [ "$PACKAGE" = "@upstash/box" ]; then + PKG_DIR="packages/sdk" + elif [ "$PACKAGE" = "@upstash/box-cli" ]; then + PKG_DIR="packages/cli" + else + echo "Unknown package: $PACKAGE" + exit 1 + fi + + echo "package=$PACKAGE" >> "$GITHUB_OUTPUT" + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + echo "pkg_dir=$PKG_DIR" >> "$GITHUB_OUTPUT" + echo "Package: $PACKAGE @ $VERSION (dir: $PKG_DIR)" + + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.workflow_run.head_sha }} + + - uses: pnpm/action-setup@v4 + with: + version: 10 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: pnpm + registry-url: https://registry.npmjs.org + + - run: pnpm install --frozen-lockfile + + - name: Set version + run: npm version "${{ steps.parse.outputs.version }}" --no-git-tag-version + working-directory: ${{ steps.parse.outputs.pkg_dir }} + + - run: pnpm build + + - name: Publish (canary) + if: needs.load.outputs.prerelease == 'true' + run: pnpm --filter "${{ steps.parse.outputs.package }}" publish --tag canary --no-git-checks --access public + env: + NPM_CONFIG_PROVENANCE: "true" + + - name: Publish (stable) + if: needs.load.outputs.prerelease != 'true' + run: pnpm --filter "${{ steps.parse.outputs.package }}" publish --no-git-checks --access public + env: + NPM_CONFIG_PROVENANCE: "true" diff --git a/README.md b/README.md index 91f7e6c..032d27a 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ TypeScript SDK and CLI for [Upstash Box](https://upstash.com/docs/box) — sandb | Package | Description | |---------|-------------| -| [`@buggyhunter/box`](./packages/sdk) | TypeScript SDK — programmatic access to the Box API | +| [`@upstash/box`](./packages/sdk) | TypeScript SDK — programmatic access to the Box API | | [`@upstash/box-cli`](./packages/cli) | CLI — REPL-first terminal interface wrapping the SDK | ## Quick start @@ -27,7 +27,7 @@ pnpm dev ``` . ├── packages/ -│ ├── sdk/ # @buggyhunter/box — TypeScript SDK +│ ├── sdk/ # @upstash/box — TypeScript SDK │ │ ├── src/ │ │ └── examples/ │ └── cli/ # @upstash/box-cli — CLI + interactive REPL @@ -69,6 +69,35 @@ cd packages/sdk && pnpm test cd packages/cli && pnpm test ``` +## Releasing + +This repo uses [Changesets](https://github.com/changesets/changesets) for versioning and automated npm publishing via OIDC. + +### Stable release + +1. Create a changeset while working on your feature: + ```bash + pnpm changeset + ``` +2. Merge your PR to `main`. The **Changeset** workflow creates a "Version Packages" PR that bumps versions and updates changelogs. +3. Merge the version PR. The workflow tags the release, creates a GitHub Release, and triggers **npm Publish** which publishes to npm. + +### Canary release + +1. Go to **Actions → Canary Release → Run workflow**, pick a package and branch. +2. The workflow creates a snapshot version (e.g. `0.2.0-canary-20260219131415-abc1234`), publishes to npm under the `canary` tag, and creates a GitHub prerelease. + +### Workflows + +| Workflow | Trigger | Purpose | +|----------|---------|---------| +| `ci.yml` | PR + push to main | Build and test (Node 18/20/22) | +| `changeset.yml` | Push to main | Version PR or tag + GitHub Release | +| `canary.yml` | Manual dispatch | Snapshot version + GitHub prerelease | +| `npm-publish.yml` | `workflow_run` (after changeset/canary) | Publish to npm with OIDC provenance | + +`npm-publish.yml` is the sole npm trusted publisher — configure it on npmjs.com for both packages. No npm tokens or PATs required. + ## Requirements - Node.js >= 18 diff --git a/package.json b/package.json index 9fd8161..dcaff73 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,16 @@ "build": "pnpm -r build", "dev": "pnpm -r --parallel dev", "test": "vitest run", - "test:integration": "vitest run -c packages/sdk/vitest.integration.config.ts" + "test:integration": "vitest run -c packages/sdk/vitest.integration.config.ts", + "changeset": "changeset", + "ci:version": "changeset version", + "ci:tag": "changeset tag" }, "engines": { "node": ">=18.0.0" }, "devDependencies": { + "@changesets/cli": "^2.29.4", "dotenv": "^17.3.1", "vitest": "^4.0.18" } diff --git a/packages/cli/package.json b/packages/cli/package.json index e32ad82..6c78ac8 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@upstash/box-cli", - "version": "0.1.0", + "version": "0.0.0", "description": "CLI for Upstash Box — REPL-first interface for AI coding agents", "type": "module", "bin": { @@ -21,7 +21,7 @@ "author": "Upstash", "license": "MIT", "dependencies": { - "@buggyhunter/box": "workspace:*", + "@upstash/box": "workspace:*", "commander": "^13.0.0", "dotenv": "^17.3.1" }, @@ -29,6 +29,12 @@ "@types/node": "^20.10.0", "typescript": "^5.3.0" }, + "publishConfig": { + "access": "public" + }, + "files": [ + "dist" + ], "engines": { "node": ">=18.0.0" } diff --git a/packages/cli/src/__tests__/commands/connect.test.ts b/packages/cli/src/__tests__/commands/connect.test.ts index 83ef95f..0ebaca6 100644 --- a/packages/cli/src/__tests__/commands/connect.test.ts +++ b/packages/cli/src/__tests__/commands/connect.test.ts @@ -1,7 +1,7 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; import { connectCommand } from "../../commands/connect.js"; -vi.mock("@buggyhunter/box", () => ({ +vi.mock("@upstash/box", () => ({ Box: { get: vi.fn(), list: vi.fn(), @@ -16,7 +16,7 @@ vi.mock("../../auth.js", () => ({ resolveToken: vi.fn((token?: string) => token ?? "resolved-token"), })); -import { Box } from "@buggyhunter/box"; +import { Box } from "@upstash/box"; import { startRepl } from "../../repl.js"; describe("connectCommand", () => { diff --git a/packages/cli/src/__tests__/commands/create.test.ts b/packages/cli/src/__tests__/commands/create.test.ts index 8d2c5cb..e63a2d6 100644 --- a/packages/cli/src/__tests__/commands/create.test.ts +++ b/packages/cli/src/__tests__/commands/create.test.ts @@ -1,7 +1,7 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; import { createCommand } from "../../commands/create.js"; -vi.mock("@buggyhunter/box", () => ({ +vi.mock("@upstash/box", () => ({ Box: { create: vi.fn(), }, @@ -15,7 +15,7 @@ vi.mock("../../auth.js", () => ({ resolveToken: vi.fn((token?: string) => token ?? "resolved-token"), })); -import { Box } from "@buggyhunter/box"; +import { Box } from "@upstash/box"; import { startRepl } from "../../repl.js"; describe("createCommand", () => { diff --git a/packages/cli/src/__tests__/commands/from-snapshot.test.ts b/packages/cli/src/__tests__/commands/from-snapshot.test.ts index 253a085..9f9dc36 100644 --- a/packages/cli/src/__tests__/commands/from-snapshot.test.ts +++ b/packages/cli/src/__tests__/commands/from-snapshot.test.ts @@ -1,7 +1,7 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; import { fromSnapshotCommand } from "../../commands/from-snapshot.js"; -vi.mock("@buggyhunter/box", () => ({ +vi.mock("@upstash/box", () => ({ Box: { fromSnapshot: vi.fn(), }, @@ -15,7 +15,7 @@ vi.mock("../../auth.js", () => ({ resolveToken: vi.fn((token?: string) => token ?? "resolved-token"), })); -import { Box } from "@buggyhunter/box"; +import { Box } from "@upstash/box"; import { startRepl } from "../../repl.js"; describe("fromSnapshotCommand", () => { diff --git a/packages/cli/src/__tests__/commands/get.test.ts b/packages/cli/src/__tests__/commands/get.test.ts index 9547f5d..e88501c 100644 --- a/packages/cli/src/__tests__/commands/get.test.ts +++ b/packages/cli/src/__tests__/commands/get.test.ts @@ -1,7 +1,7 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; import { getCommand } from "../../commands/get.js"; -vi.mock("@buggyhunter/box", () => ({ +vi.mock("@upstash/box", () => ({ Box: { get: vi.fn(), }, @@ -11,7 +11,7 @@ vi.mock("../../auth.js", () => ({ resolveToken: vi.fn((token?: string) => token ?? "resolved-token"), })); -import { Box } from "@buggyhunter/box"; +import { Box } from "@upstash/box"; describe("getCommand", () => { let logSpy: ReturnType; diff --git a/packages/cli/src/__tests__/commands/list.test.ts b/packages/cli/src/__tests__/commands/list.test.ts index d417b04..d723c9b 100644 --- a/packages/cli/src/__tests__/commands/list.test.ts +++ b/packages/cli/src/__tests__/commands/list.test.ts @@ -1,7 +1,7 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; import { listCommand } from "../../commands/list.js"; -vi.mock("@buggyhunter/box", () => ({ +vi.mock("@upstash/box", () => ({ Box: { list: vi.fn(), }, @@ -11,7 +11,7 @@ vi.mock("../../auth.js", () => ({ resolveToken: vi.fn((token?: string) => token ?? "resolved-token"), })); -import { Box } from "@buggyhunter/box"; +import { Box } from "@upstash/box"; describe("listCommand", () => { let logSpy: ReturnType; diff --git a/packages/cli/src/commands/connect.ts b/packages/cli/src/commands/connect.ts index 9ab26b7..6ee5f09 100644 --- a/packages/cli/src/commands/connect.ts +++ b/packages/cli/src/commands/connect.ts @@ -1,4 +1,4 @@ -import { Box } from "@buggyhunter/box"; +import { Box } from "@upstash/box"; import { resolveToken } from "../auth.js"; import { startRepl } from "../repl.js"; diff --git a/packages/cli/src/commands/create.ts b/packages/cli/src/commands/create.ts index 9bb4447..f56f2f3 100644 --- a/packages/cli/src/commands/create.ts +++ b/packages/cli/src/commands/create.ts @@ -1,4 +1,4 @@ -import { Box } from "@buggyhunter/box"; +import { Box } from "@upstash/box"; import { resolveToken } from "../auth.js"; import { startRepl } from "../repl.js"; diff --git a/packages/cli/src/commands/from-snapshot.ts b/packages/cli/src/commands/from-snapshot.ts index e49e43d..d1587cf 100644 --- a/packages/cli/src/commands/from-snapshot.ts +++ b/packages/cli/src/commands/from-snapshot.ts @@ -1,4 +1,4 @@ -import { Box } from "@buggyhunter/box"; +import { Box } from "@upstash/box"; import { resolveToken } from "../auth.js"; import { startRepl } from "../repl.js"; diff --git a/packages/cli/src/commands/get.ts b/packages/cli/src/commands/get.ts index fc10c5e..63cf0fc 100644 --- a/packages/cli/src/commands/get.ts +++ b/packages/cli/src/commands/get.ts @@ -1,4 +1,4 @@ -import { Box } from "@buggyhunter/box"; +import { Box } from "@upstash/box"; import { resolveToken } from "../auth.js"; import { formatJSON } from "../output.js"; diff --git a/packages/cli/src/commands/list.ts b/packages/cli/src/commands/list.ts index 2c540c4..660b1fa 100644 --- a/packages/cli/src/commands/list.ts +++ b/packages/cli/src/commands/list.ts @@ -1,4 +1,4 @@ -import { Box } from "@buggyhunter/box"; +import { Box } from "@upstash/box"; import { resolveToken } from "../auth.js"; import { formatJSON } from "../output.js"; diff --git a/packages/cli/src/repl-commands/delete.ts b/packages/cli/src/repl-commands/delete.ts index 58a57b6..eb8680c 100644 --- a/packages/cli/src/repl-commands/delete.ts +++ b/packages/cli/src/repl-commands/delete.ts @@ -1,4 +1,4 @@ -import type { Box } from "@buggyhunter/box"; +import type { Box } from "@upstash/box"; /** * Delete the box. Returns true to signal the REPL to exit. diff --git a/packages/cli/src/repl-commands/exec.ts b/packages/cli/src/repl-commands/exec.ts index 11f75da..601196e 100644 --- a/packages/cli/src/repl-commands/exec.ts +++ b/packages/cli/src/repl-commands/exec.ts @@ -1,4 +1,4 @@ -import type { Box } from "@buggyhunter/box"; +import type { Box } from "@upstash/box"; /** * Execute a shell command in the box. diff --git a/packages/cli/src/repl-commands/files.ts b/packages/cli/src/repl-commands/files.ts index 096cbaf..4be7971 100644 --- a/packages/cli/src/repl-commands/files.ts +++ b/packages/cli/src/repl-commands/files.ts @@ -1,4 +1,4 @@ -import type { Box } from "@buggyhunter/box"; +import type { Box } from "@upstash/box"; /** * Handle file subcommands: read, write, list, upload, download. diff --git a/packages/cli/src/repl-commands/git.ts b/packages/cli/src/repl-commands/git.ts index 9cf726d..6a5c041 100644 --- a/packages/cli/src/repl-commands/git.ts +++ b/packages/cli/src/repl-commands/git.ts @@ -1,4 +1,4 @@ -import type { Box } from "@buggyhunter/box"; +import type { Box } from "@upstash/box"; /** * Handle git subcommands: clone, diff, create-pr. diff --git a/packages/cli/src/repl-commands/run.ts b/packages/cli/src/repl-commands/run.ts index 3d2eb36..337fe5f 100644 --- a/packages/cli/src/repl-commands/run.ts +++ b/packages/cli/src/repl-commands/run.ts @@ -1,4 +1,4 @@ -import type { Box } from "@buggyhunter/box"; +import type { Box } from "@upstash/box"; /** * Run the agent with a prompt, streaming output to stdout. diff --git a/packages/cli/src/repl-commands/snapshot.ts b/packages/cli/src/repl-commands/snapshot.ts index 5651676..16fe309 100644 --- a/packages/cli/src/repl-commands/snapshot.ts +++ b/packages/cli/src/repl-commands/snapshot.ts @@ -1,4 +1,4 @@ -import type { Box } from "@buggyhunter/box"; +import type { Box } from "@upstash/box"; /** * Create a snapshot of the current box state. diff --git a/packages/cli/src/repl-commands/stop.ts b/packages/cli/src/repl-commands/stop.ts index 323832c..f5ffd19 100644 --- a/packages/cli/src/repl-commands/stop.ts +++ b/packages/cli/src/repl-commands/stop.ts @@ -1,4 +1,4 @@ -import type { Box } from "@buggyhunter/box"; +import type { Box } from "@upstash/box"; /** * Stop the box. Returns true to signal the REPL to exit. diff --git a/packages/cli/src/repl.ts b/packages/cli/src/repl.ts index df8454a..16a34cf 100644 --- a/packages/cli/src/repl.ts +++ b/packages/cli/src/repl.ts @@ -1,6 +1,6 @@ import { createInterface } from "node:readline/promises"; import { stdin, stdout } from "node:process"; -import type { Box } from "@buggyhunter/box"; +import type { Box } from "@upstash/box"; import { handleRun } from "./repl-commands/run.js"; import { handleExec } from "./repl-commands/exec.js"; import { handleFiles } from "./repl-commands/files.js"; diff --git a/packages/sdk/README.md b/packages/sdk/README.md index 4dd75f1..905648f 100644 --- a/packages/sdk/README.md +++ b/packages/sdk/README.md @@ -1,17 +1,17 @@ -# @buggyhunter/box +# @upstash/box TypeScript SDK for [Upstash Box](https://upstash.com/docs/box) — create sandboxed AI coding agents with streaming, structured output, file I/O, git operations, and snapshots. ## Installation ```bash -npm install @buggyhunter/box +npm install @upstash/box ``` ## Quick start ```ts -import { Box, Runtime, ClaudeCode } from "@buggyhunter/box"; +import { Box, Runtime, ClaudeCode } from "@upstash/box"; const box = await Box.create({ runtime: Runtime.Node, diff --git a/packages/sdk/examples/advanced.ts b/packages/sdk/examples/advanced.ts index a6a631e..499450e 100644 --- a/packages/sdk/examples/advanced.ts +++ b/packages/sdk/examples/advanced.ts @@ -1,4 +1,4 @@ -import { Box, Runtime, ClaudeCode } from "@buggyhunter/box"; +import { Box, Runtime, ClaudeCode } from "@upstash/box"; import { readdir } from "node:fs/promises"; import { join } from "node:path"; diff --git a/packages/sdk/examples/basic.ts b/packages/sdk/examples/basic.ts index 361267d..1987f3f 100644 --- a/packages/sdk/examples/basic.ts +++ b/packages/sdk/examples/basic.ts @@ -1,4 +1,4 @@ -import { Box, Runtime, ClaudeCode } from "@buggyhunter/box"; +import { Box, Runtime, ClaudeCode } from "@upstash/box"; const box = await Box.create({ apiKey: process.env.UPSTASH_BOX_API_KEY!, diff --git a/packages/sdk/examples/code-review.ts b/packages/sdk/examples/code-review.ts index 71f7efd..7ee2d1f 100644 --- a/packages/sdk/examples/code-review.ts +++ b/packages/sdk/examples/code-review.ts @@ -1,4 +1,4 @@ -import { Box, Runtime, ClaudeCode } from "@buggyhunter/box"; +import { Box, Runtime, ClaudeCode } from "@upstash/box"; // Clone a repo, run a code review, and get a structured report. diff --git a/packages/sdk/examples/delete-all.ts b/packages/sdk/examples/delete-all.ts index 46fa551..060df4b 100644 --- a/packages/sdk/examples/delete-all.ts +++ b/packages/sdk/examples/delete-all.ts @@ -1,4 +1,4 @@ -import { Box } from "@buggyhunter/box"; +import { Box } from "@upstash/box"; const boxes = await Box.list({ apiKey: process.env.UPSTASH_BOX_API_KEY!, diff --git a/packages/sdk/examples/env-vars.ts b/packages/sdk/examples/env-vars.ts index f3b12bf..86daca1 100644 --- a/packages/sdk/examples/env-vars.ts +++ b/packages/sdk/examples/env-vars.ts @@ -4,7 +4,7 @@ * Usage: * UPSTASH_BOX_API_KEY=abx_... ANTHROPIC_API_KEY=sk-... npx tsx examples/env-vars.ts */ -import { Box, ClaudeCode } from "@buggyhunter/box"; +import { Box, ClaudeCode } from "@upstash/box"; const box = await Box.create({ apiKey: process.env.UPSTASH_BOX_API_KEY, diff --git a/packages/sdk/examples/file-processing.ts b/packages/sdk/examples/file-processing.ts index 5889df9..860a353 100644 --- a/packages/sdk/examples/file-processing.ts +++ b/packages/sdk/examples/file-processing.ts @@ -1,4 +1,4 @@ -import { Box, Runtime, ClaudeCode } from "@buggyhunter/box"; +import { Box, Runtime, ClaudeCode } from "@upstash/box"; import { readdir } from "node:fs/promises"; import { join } from "node:path"; diff --git a/packages/sdk/examples/file-upload.ts b/packages/sdk/examples/file-upload.ts index 6a2aa06..adf33d7 100644 --- a/packages/sdk/examples/file-upload.ts +++ b/packages/sdk/examples/file-upload.ts @@ -5,7 +5,7 @@ * UPSTASH_BOX_API_KEY=abx_... ANTHROPIC_API_KEY=sk-... npx tsx examples/file-upload.ts */ import { writeFileSync, mkdirSync } from "node:fs"; -import { Box, ClaudeCode } from "@buggyhunter/box"; +import { Box, ClaudeCode } from "@upstash/box"; // Create a temp file to upload mkdirSync("/tmp/box-demo", { recursive: true }); diff --git a/packages/sdk/examples/git-pr.ts b/packages/sdk/examples/git-pr.ts index 90e08ff..6d7c758 100644 --- a/packages/sdk/examples/git-pr.ts +++ b/packages/sdk/examples/git-pr.ts @@ -1,4 +1,4 @@ -import { Box, Runtime, ClaudeCode } from "@buggyhunter/box"; +import { Box, Runtime, ClaudeCode } from "@upstash/box"; // Clone a repo, upload files, make changes with AI, and open a pull request. diff --git a/packages/sdk/examples/history-test.ts b/packages/sdk/examples/history-test.ts index 4f15901..70758ae 100644 --- a/packages/sdk/examples/history-test.ts +++ b/packages/sdk/examples/history-test.ts @@ -5,7 +5,7 @@ * Usage: * UPSTASH_BOX_API_KEY=abx_... CLAUDE_KEY=sk-... npx tsx examples/history-test.ts */ -import { Box, ClaudeCode, Runtime } from "@buggyhunter/box"; +import { Box, ClaudeCode, Runtime } from "@upstash/box"; const PROMPTS = [ "Create a file called /workspace/home/hello.ts with a function that returns 'Hello, World!'", diff --git a/packages/sdk/examples/index.ts b/packages/sdk/examples/index.ts index 3f19222..3c86f0f 100644 --- a/packages/sdk/examples/index.ts +++ b/packages/sdk/examples/index.ts @@ -1,4 +1,4 @@ -import { Box, Runtime, ClaudeCode } from "@buggyhunter/box"; +import { Box, Runtime, ClaudeCode } from "@upstash/box"; const box = await Box.create({ apiKey: process.env.UPSTASH_BOX_API_KEY!, diff --git a/packages/sdk/examples/load-test.ts b/packages/sdk/examples/load-test.ts index c1da8fc..2530d1b 100644 --- a/packages/sdk/examples/load-test.ts +++ b/packages/sdk/examples/load-test.ts @@ -4,7 +4,7 @@ * Usage: * UPSTASH_BOX_API_KEY=abx_... CLAUDE_KEY=sk-... npx tsx examples/load-test.ts */ -import { Box, ClaudeCode, Runtime } from "@buggyhunter/box"; +import { Box, ClaudeCode, Runtime } from "@upstash/box"; const BOX_COUNT = 100; const CONCURRENCY = 10; // create in batches to avoid overwhelming the API diff --git a/packages/sdk/examples/mcp-skills.ts b/packages/sdk/examples/mcp-skills.ts index 17773e7..814f402 100644 --- a/packages/sdk/examples/mcp-skills.ts +++ b/packages/sdk/examples/mcp-skills.ts @@ -1,4 +1,4 @@ -import { Box, Runtime, ClaudeCode } from "@buggyhunter/box"; +import { Box, Runtime, ClaudeCode } from "@upstash/box"; // Create a box with MCP servers and Context7 skills. diff --git a/packages/sdk/examples/multi-runtime.ts b/packages/sdk/examples/multi-runtime.ts index e783635..c3a63a7 100644 --- a/packages/sdk/examples/multi-runtime.ts +++ b/packages/sdk/examples/multi-runtime.ts @@ -4,7 +4,7 @@ * Usage: * UPSTASH_BOX_API_KEY=abx_... ANTHROPIC_API_KEY=sk-... npx tsx examples/multi-runtime.ts */ -import { Box, ClaudeCode } from "@buggyhunter/box"; +import { Box, ClaudeCode } from "@upstash/box"; const runtimes = ["node", "python", "golang"] as const; const prompt = "Write a program that generates the first 20 Fibonacci numbers and prints them. Use only the standard library."; diff --git a/packages/sdk/examples/multi-turn.ts b/packages/sdk/examples/multi-turn.ts index e0c0921..bb67acb 100644 --- a/packages/sdk/examples/multi-turn.ts +++ b/packages/sdk/examples/multi-turn.ts @@ -1,4 +1,4 @@ -import { Box, Runtime, ClaudeCode } from "@buggyhunter/box"; +import { Box, Runtime, ClaudeCode } from "@upstash/box"; // Multiple turns on the same box — each run builds on the previous context. diff --git a/packages/sdk/examples/openai-codex-files.ts b/packages/sdk/examples/openai-codex-files.ts index c059806..f27b7b4 100644 --- a/packages/sdk/examples/openai-codex-files.ts +++ b/packages/sdk/examples/openai-codex-files.ts @@ -1,4 +1,4 @@ -import { Box, Runtime, OpenAICodex } from "@buggyhunter/box"; +import { Box, Runtime, OpenAICodex } from "@upstash/box"; const box = await Box.create({ apiKey: process.env.UPSTASH_BOX_API_KEY!, diff --git a/packages/sdk/examples/openai-codex.ts b/packages/sdk/examples/openai-codex.ts index 2dd8096..3eb1c93 100644 --- a/packages/sdk/examples/openai-codex.ts +++ b/packages/sdk/examples/openai-codex.ts @@ -1,4 +1,4 @@ -import { Box, Runtime, OpenAICodex } from "@buggyhunter/box"; +import { Box, Runtime, OpenAICodex } from "@upstash/box"; // Use OpenAI Codex instead of Claude Code. // The only difference is the model enum and the API key — everything else is identical. diff --git a/packages/sdk/examples/package.json b/packages/sdk/examples/package.json index febd40e..21656bd 100644 --- a/packages/sdk/examples/package.json +++ b/packages/sdk/examples/package.json @@ -3,6 +3,6 @@ "private": true, "type": "module", "dependencies": { - "@buggyhunter/box": "latest" + "@upstash/box": "latest" } } diff --git a/packages/sdk/examples/parallel-boxes.ts b/packages/sdk/examples/parallel-boxes.ts index 8a47a20..8670ab2 100644 --- a/packages/sdk/examples/parallel-boxes.ts +++ b/packages/sdk/examples/parallel-boxes.ts @@ -1,4 +1,4 @@ -import { Box, Runtime, ClaudeCode } from "@buggyhunter/box"; +import { Box, Runtime, ClaudeCode } from "@upstash/box"; // Spin up multiple boxes in parallel to process different tasks concurrently. diff --git a/packages/sdk/examples/run-tracking.ts b/packages/sdk/examples/run-tracking.ts index 6d12b7e..7725a18 100644 --- a/packages/sdk/examples/run-tracking.ts +++ b/packages/sdk/examples/run-tracking.ts @@ -1,4 +1,4 @@ -import { Box, Runtime, ClaudeCode } from "@buggyhunter/box"; +import { Box, Runtime, ClaudeCode } from "@upstash/box"; const box = await Box.create({ apiKey: process.env.UPSTASH_BOX_API_KEY!, diff --git a/packages/sdk/examples/session-test.ts b/packages/sdk/examples/session-test.ts index afd06bf..14f7456 100644 --- a/packages/sdk/examples/session-test.ts +++ b/packages/sdk/examples/session-test.ts @@ -1,4 +1,4 @@ -import { Box, Runtime, ClaudeCode } from "@buggyhunter/box"; +import { Box, Runtime, ClaudeCode } from "@upstash/box"; // Test that conversation history persists across multiple prompts. diff --git a/packages/sdk/examples/snapshot-restore.ts b/packages/sdk/examples/snapshot-restore.ts index 224f75d..4dd6552 100644 --- a/packages/sdk/examples/snapshot-restore.ts +++ b/packages/sdk/examples/snapshot-restore.ts @@ -5,7 +5,7 @@ * Usage: * UPSTASH_BOX_API_KEY=abx_... ANTHROPIC_API_KEY=sk-... npx tsx examples/snapshot-restore.ts */ -import { Box, ClaudeCode } from "@buggyhunter/box"; +import { Box, ClaudeCode } from "@upstash/box"; const agentConfig = { model: ClaudeCode.Sonnet_4_5 as const, diff --git a/packages/sdk/examples/snapshots.ts b/packages/sdk/examples/snapshots.ts index 950a6fe..42208d7 100644 --- a/packages/sdk/examples/snapshots.ts +++ b/packages/sdk/examples/snapshots.ts @@ -1,4 +1,4 @@ -import { Box, Runtime, ClaudeCode } from "@buggyhunter/box"; +import { Box, Runtime, ClaudeCode } from "@upstash/box"; const config = { apiKey: process.env.UPSTASH_BOX_API_KEY!, diff --git a/packages/sdk/examples/streaming.ts b/packages/sdk/examples/streaming.ts index 7d14618..076ab18 100644 --- a/packages/sdk/examples/streaming.ts +++ b/packages/sdk/examples/streaming.ts @@ -1,4 +1,4 @@ -import { Box, Runtime, ClaudeCode } from "@buggyhunter/box"; +import { Box, Runtime, ClaudeCode } from "@upstash/box"; import { readdir } from "node:fs/promises"; import { z } from "zod"; diff --git a/packages/sdk/examples/structured-output.ts b/packages/sdk/examples/structured-output.ts index 5c1ca04..2f9e678 100644 --- a/packages/sdk/examples/structured-output.ts +++ b/packages/sdk/examples/structured-output.ts @@ -5,7 +5,7 @@ * UPSTASH_BOX_API_KEY=abx_... ANTHROPIC_API_KEY=sk-... npx tsx examples/structured-output.ts */ import { z } from "zod"; -import { Box, ClaudeCode } from "@buggyhunter/box"; +import { Box, ClaudeCode } from "@upstash/box"; const box = await Box.create({ apiKey: process.env.UPSTASH_BOX_API_KEY, diff --git a/packages/sdk/examples/test-isolation.ts b/packages/sdk/examples/test-isolation.ts index b508a6e..ad9dd5c 100644 --- a/packages/sdk/examples/test-isolation.ts +++ b/packages/sdk/examples/test-isolation.ts @@ -1,4 +1,4 @@ -import { Box, Runtime, ClaudeCode } from "@buggyhunter/box"; +import { Box, Runtime, ClaudeCode } from "@upstash/box"; // Test workspace isolation: /workspace is root-only, /workspace/home is user workspace. // This example verifies that users can't read/write outside /workspace/home. diff --git a/packages/sdk/examples/tool-use.ts b/packages/sdk/examples/tool-use.ts index 38efacf..764b2d4 100644 --- a/packages/sdk/examples/tool-use.ts +++ b/packages/sdk/examples/tool-use.ts @@ -5,7 +5,7 @@ * Usage: * UPSTASH_BOX_API_KEY=abx_... ANTHROPIC_API_KEY=sk-... npx tsx examples/tool-use.ts */ -import { Box, ClaudeCode } from "@buggyhunter/box"; +import { Box, ClaudeCode } from "@upstash/box"; const box = await Box.create({ apiKey: process.env.UPSTASH_BOX_API_KEY, diff --git a/packages/sdk/examples/webhook.ts b/packages/sdk/examples/webhook.ts index 4d89887..261fe12 100644 --- a/packages/sdk/examples/webhook.ts +++ b/packages/sdk/examples/webhook.ts @@ -9,8 +9,8 @@ * UPSTASH_BOX_API_KEY=abx_... CLAUDE_KEY=sk-... npx tsx examples/webhook.ts */ import { createServer } from "node:http"; -import { Box, ClaudeCode, Runtime } from "@buggyhunter/box"; -import type { WebhookPayload } from "@buggyhunter/box"; +import { Box, ClaudeCode, Runtime } from "@upstash/box"; +import type { WebhookPayload } from "@upstash/box"; const WEBHOOK_PORT = 4567; const WEBHOOK_SECRET = "whsec_test_secret_123"; diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 0e28521..d2e8de1 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { - "name": "@buggyhunter/box", - "version": "0.1.3", + "name": "@upstash/box", + "version": "0.0.0", "description": "Upstash Box SDK - TypeScript client for async and parallel AI coding agents", "type": "module", "main": "dist/index.js", @@ -36,12 +36,14 @@ "author": "Upstash", "license": "MIT", "devDependencies": { - "@buggyhunter/box": "latest", "@types/node": "^20.10.0", "prettier": "^3.8.1", "tsx": "^4.7.0", "typescript": "^5.3.0" }, + "publishConfig": { + "access": "public" + }, "files": [ "dist" ], diff --git a/packages/sdk/src/client.ts b/packages/sdk/src/client.ts index 411495e..8e0288c 100644 --- a/packages/sdk/src/client.ts +++ b/packages/sdk/src/client.ts @@ -168,7 +168,7 @@ export class Run { * * @example * ```ts - * import { Box, Runtime, ClaudeCode } from "@buggyhunter/box"; + * import { Box, Runtime, ClaudeCode } from "@upstash/box"; * * const box = await Box.create({ * runtime: Runtime.Node, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a60c644..0c08494 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: devDependencies: + '@changesets/cli': + specifier: ^2.29.4 + version: 2.29.8(@types/node@20.19.33) dotenv: specifier: ^17.3.1 version: 17.3.1 @@ -17,7 +20,7 @@ importers: packages/cli: dependencies: - '@buggyhunter/box': + '@upstash/box': specifier: workspace:* version: link:../sdk commander: @@ -40,9 +43,6 @@ importers: specifier: ^4.3.6 version: 4.3.6 devDependencies: - '@buggyhunter/box': - specifier: latest - version: 0.1.3 '@types/node': specifier: ^20.10.0 version: 20.19.33 @@ -58,9 +58,64 @@ importers: packages: - '@buggyhunter/box@0.1.3': - resolution: {integrity: sha512-lN7y4/X/33a02ekjGIwubmoKJ79ZFhBL7YijRo9J3ADdEYTGJFg1ZzfGyHESUyGLgvByWnwE+fwfWKyaSD/GEQ==} - engines: {node: '>=18.0.0'} + '@babel/runtime@7.28.6': + resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} + engines: {node: '>=6.9.0'} + + '@changesets/apply-release-plan@7.0.14': + resolution: {integrity: sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA==} + + '@changesets/assemble-release-plan@6.0.9': + resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==} + + '@changesets/changelog-git@0.2.1': + resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} + + '@changesets/cli@2.29.8': + resolution: {integrity: sha512-1weuGZpP63YWUYjay/E84qqwcnt5yJMM0tep10Up7Q5cS/DGe2IZ0Uj3HNMxGhCINZuR7aO9WBMdKnPit5ZDPA==} + hasBin: true + + '@changesets/config@3.1.2': + resolution: {integrity: sha512-CYiRhA4bWKemdYi/uwImjPxqWNpqGPNbEBdX1BdONALFIDK7MCUj6FPkzD+z9gJcvDFUQJn9aDVf4UG7OT6Kog==} + + '@changesets/errors@0.2.0': + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + + '@changesets/get-dependents-graph@2.1.3': + resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} + + '@changesets/get-release-plan@4.0.14': + resolution: {integrity: sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g==} + + '@changesets/get-version-range-type@0.4.0': + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + + '@changesets/git@3.0.4': + resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==} + + '@changesets/logger@0.1.1': + resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} + + '@changesets/parse@0.4.2': + resolution: {integrity: sha512-Uo5MC5mfg4OM0jU3up66fmSn6/NE9INK+8/Vn/7sMVcdWg46zfbvvUSjD9EMonVqPi9fbrJH9SXHn48Tr1f2yA==} + + '@changesets/pre@2.0.2': + resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} + + '@changesets/read@0.6.6': + resolution: {integrity: sha512-P5QaN9hJSQQKJShzzpBT13FzOSPyHbqdoIBUd2DJdgvnECCyO6LmAOWSV+O8se2TaZJVwSXjL+v9yhb+a9JeJg==} + + '@changesets/should-skip-package@0.1.2': + resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} + + '@changesets/types@4.1.0': + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + + '@changesets/types@6.1.0': + resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} + + '@changesets/write@0.4.0': + resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} '@esbuild/aix-ppc64@0.27.3': resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} @@ -218,9 +273,36 @@ packages: cpu: [x64] os: [win32] + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@manypkg/find-root@1.1.0': + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + + '@manypkg/get-packages@1.1.3': + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + '@rollup/rollup-android-arm-eabi@4.57.1': resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} cpu: [arm] @@ -371,6 +453,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + '@types/node@20.19.33': resolution: {integrity: sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==} @@ -403,22 +488,71 @@ packages: '@vitest/utils@4.0.18': resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + commander@13.1.0: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dotenv@17.3.1: resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==} engines: {node: '>=12'} + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} @@ -427,6 +561,11 @@ packages: engines: {node: '>=18'} hasBin: true + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -434,6 +573,16 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} + extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -443,6 +592,22 @@ packages: picomatch: optional: true + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -451,9 +616,85 @@ packages: get-tsconfig@4.13.6: resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + human-id@4.1.3: + resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==} + hasBin: true + + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-yaml@3.14.2: + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} + hasBin: true + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -462,46 +703,160 @@ packages: obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + + p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-manager-detector@0.2.11: + resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + picomatch@4.0.3: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + prettier@3.8.1: resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} engines: {node: '>=14'} hasBin: true + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rollup@4.57.1: resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + spawndamnit@3.0.1: + resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -517,6 +872,10 @@ packages: resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + tsx@4.21.0: resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} engines: {node: '>=18.0.0'} @@ -530,6 +889,10 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + vite@7.3.1: resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -604,6 +967,11 @@ packages: jsdom: optional: true + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} @@ -614,9 +982,151 @@ packages: snapshots: - '@buggyhunter/box@0.1.3': + '@babel/runtime@7.28.6': {} + + '@changesets/apply-release-plan@7.0.14': + dependencies: + '@changesets/config': 3.1.2 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.4 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.7.4 + + '@changesets/assemble-release-plan@6.0.9': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + semver: 7.7.4 + + '@changesets/changelog-git@0.2.1': + dependencies: + '@changesets/types': 6.1.0 + + '@changesets/cli@2.29.8(@types/node@20.19.33)': + dependencies: + '@changesets/apply-release-plan': 7.0.14 + '@changesets/assemble-release-plan': 6.0.9 + '@changesets/changelog-git': 0.2.1 + '@changesets/config': 3.1.2 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/get-release-plan': 4.0.14 + '@changesets/git': 3.0.4 + '@changesets/logger': 0.1.1 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.6 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@changesets/write': 0.4.0 + '@inquirer/external-editor': 1.0.3(@types/node@20.19.33) + '@manypkg/get-packages': 1.1.3 + ansi-colors: 4.1.3 + ci-info: 3.9.0 + enquirer: 2.4.1 + fs-extra: 7.0.1 + mri: 1.2.0 + p-limit: 2.3.0 + package-manager-detector: 0.2.11 + picocolors: 1.1.1 + resolve-from: 5.0.0 + semver: 7.7.4 + spawndamnit: 3.0.1 + term-size: 2.2.1 + transitivePeerDependencies: + - '@types/node' + + '@changesets/config@3.1.2': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/logger': 0.1.1 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.8 + + '@changesets/errors@0.2.0': + dependencies: + extendable-error: 0.1.7 + + '@changesets/get-dependents-graph@2.1.3': + dependencies: + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + picocolors: 1.1.1 + semver: 7.7.4 + + '@changesets/get-release-plan@4.0.14': + dependencies: + '@changesets/assemble-release-plan': 6.0.9 + '@changesets/config': 3.1.2 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.6 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/get-version-range-type@0.4.0': {} + + '@changesets/git@3.0.4': dependencies: - zod: 4.3.6 + '@changesets/errors': 0.2.0 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.8 + spawndamnit: 3.0.1 + + '@changesets/logger@0.1.1': + dependencies: + picocolors: 1.1.1 + + '@changesets/parse@0.4.2': + dependencies: + '@changesets/types': 6.1.0 + js-yaml: 4.1.1 + + '@changesets/pre@2.0.2': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + + '@changesets/read@0.6.6': + dependencies: + '@changesets/git': 3.0.4 + '@changesets/logger': 0.1.1 + '@changesets/parse': 0.4.2 + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + p-filter: 2.1.0 + picocolors: 1.1.1 + + '@changesets/should-skip-package@0.1.2': + dependencies: + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/types@4.1.0': {} + + '@changesets/types@6.1.0': {} + + '@changesets/write@0.4.0': + dependencies: + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + human-id: 4.1.3 + prettier: 2.8.8 '@esbuild/aix-ppc64@0.27.3': optional: true @@ -696,8 +1206,43 @@ snapshots: '@esbuild/win32-x64@0.27.3': optional: true + '@inquirer/external-editor@1.0.3(@types/node@20.19.33)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + '@types/node': 20.19.33 + '@jridgewell/sourcemap-codec@1.5.5': {} + '@manypkg/find-root@1.1.0': + dependencies: + '@babel/runtime': 7.28.6 + '@types/node': 12.20.55 + find-up: 4.1.0 + fs-extra: 8.1.0 + + '@manypkg/get-packages@1.1.3': + dependencies: + '@babel/runtime': 7.28.6 + '@changesets/types': 4.1.0 + '@manypkg/find-root': 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + '@rollup/rollup-android-arm-eabi@4.57.1': optional: true @@ -784,6 +1329,8 @@ snapshots: '@types/estree@1.0.8': {} + '@types/node@12.20.55': {} + '@types/node@20.19.33': dependencies: undici-types: 6.21.0 @@ -827,14 +1374,55 @@ snapshots: '@vitest/pretty-format': 4.0.18 tinyrainbow: 3.0.3 + ansi-colors@4.1.3: {} + + ansi-regex@5.0.1: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-union@2.1.0: {} + assertion-error@2.0.1: {} + better-path-resolve@1.0.0: + dependencies: + is-windows: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + chai@6.2.2: {} + chardet@2.1.1: {} + + ci-info@3.9.0: {} + commander@13.1.0: {} + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + detect-indent@6.1.0: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + dotenv@17.3.1: {} + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + es-module-lexer@1.7.0: {} esbuild@0.27.3: @@ -866,16 +1454,53 @@ snapshots: '@esbuild/win32-ia32': 0.27.3 '@esbuild/win32-x64': 0.27.3 + esprima@4.0.1: {} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.8 expect-type@1.3.0: {} + extendable-error@0.1.7: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + fsevents@2.3.3: optional: true @@ -883,30 +1508,146 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + graceful-fs@4.2.11: {} + + human-id@4.1.3: {} + + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + + ignore@5.3.2: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-subdir@1.2.0: + dependencies: + better-path-resolve: 1.0.0 + + is-windows@1.0.2: {} + + isexe@2.0.0: {} + + js-yaml@3.14.2: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + lodash.startcase@4.4.0: {} + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mri@1.2.0: {} + nanoid@3.3.11: {} obug@2.1.1: {} + outdent@0.5.0: {} + + p-filter@2.1.0: + dependencies: + p-map: 2.1.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-map@2.1.0: {} + + p-try@2.2.0: {} + + package-manager-detector@0.2.11: + dependencies: + quansync: 0.2.11 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-type@4.0.0: {} + pathe@2.0.3: {} picocolors@1.1.1: {} + picomatch@2.3.1: {} + picomatch@4.0.3: {} + pify@4.0.1: {} + postcss@8.5.6: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 + prettier@2.8.8: {} + prettier@3.8.1: {} + quansync@0.2.11: {} + + queue-microtask@1.2.3: {} + + read-yaml-file@1.1.0: + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.2 + pify: 4.0.1 + strip-bom: 3.0.0 + + resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} + reusify@1.1.0: {} + rollup@4.57.1: dependencies: '@types/estree': 1.0.8 @@ -938,14 +1679,47 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.57.1 fsevents: 2.3.3 + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safer-buffer@2.1.2: {} + + semver@7.7.4: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + siginfo@2.0.0: {} + signal-exit@4.1.0: {} + + slash@3.0.0: {} + source-map-js@1.2.1: {} + spawndamnit@3.0.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + sprintf-js@1.0.3: {} + stackback@0.0.2: {} std-env@3.10.0: {} + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: {} + + term-size@2.2.1: {} + tinybench@2.9.0: {} tinyexec@1.0.2: {} @@ -957,6 +1731,10 @@ snapshots: tinyrainbow@3.0.3: {} + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + tsx@4.21.0: dependencies: esbuild: 0.27.3 @@ -968,6 +1746,8 @@ snapshots: undici-types@6.21.0: {} + universalify@0.1.2: {} + vite@7.3.1(@types/node@20.19.33)(tsx@4.21.0): dependencies: esbuild: 0.27.3 @@ -1018,6 +1798,10 @@ snapshots: - tsx - yaml + which@2.0.2: + dependencies: + isexe: 2.0.0 + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0