diff --git a/.eslintrc.json b/.eslintrc.json
index 13ec039a5e..e69de29bb2 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -1,28 +0,0 @@
-{
- "extends": ["plugin:@typescript-eslint/recommended", "plugin:react-hooks/recommended"],
- "parser": "@typescript-eslint/parser",
- "plugins": ["@typescript-eslint", "react-hooks", "import"],
- "rules": {
- "@typescript-eslint/no-unused-vars": [
- "warn",
- {
- "argsIgnorePattern": "^_",
- "varsIgnorePattern": "^_"
- }
- ],
- "@typescript-eslint/no-explicit-any": "warn",
-
- "@typescript-eslint/explicit-function-return-type": "off",
- "@typescript-eslint/explicit-module-boundary-types": "off",
- "@typescript-eslint/no-empty-function": "off",
- "prefer-const": "warn",
- "react-hooks/set-state-in-effect": "warn"
- },
- "overrides": [],
- "env": {
- "browser": true,
- "es2020": true,
- "node": true
- },
- "ignorePatterns": ["**/_*/**"]
-}
diff --git a/.github/actions/setup-build/action.yml b/.github/actions/setup-build/action.yml
new file mode 100644
index 0000000000..2e6c8cae79
--- /dev/null
+++ b/.github/actions/setup-build/action.yml
@@ -0,0 +1,64 @@
+name: Setup build environment
+description: Install toolchain, deps, and write production env
+
+inputs:
+ posthog-key:
+ description: PostHog project API key
+ required: false
+ default: ''
+ posthog-host:
+ description: PostHog host
+ required: false
+ default: ''
+ build-variant:
+ description: Build variant to embed (canary | prod)
+ required: false
+ default: 'prod'
+ windows-native:
+ description: Set to true on Windows to pass MSVC/gyp flags to pnpm install
+ required: false
+ default: 'false'
+
+runs:
+ using: composite
+ steps:
+ - uses: pnpm/action-setup@v4
+ with:
+ version: 10.28.2
+
+ - uses: actions/setup-node@v4
+ with:
+ node-version: '24'
+ cache: pnpm
+
+ - uses: actions/setup-python@v5
+ with:
+ python-version: '3.11'
+
+ - name: Install Python build tools
+ shell: bash
+ run: python -m pip install --upgrade pip setuptools wheel
+
+ - name: Install dependencies (Windows)
+ if: inputs.windows-native == 'true'
+ shell: bash
+ env:
+ npm_config_msvs_version: '2022'
+ GYP_MSVS_VERSION: '2022'
+ run: pnpm install --frozen-lockfile
+
+ - name: Install dependencies
+ if: inputs.windows-native != 'true'
+ shell: bash
+ run: pnpm install --frozen-lockfile
+
+ - name: Write production env
+ shell: bash
+ env:
+ PH_KEY: ${{ inputs.posthog-key }}
+ PH_HOST: ${{ inputs.posthog-host }}
+ BUILD_VARIANT: ${{ inputs.build-variant }}
+ run: |
+ echo "VITE_POSTHOG_KEY=$PH_KEY" >> .env.production
+ echo "VITE_POSTHOG_HOST=$PH_HOST" >> .env.production
+ echo "VITE_BUILD=$BUILD_VARIANT" >> .env.production
diff --git a/.github/actions/upload-r2/action.yml b/.github/actions/upload-r2/action.yml
new file mode 100644
index 0000000000..142d653086
--- /dev/null
+++ b/.github/actions/upload-r2/action.yml
@@ -0,0 +1,40 @@
+name: Upload to R2
+description: Upload release artifacts to Cloudflare R2
+
+inputs:
+ r2-account-id:
+ required: true
+ description: Cloudflare R2 account ID
+ r2-access-key-id:
+ required: true
+ description: Cloudflare R2 access key ID
+ r2-secret-access-key:
+ required: true
+ description: Cloudflare R2 secret access key
+ r2-bucket:
+ required: true
+ description: Cloudflare R2 bucket
+ channel:
+ description: Override update channel for manifest discovery (default uses stable channel)
+ required: false
+ default: ''
+ prefix:
+ description: Override artifact prefix for installer discovery (default uses stable prefix)
+ required: false
+ default: ''
+
+runs:
+ using: composite
+ steps:
+ - name: Upload to R2
+ shell: bash
+ env:
+ R2_ACCOUNT_ID: ${{ inputs.r2-account-id }}
+ R2_ACCESS_KEY_ID: ${{ inputs.r2-access-key-id }}
+ R2_SECRET_ACCESS_KEY: ${{ inputs.r2-secret-access-key }}
+ R2_BUCKET: ${{ inputs.r2-bucket }}
+ run: |
+ ARGS=""
+ if [ -n "${{ inputs.channel }}" ]; then ARGS="$ARGS --channel ${{ inputs.channel }}"; fi
+ if [ -n "${{ inputs.prefix }}" ]; then ARGS="$ARGS --prefix ${{ inputs.prefix }}"; fi
+ node --experimental-strip-types scripts/release/upload-r2.ts $ARGS
diff --git a/.github/workflows/code-consistency-check.yml b/.github/workflows/code-consistency-check.yml
index 8126031c53..5c470ef066 100644
--- a/.github/workflows/code-consistency-check.yml
+++ b/.github/workflows/code-consistency-check.yml
@@ -43,48 +43,8 @@ jobs:
- name: Check formatting
run: pnpm run format:check
- # TODO: add this once fixed across all files
- # - name: Check linting
- # run: pnpm run lint
-
- name: Type check
run: pnpm run typecheck
- vitest:
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Setup pnpm
- uses: pnpm/action-setup@v4
- with:
- version: 10.28.2
-
- - name: Setup Node.js
- uses: actions/setup-node@v4
- with:
- node-version: '24'
- cache: 'pnpm'
-
- - name: Install Linux native deps
- run: |
- sudo apt-get update
- sudo apt-get install -y build-essential libsecret-1-0 libsecret-1-dev
-
- - name: Install dependencies
- # Tests import Electron/keytar paths, so lifecycle scripts must run.
- run: |
- for attempt in 1 2 3; do
- pnpm install --frozen-lockfile && break
- if [ "$attempt" -eq 3 ]; then
- echo "pnpm install failed after 3 attempts"
- exit 1
- fi
- echo "Install failed (attempt $attempt). Retrying in 10s..."
- sleep 10
- done
-
- - name: Run Vitest
- run: pnpm exec vitest run
+ - name: Check linting
+ run: pnpm run lint
diff --git a/.github/workflows/release-canary.yml b/.github/workflows/release-canary.yml
new file mode 100644
index 0000000000..d255285983
--- /dev/null
+++ b/.github/workflows/release-canary.yml
@@ -0,0 +1,168 @@
+name: Release (Canary)
+
+on:
+ workflow_dispatch:
+ inputs:
+ arch:
+ description: 'Architecture to build (arm64 | x64 | both)'
+ required: false
+ default: 'both'
+
+permissions:
+ contents: read
+
+jobs:
+ release-linux:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ environment: release
+ steps:
+ - uses: actions/checkout@v4
+ - name: Install system build dependencies
+ run: sudo apt-get update && sudo apt-get install -y build-essential pkg-config libsecret-1-dev rpm
+ - uses: ./.github/actions/setup-build
+ with:
+ posthog-key: ${{ secrets.POSTHOG_PROJECT_API_KEY }}
+ posthog-host: ${{ secrets.POSTHOG_HOST }}
+ build-variant: canary
+
+ - run: pnpm run build
+
+ - run: echo "NODE_OPTIONS=${NODE_OPTIONS:-not set}" && node --version
+
+ - name: Build Linux packages
+ run: >
+ node --experimental-strip-types scripts/release/build.ts
+ --platform linux --arch x64
+ --config electron-builder.canary.config.ts
+
+ - uses: ./.github/actions/upload-r2
+ with:
+ r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
+ r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
+ r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
+ r2-bucket: ${{ secrets.R2_BUCKET }}
+ channel: v1-canary
+ prefix: emdash-canary
+
+ release-win:
+ runs-on: windows-2022
+ permissions:
+ contents: read
+ environment: release
+ steps:
+ - uses: actions/checkout@v4
+ - uses: ./.github/actions/setup-build
+ with:
+ posthog-key: ${{ secrets.POSTHOG_PROJECT_API_KEY }}
+ posthog-host: ${{ secrets.POSTHOG_HOST }}
+ build-variant: canary
+ windows-native: 'true'
+ - name: Export Python path for native modules
+ shell: bash
+ run: echo "python=$(which python)" >> "$GITHUB_ENV"
+
+ - name: Build app
+ shell: bash
+ run: pnpm run build
+
+ - shell: bash
+ run: echo "NODE_OPTIONS=${NODE_OPTIONS:-not set}" && node --version
+
+ - name: Check Azure Trusted Signing secrets
+ id: signing
+ shell: bash
+ env:
+ AZ_TENANT: ${{ secrets.AZURE_TENANT_ID }}
+ AZ_CLIENT: ${{ secrets.AZURE_CLIENT_ID }}
+ AZ_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
+ run: |
+ if [ -n "$AZ_TENANT" ] && [ -n "$AZ_CLIENT" ] && [ -n "$AZ_SECRET" ]; then
+ echo "has_signing=true" >> "$GITHUB_OUTPUT"
+ else
+ echo "has_signing=false" >> "$GITHUB_OUTPUT"
+ echo "::warning::Azure Trusted Signing secrets not configured. Windows build will be unsigned."
+ fi
+
+ - name: Build Windows packages
+ shell: bash
+ env:
+ AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
+ AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
+ AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
+ run: >
+ node --experimental-strip-types scripts/release/build.ts
+ --platform win --arch x64
+ --config electron-builder.canary.config.ts
+
+ - name: Verify Windows code signature
+ if: ${{ steps.signing.outputs.has_signing == 'true' }}
+ shell: bash
+ run: node --experimental-strip-types scripts/release/verify-win.ts
+
+ - name: Upload to R2
+ uses: ./.github/actions/upload-r2
+ with:
+ r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
+ r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
+ r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
+ r2-bucket: ${{ secrets.R2_BUCKET }}
+ channel: v1-canary
+ prefix: emdash-canary
+
+ release-mac:
+ runs-on: macos-latest
+ permissions:
+ contents: read
+ environment: release
+ steps:
+ - uses: actions/checkout@v4
+ - uses: ./.github/actions/setup-build
+ with:
+ posthog-key: ${{ secrets.POSTHOG_PROJECT_API_KEY }}
+ posthog-host: ${{ secrets.POSTHOG_HOST }}
+ build-variant: canary
+
+ - name: Import Apple signing certificate
+ uses: apple-actions/import-codesign-certs@v2
+ with:
+ p12-file-base64: ${{ secrets.CERTIFICATE_P12 }}
+ p12-password: ${{ secrets.CERTIFICATE_PASSWORD }}
+
+ - run: pnpm run build
+
+ - run: echo "NODE_OPTIONS=${NODE_OPTIONS:-not set}" && node --version
+
+ - name: Build signed DMGs + ZIPs
+ env:
+ CSC_IDENTITY_AUTO_DISCOVERY: 'true'
+ APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
+ APPLE_ID: ${{ secrets.APPLE_ID }}
+ APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
+ run: >
+ node --experimental-strip-types scripts/release/build.ts
+ --platform mac --arch ${{ github.event.inputs.arch || 'both' }} --targets dmg,zip
+ --config electron-builder.canary.config.ts
+
+ - name: Verify macOS bundle
+ run: >
+ node --experimental-strip-types scripts/release/verify-mac.ts
+ --expected-team-id ${{ secrets.APPLE_TEAM_ID }}
+
+ - name: Notarize and staple
+ env:
+ APPLE_API_KEY_CONTENT: ${{ secrets.APPLE_API_KEY }}
+ APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
+ APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
+ run: node --experimental-strip-types scripts/release/notarize-mac.ts --app-bundle "Emdash Canary.app"
+
+ - name: Upload to R2
+ uses: ./.github/actions/upload-r2
+ with:
+ r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
+ r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
+ r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
+ r2-bucket: ${{ secrets.R2_BUCKET }}
+ channel: v1-canary
+ prefix: emdash-canary
diff --git a/.github/workflows/release-prod.yml b/.github/workflows/release-prod.yml
new file mode 100644
index 0000000000..5e6bee27d6
--- /dev/null
+++ b/.github/workflows/release-prod.yml
@@ -0,0 +1,159 @@
+name: Release (Production)
+
+on:
+ workflow_dispatch:
+ inputs:
+ arch:
+ description: 'Architecture to build (arm64 | x64 | both)'
+ required: false
+ default: 'both'
+
+permissions:
+ contents: read
+
+jobs:
+ release-linux:
+ if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ environment: release
+ steps:
+ - uses: actions/checkout@v4
+ - name: Install system build dependencies
+ run: sudo apt-get update && sudo apt-get install -y build-essential pkg-config libsecret-1-dev rpm
+ - uses: ./.github/actions/setup-build
+ with:
+ posthog-key: ${{ secrets.POSTHOG_PROJECT_API_KEY }}
+ posthog-host: ${{ secrets.POSTHOG_HOST }}
+
+ - run: pnpm run build
+
+ - run: echo "NODE_OPTIONS=${NODE_OPTIONS:-not set}" && node --version
+
+ - name: Build Linux packages
+ run: >
+ node --experimental-strip-types scripts/release/build.ts
+ --platform linux --arch x64
+
+ - uses: ./.github/actions/upload-r2
+ with:
+ r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
+ r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
+ r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
+ r2-bucket: ${{ secrets.R2_BUCKET }}
+
+ release-win:
+ if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
+ runs-on: windows-2022
+ permissions:
+ contents: read
+ environment: release
+ steps:
+ - uses: actions/checkout@v4
+ - uses: ./.github/actions/setup-build
+ with:
+ posthog-key: ${{ secrets.POSTHOG_PROJECT_API_KEY }}
+ posthog-host: ${{ secrets.POSTHOG_HOST }}
+ windows-native: 'true'
+ - name: Export Python path for native modules
+ shell: bash
+ run: echo "python=$(which python)" >> "$GITHUB_ENV"
+
+ - name: Build app
+ shell: bash
+ run: pnpm run build
+
+ - shell: bash
+ run: echo "NODE_OPTIONS=${NODE_OPTIONS:-not set}" && node --version
+
+ - name: Check Azure Trusted Signing secrets
+ id: signing
+ shell: bash
+ env:
+ AZ_TENANT: ${{ secrets.AZURE_TENANT_ID }}
+ AZ_CLIENT: ${{ secrets.AZURE_CLIENT_ID }}
+ AZ_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
+ run: |
+ if [ -n "$AZ_TENANT" ] && [ -n "$AZ_CLIENT" ] && [ -n "$AZ_SECRET" ]; then
+ echo "has_signing=true" >> "$GITHUB_OUTPUT"
+ else
+ echo "has_signing=false" >> "$GITHUB_OUTPUT"
+ echo "::warning::Azure Trusted Signing secrets not configured. Windows build will be unsigned."
+ fi
+
+ - name: Build Windows packages
+ shell: bash
+ env:
+ AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
+ AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
+ AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
+ run: >
+ node --experimental-strip-types scripts/release/build.ts
+ --platform win --arch x64
+
+ - name: Verify Windows code signature
+ if: ${{ steps.signing.outputs.has_signing == 'true' }}
+ shell: bash
+ run: node --experimental-strip-types scripts/release/verify-win.ts
+
+ - name: Upload to R2
+ uses: ./.github/actions/upload-r2
+ with:
+ r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
+ r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
+ r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
+ r2-bucket: ${{ secrets.R2_BUCKET }}
+
+ release-mac:
+ if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
+ runs-on: macos-latest
+ permissions:
+ contents: read
+ environment: release
+ steps:
+ - uses: actions/checkout@v4
+ - uses: ./.github/actions/setup-build
+ with:
+ posthog-key: ${{ secrets.POSTHOG_PROJECT_API_KEY }}
+ posthog-host: ${{ secrets.POSTHOG_HOST }}
+
+ - name: Import Apple signing certificate
+ uses: apple-actions/import-codesign-certs@v2
+ with:
+ p12-file-base64: ${{ secrets.CERTIFICATE_P12 }}
+ p12-password: ${{ secrets.CERTIFICATE_PASSWORD }}
+
+ - run: pnpm run build
+
+ - run: echo "NODE_OPTIONS=${NODE_OPTIONS:-not set}" && node --version
+
+ - name: Build signed DMGs + ZIPs
+ env:
+ CSC_IDENTITY_AUTO_DISCOVERY: 'true'
+ APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
+ APPLE_ID: ${{ secrets.APPLE_ID }}
+ APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
+ run: >
+ node --experimental-strip-types scripts/release/build.ts
+ --platform mac --arch ${{ github.event.inputs.arch || 'both' }} --targets dmg,zip
+
+ - name: Verify macOS bundle
+ run: >
+ node --experimental-strip-types scripts/release/verify-mac.ts
+ --expected-team-id ${{ secrets.APPLE_TEAM_ID }}
+
+ - name: Notarize and staple
+ env:
+ APPLE_API_KEY_CONTENT: ${{ secrets.APPLE_API_KEY }}
+ APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
+ APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
+ run: node --experimental-strip-types scripts/release/notarize-mac.ts --app-bundle "Emdash.app"
+
+ - name: Upload to R2
+ uses: ./.github/actions/upload-r2
+ with:
+ r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
+ r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
+ r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
+ r2-bucket: ${{ secrets.R2_BUCKET }}
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
deleted file mode 100644
index da99edbd03..0000000000
--- a/.github/workflows/release.yml
+++ /dev/null
@@ -1,329 +0,0 @@
-name: Release
-
-on:
- push:
- tags:
- - 'v1.*'
- workflow_dispatch:
- inputs:
- arch:
- description: 'Architecture to build (arm64 | x64 | both)'
- required: false
- default: 'both'
- dry_run:
- description: 'Build signed+stapled but DO NOT publish (artifacts only)'
- required: false
- default: 'true'
-
-permissions:
- contents: read
-
-jobs:
- build-mac:
- runs-on: macos-latest
- steps:
- - name: Init flags
- id: init
- run: |
- set -euo pipefail
- DRY=${{ inputs.dry_run || '' }}
- if [ -z "$DRY" ]; then DRY=${{ github.event.inputs.dry_run || '' }}; fi
- DRY=$(printf "%s" "$DRY" | tr '[:upper:]' '[:lower:]')
- case "$DRY" in
- true|1|yes) DRY=true ;;
- *) DRY=false ;;
- esac
- echo "dry_run=$DRY" >> "$GITHUB_OUTPUT"
-
- - uses: actions/checkout@v4
- - uses: pnpm/action-setup@v4
- with:
- version: 10.28.2
- - uses: actions/setup-node@v4
- with:
- node-version: '24'
- cache: 'pnpm'
- - uses: actions/setup-python@v5
- with:
- python-version: '3.11'
-
- - run: python -m pip install --upgrade pip setuptools wheel
- - run: pnpm install --frozen-lockfile
- - run: pnpm run build
-
- - run: echo "NODE_OPTIONS=${NODE_OPTIONS:-not set}" && node --version
-
- - name: Inject telemetry
- env:
- PH_KEY: ${{ secrets.POSTHOG_PROJECT_API_KEY }}
- PH_HOST: ${{ secrets.POSTHOG_HOST }}
- run: node --experimental-strip-types scripts/release/inject-telemetry.ts
-
- - name: Build unsigned DMGs
- env:
- CSC_IDENTITY_AUTO_DISCOVERY: 'false'
- run: >
- node --experimental-strip-types scripts/release/build.ts
- --platform mac --arch ${{ github.event.inputs.arch || 'both' }} --targets dmg
-
- - name: Verify macOS bundle
- run: node --experimental-strip-types scripts/release/verify-mac.ts
-
- release-linux:
- if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
- runs-on: ubuntu-latest
- permissions:
- contents: read
- environment: release
- steps:
- - uses: actions/checkout@v4
- - uses: pnpm/action-setup@v4
- with:
- version: 10.28.2
- - uses: actions/setup-node@v4
- with:
- node-version: '24'
- cache: 'pnpm'
- - uses: actions/setup-python@v5
- with:
- python-version: '3.11'
-
- - run: python -m pip install --upgrade pip setuptools wheel
- - name: Install system build dependencies
- run: sudo apt-get update && sudo apt-get install -y build-essential pkg-config libsecret-1-dev rpm
- - run: pnpm install --frozen-lockfile
- - run: pnpm run build
-
- - run: echo "NODE_OPTIONS=${NODE_OPTIONS:-not set}" && node --version
-
- - name: Inject telemetry
- env:
- PH_KEY: ${{ secrets.POSTHOG_PROJECT_API_KEY }}
- PH_HOST: ${{ secrets.POSTHOG_HOST }}
- run: node --experimental-strip-types scripts/release/inject-telemetry.ts
-
- - name: Build Linux packages
- run: >
- node --experimental-strip-types scripts/release/build.ts
- --platform linux --arch x64
-
- - name: Upload to R2
- env:
- R2_ACCOUNT_ID: ${{ secrets.R2_ACCOUNT_ID }}
- R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
- R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
- R2_BUCKET: ${{ secrets.R2_BUCKET }}
- run: node --experimental-strip-types scripts/release/upload-r2.ts
-
- release-win:
- if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
- runs-on: windows-2022
- permissions:
- contents: read
- environment: release
- steps:
- - name: Init flags
- id: init
- shell: bash
- run: |
- set -euo pipefail
- DRY=${{ inputs.dry_run || '' }}
- if [ -z "$DRY" ]; then DRY=${{ github.event.inputs.dry_run || '' }}; fi
- if [ "${GITHUB_EVENT_NAME:-}" = "push" ] && [ "${GITHUB_REF_TYPE:-}" = "branch" ]; then
- DRY=true
- fi
- DRY=$(printf "%s" "$DRY" | tr '[:upper:]' '[:lower:]')
- case "$DRY" in
- true|1|yes) DRY=true ;;
- *) DRY=false ;;
- esac
- echo "dry_run=$DRY" >> "$GITHUB_OUTPUT"
-
- - uses: actions/checkout@v4
- - uses: pnpm/action-setup@v4
- with:
- version: 10.28.2
- - uses: actions/setup-node@v4
- with:
- node-version: '24'
- cache: 'pnpm'
- - uses: actions/setup-python@v5
- with:
- python-version: '3.11'
-
- - name: Install Python build deps
- shell: bash
- run: |
- python -m pip install --upgrade pip setuptools wheel
- echo "python=$(which python)" >> "$GITHUB_ENV"
-
- - name: Install dependencies
- shell: bash
- env:
- npm_config_python: ${{ env.python }}
- npm_config_msvs_version: 2022
- GYP_MSVS_VERSION: 2022
- run: pnpm install --frozen-lockfile
-
- - name: Build app
- shell: bash
- run: pnpm run build
-
- - shell: bash
- run: echo "NODE_OPTIONS=${NODE_OPTIONS:-not set}" && node --version
-
- - name: Inject telemetry
- shell: bash
- env:
- PH_KEY: ${{ secrets.POSTHOG_PROJECT_API_KEY }}
- PH_HOST: ${{ secrets.POSTHOG_HOST }}
- run: node --experimental-strip-types scripts/release/inject-telemetry.ts
-
- - name: Check Azure Trusted Signing secrets
- id: signing
- shell: bash
- env:
- AZ_TENANT: ${{ secrets.AZURE_TENANT_ID }}
- AZ_CLIENT: ${{ secrets.AZURE_CLIENT_ID }}
- AZ_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
- run: |
- if [ -n "$AZ_TENANT" ] && [ -n "$AZ_CLIENT" ] && [ -n "$AZ_SECRET" ]; then
- echo "has_signing=true" >> "$GITHUB_OUTPUT"
- else
- echo "has_signing=false" >> "$GITHUB_OUTPUT"
- echo "::warning::Azure Trusted Signing secrets not configured. Windows build will be unsigned."
- fi
-
- - name: Build Windows packages
- shell: bash
- env:
- AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
- AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
- AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
- run: >
- node --experimental-strip-types scripts/release/build.ts
- --platform win --arch x64
-
- - name: Verify Windows code signature
- if: ${{ steps.signing.outputs.has_signing == 'true' }}
- shell: bash
- run: node --experimental-strip-types scripts/release/verify-win.ts
-
- - name: Upload to R2
- if: ${{ steps.init.outputs.dry_run != 'true' }}
- shell: bash
- env:
- R2_ACCOUNT_ID: ${{ secrets.R2_ACCOUNT_ID }}
- R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
- R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
- R2_BUCKET: ${{ secrets.R2_BUCKET }}
- run: node --experimental-strip-types scripts/release/upload-r2.ts
-
- - name: Upload artifacts (dry-run)
- if: ${{ steps.init.outputs.dry_run == 'true' }}
- uses: actions/upload-artifact@v4
- with:
- name: WINDOWS-ARTIFACTS
- path: |
- release/emdash-*.exe
- release/emdash-*.msi
- release/*.blockmap
- release/v1-stable*.yml
- if-no-files-found: error
-
- release-mac:
- if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
- runs-on: macos-latest
- permissions:
- contents: read
- environment: release
- steps:
- - name: Init flags
- id: init
- run: |
- set -euo pipefail
- DRY=${{ inputs.dry_run || '' }}
- if [ -z "$DRY" ]; then DRY=${{ github.event.inputs.dry_run || '' }}; fi
- DRY=$(printf "%s" "$DRY" | tr '[:upper:]' '[:lower:]')
- case "$DRY" in
- true|1|yes) DRY=true ;;
- *) DRY=false ;;
- esac
- echo "dry_run=$DRY" >> "$GITHUB_OUTPUT"
-
- - uses: actions/checkout@v4
- - uses: pnpm/action-setup@v4
- with:
- version: 10.28.2
- - uses: actions/setup-node@v4
- with:
- node-version: '24'
- cache: 'pnpm'
- - uses: actions/setup-python@v5
- with:
- python-version: '3.11'
-
- - run: |
- python -m pip install --upgrade pip setuptools wheel
- echo "python=$(which python3)" >> $GITHUB_ENV
- - run: pnpm install --frozen-lockfile
-
- - name: Import Apple signing certificate
- uses: apple-actions/import-codesign-certs@v2
- with:
- p12-file-base64: ${{ secrets.CERTIFICATE_P12 }}
- p12-password: ${{ secrets.CERTIFICATE_PASSWORD }}
-
- - run: pnpm run build
-
- - run: echo "NODE_OPTIONS=${NODE_OPTIONS:-not set}" && node --version
-
- - name: Inject telemetry
- env:
- PH_KEY: ${{ secrets.POSTHOG_PROJECT_API_KEY }}
- PH_HOST: ${{ secrets.POSTHOG_HOST }}
- run: node --experimental-strip-types scripts/release/inject-telemetry.ts
-
- - name: Build signed DMGs + ZIPs
- env:
- CSC_IDENTITY_AUTO_DISCOVERY: 'true'
- APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
- APPLE_ID: ${{ secrets.APPLE_ID }}
- APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
- run: >
- node --experimental-strip-types scripts/release/build.ts
- --platform mac --arch ${{ github.event.inputs.arch || 'both' }} --targets dmg,zip
-
- - name: Verify macOS bundle
- run: >
- node --experimental-strip-types scripts/release/verify-mac.ts
- --expected-team-id ${{ secrets.APPLE_TEAM_ID }}
-
- - name: Notarize and staple
- if: ${{ steps.init.outputs.dry_run != 'true' }}
- env:
- APPLE_API_KEY_CONTENT: ${{ secrets.APPLE_API_KEY }}
- APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
- APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
- run: node --experimental-strip-types scripts/release/notarize-mac.ts
-
- - name: Upload to R2
- if: ${{ steps.init.outputs.dry_run != 'true' }}
- env:
- R2_ACCOUNT_ID: ${{ secrets.R2_ACCOUNT_ID }}
- R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
- R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
- R2_BUCKET: ${{ secrets.R2_BUCKET }}
- run: node --experimental-strip-types scripts/release/upload-r2.ts
-
- - name: Upload artifacts (dry-run)
- if: ${{ steps.init.outputs.dry_run == 'true' }}
- uses: actions/upload-artifact@v4
- with:
- name: SIGNED-STAPLED-DMGS
- path: |
- release/emdash-*.dmg
- release/emdash-*.zip
- release/*.blockmap
- release/v1-stable*.yml
- if-no-files-found: error
diff --git a/.gitignore b/.gitignore
index ff7dafab98..0cbf69ae59 100644
--- a/.gitignore
+++ b/.gitignore
@@ -44,6 +44,7 @@ jspm_packages/
.env.development.local
.env.test.local
.env.production.local
+.env.production
# IDE
.vscode/
@@ -69,4 +70,5 @@ Thumbs.db
.cursor
.codex/config.toml
-src/main/appConfig.json
\ No newline at end of file
+src/main/appConfig.json
+.pi/extensions/emdash-hook.ts
diff --git a/.husky/pre-commit b/.husky/pre-commit
deleted file mode 100644
index 5ee7abd87c..0000000000
--- a/.husky/pre-commit
+++ /dev/null
@@ -1 +0,0 @@
-pnpm exec lint-staged
diff --git a/.node-version b/.node-version
index 57c15c67c7..d845d9d88d 100644
--- a/.node-version
+++ b/.node-version
@@ -1,2 +1 @@
-22.20.0
-
+24.14.0
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 96e9dae4af..77acf9c23b 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -6,7 +6,7 @@ Thanks for your interest in contributing! We favor small, focused PRs and clear
Prerequisites
-- **Node.js 24.0.0+ (recommended: 24.14.0)** and Git
+- **Node.js 24.0.0+ (recommended: 24.14.0)**, **pnpm 10.28.0+**, and Git
- Optional (recommended for end‑to‑end testing):
- GitHub CLI (`brew install gh`; then `gh auth login`)
- At least one supported coding agent CLI (see docs for list)
@@ -28,10 +28,11 @@ pnpm run d
pnpm install
pnpm run dev
-# Type checking, lint, build
- pnpm run typecheck
- pnpm run lint
- pnpm run build
+# Format, lint, type check, and test
+pnpm run format
+pnpm run lint
+pnpm run typecheck
+pnpm run test
```
Tip: During development, the renderer hot‑reloads. Changes to the Electron main process (files in `src/main`) require a restart of the dev app.
@@ -61,13 +62,13 @@ Tip: During development, the renderer hot‑reloads. Changes to the Electron mai
3. Run checks locally
```
-pnpm run format # Format code with Prettier (required)
+pnpm run format # Format code with Prettier (required)
+pnpm run lint # ESLint
pnpm run typecheck # TypeScript type checking
-pnpm run lint # ESLint
-pnpm run build # Build both main and renderer
+pnpm run test # Vitest test suite
```
-Pre-commit hooks run automatically via Husky + lint-staged. On each commit, staged files are auto-formatted with Prettier and linted with ESLint. You don't need to remember to run these manually. Type checking and tests run in CI only since they need the full project context and are slower to execute.
+Pre-commit hooks run automatically via Husky + lint-staged. On each commit, staged files are auto-formatted with Prettier and linted with ESLint. Run the full local gate before opening or merging a PR.
If you need to skip the hook for a work-in-progress commit, use `git commit --no-verify`. The checks will still run in CI when you open a PR.
@@ -98,9 +99,9 @@ TypeScript + ESLint + Prettier
Pre-commit hooks handle formatting and linting automatically on staged files. For full-project checks you can run them manually:
- `pnpm run format` -- format all files with Prettier
-- `pnpm run typecheck` -- TypeScript type checking (whole project)
- `pnpm run lint` -- ESLint across all files
-- `pnpm exec vitest run` -- run the test suite
+- `pnpm run typecheck` -- TypeScript type checking (whole project)
+- `pnpm run test` -- run the test suite
Electron main (Node side)
@@ -159,19 +160,23 @@ This automatically:
2. Creates a git commit with the version number (e.g., `"0.2.10"`)
3. Creates a git tag (e.g., `v0.2.10`)
-Then push to trigger the CI/CD pipeline.
+Then push the commit and tag. Production release builds are dispatched from GitHub Actions.
### What happens next
-Two GitHub Actions workflows trigger on version tags:
+The release pipeline is split across these GitHub Actions workflows:
-**macOS Release** (`.github/workflows/release.yml`):
-1. Builds the TypeScript and Vite bundles
-2. Signs the app with Apple Developer ID
-3. Notarizes via Apple's notary service
-4. Creates a GitHub Release with DMG artifacts for arm64 and x64
+**Production Release** (`.github/workflows/release-prod.yml`):
+1. Builds Linux, Windows, and macOS packages
+2. Signs Windows builds when Azure Trusted Signing secrets are configured
+3. Signs, verifies, notarizes, and staples macOS DMGs and ZIPs
+4. Uploads release artifacts to Cloudflare R2
**Linux/Nix Build** (`.github/workflows/nix-build.yml`):
1. Computes the correct dependency hash from `pnpm-lock.yaml`
2. Builds the x86_64-linux package via Nix flake
-3. Pushes build artifacts to Cachix
+3. Pushes build artifacts to Cachix and uploads the Nix artifact when available
+
+**Canary Release** (`.github/workflows/release-canary.yml`):
+1. Builds Linux, Windows, and macOS packages with the canary config
+2. Publishes artifacts to the `v1-canary` R2 channel
diff --git a/LICENSE.md b/LICENSE.md
index b020b7b722..52225c98d0 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,21 +1,204 @@
-MIT License
-
-Copyright (c) 2025 General Action, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+Copyright 2026 General Action, Inc.
+
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/README.md b/README.md
index c19c640a4a..4b03758de2 100644
--- a/README.md
+++ b/README.md
@@ -27,21 +27,13 @@
-
- Stable v1 is now available for macOS, Windows, and Linux · - Read the launch post -
-npm install -g @openai/codex |
| [Continue](https://docs.continue.dev/guides/cli) | ✅ Supported | npm i -g @continuedev/cli |
| [Cursor](https://cursor.com/cli) | ✅ Supported | curl https://cursor.com/install -fsS | bash |
+| [Devin](https://cli.devin.ai/docs) | ✅ Supported | curl -fsSL https://cli.devin.ai/install.sh | bash |
| [Droid](https://docs.factory.ai/cli/getting-started/quickstart) | ✅ Supported | curl -fsSL https://app.factory.ai/cli | sh |
| [Gemini](https://github.com/google-gemini/gemini-cli) | ✅ Supported | npm install -g @google/gemini-cli |
| [GitHub Copilot](https://docs.github.com/en/copilot/how-tos/set-up/install-copilot-cli) | ✅ Supported | npm install -g @github/copilot |
| [Goose](https://block.github.io/goose/docs/quickstart/) | ✅ Supported | curl -fsSL https://github.com/block/goose/releases/download/stable/download_cli.sh | bash |
-| [Hermes Agent](https://hermes-agent.nousresearch.com/docs/) | ✅ Supported | curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash |
| [Kilocode](https://kilo.ai/docs/cli) | ✅ Supported | npm install -g @kilocode/cli |
| [Kimi](https://www.kimi.com/code/docs/en/kimi-cli/guides/getting-started.html) | ✅ Supported | uv tool install kimi-cli |
| [Kiro (AWS)](https://kiro.dev/docs/cli/) | ✅ Supported | curl -fsSL https://cli.kiro.dev/install | bash |
+| [Letta](https://docs.letta.com/letta-code/cli) | ✅ Supported | npm install -g @letta-ai/letta-code |
| [Mistral Vibe](https://github.com/mistralai/mistral-vibe) | ✅ Supported | curl -LsSf https://mistral.ai/vibe/install.sh | bash |
| [OpenCode](https://opencode.ai/docs/cli/) | ✅ Supported | npm install -g opencode-ai |
| [Pi](https://github.com/badlogic/pi-mono/tree/main/packages/coding-agent) | ✅ Supported | npm install -g @mariozechner/pi-coding-agent |
@@ -109,13 +103,16 @@ Emdash currently supports 23 CLI providers, and we are adding new ones regularly
### Issues
-Emdash allows you to pass tickets straight from Linear, GitHub, or Jira to your coding agent.
+Emdash allows you to pass issues, tickets, and support threads straight to your coding agent.
| Tool | Status | Authentication |
| ----------- | ------ | ----------- |
| [Linear](https://linear.app) | ✅ Supported | Connect with a Linear API key. |
| [Jira](https://www.atlassian.com/software/jira) | ✅ Supported | Provide your site URL, email, and Atlassian API token. |
-| [GitHub Issues](https://docs.github.com/en/issues) | ✅ Supported | Authenticate via GitHub CLI (`gh auth login`). |
+| [GitHub Issues](https://docs.github.com/en/issues) | ✅ Supported | Connect your GitHub account or authenticate via GitHub CLI (`gh auth login`). |
+| [GitLab Issues](https://docs.gitlab.com/user/project/issues/) | ✅ Supported | Provide your GitLab instance URL and a personal access token with `read_api` scope. |
+| [Forgejo Issues](https://forgejo.org/) | ✅ Supported | Provide your Forgejo instance URL and API token. |
+| [Plain Threads](https://www.plain.com/) | ✅ Supported | Connect with a Plain API key. |
# Contributing
diff --git a/agents/integrations/providers.md b/agents/integrations/providers.md
index eabd67a7d9..b7c1bb87fb 100644
--- a/agents/integrations/providers.md
+++ b/agents/integrations/providers.md
@@ -6,9 +6,9 @@
- `src/main/core/dependencies/dependency-manager.ts`
- `src/main/core/pty/`
-## Current Providers (22)
+## Current Providers (26)
-codex, claude, qwen, droid, gemini, cursor, copilot, amp, opencode, charm, auggie, goose, kimi, kilocode, kiro, rovo, cline, continue, codebuff, mistral, pi, autohand
+codex, claude, devin, qwen, droid, gemini, cursor, copilot, amp, opencode, hermes, charm, auggie, goose, kimi, kilocode, kiro, rovo, cline, continue, codebuff, mistral, junie, pi, autohand, letta
## Provider Metadata Includes
diff --git a/agents/quickstart.md b/agents/quickstart.md
index 22643e52f9..b962f42731 100644
--- a/agents/quickstart.md
+++ b/agents/quickstart.md
@@ -25,7 +25,7 @@ pnpm run reset
pnpm run format
pnpm run lint
pnpm run typecheck
-pnpm test run
+pnpm run test
```
## Docs Commands
diff --git a/agents/risky-areas/updater.md b/agents/risky-areas/updater.md
index 7830a7f268..cf360acd0e 100644
--- a/agents/risky-areas/updater.md
+++ b/agents/risky-areas/updater.md
@@ -6,7 +6,8 @@
- `src/main/core/updates/controller.ts`
- `build/`
- `package.json`
-- `.github/workflows/release.yml`
+- `.github/workflows/release-prod.yml`
+- `.github/workflows/release-canary.yml`
- `.github/workflows/windows-beta-build.yml`
- `.github/workflows/nix-build.yml`
diff --git a/agents/workflows/testing.md b/agents/workflows/testing.md
index 39b7c270f5..dd40ee4d99 100644
--- a/agents/workflows/testing.md
+++ b/agents/workflows/testing.md
@@ -31,8 +31,8 @@ pnpm run test
- `.github/workflows/code-consistency-check.yml` currently enforces:
- `pnpm run format:check`
- `pnpm run typecheck`
- - `pnpm exec vitest run`
-- Lint is still expected locally even though it is not enabled in that workflow yet.
+ - `pnpm run lint`
+- Tests are still expected locally before merging even though they are not enabled in that workflow yet.
## Focused Validation
diff --git a/dev-app-update.canary.yml b/dev-app-update.canary.yml
new file mode 100644
index 0000000000..1b2322e9b7
--- /dev/null
+++ b/dev-app-update.canary.yml
@@ -0,0 +1,3 @@
+provider: generic
+url: https://releases.emdash.sh
+channel: v1-canary
diff --git a/drizzle/0007_bent_spitfire.sql b/drizzle/0007_bent_spitfire.sql
new file mode 100644
index 0000000000..444b07d462
--- /dev/null
+++ b/drizzle/0007_bent_spitfire.sql
@@ -0,0 +1,3 @@
+ALTER TABLE `tasks` ADD `workspace_provider` text;--> statement-breakpoint
+ALTER TABLE `tasks` ADD `workspace_id` text;--> statement-breakpoint
+ALTER TABLE `tasks` ADD `workspace_provider_data` text;
\ No newline at end of file
diff --git a/drizzle/0008_past_shinko_yamashiro.sql b/drizzle/0008_past_shinko_yamashiro.sql
new file mode 100644
index 0000000000..1a5d70b42a
--- /dev/null
+++ b/drizzle/0008_past_shinko_yamashiro.sql
@@ -0,0 +1 @@
+ALTER TABLE `conversations` ADD `last_interacted_at` text;
\ No newline at end of file
diff --git a/drizzle/0009_lean_goblin_queen.sql b/drizzle/0009_lean_goblin_queen.sql
new file mode 100644
index 0000000000..b7cc68cbfc
--- /dev/null
+++ b/drizzle/0009_lean_goblin_queen.sql
@@ -0,0 +1 @@
+ALTER TABLE `conversations` ADD `is_initial_conversation` integer;
\ No newline at end of file
diff --git a/drizzle/meta/0007_snapshot.json b/drizzle/meta/0007_snapshot.json
new file mode 100644
index 0000000000..cd92f77abb
--- /dev/null
+++ b/drizzle/meta/0007_snapshot.json
@@ -0,0 +1,1291 @@
+{
+ "version": "6",
+ "dialect": "sqlite",
+ "id": "68b5cc95-67aa-4078-94fa-c10caad8d9eb",
+ "prevId": "79109ea2-737d-48d0-b5c6-ec2ceb4b0d3c",
+ "tables": {
+ "app_secrets": {
+ "name": "app_secrets",
+ "columns": {
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "secret": {
+ "name": "secret",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_app_secrets_key": {
+ "name": "idx_app_secrets_key",
+ "columns": ["key"],
+ "isUnique": true
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "app_settings": {
+ "name": "app_settings",
+ "columns": {
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_app_settings_key": {
+ "name": "idx_app_settings_key",
+ "columns": ["key"],
+ "isUnique": true
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "conversations": {
+ "name": "conversations",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "project_id": {
+ "name": "project_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "task_id": {
+ "name": "task_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "provider": {
+ "name": "provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "config": {
+ "name": "config",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_conversations_task_id": {
+ "name": "idx_conversations_task_id",
+ "columns": ["task_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "conversations_project_id_projects_id_fk": {
+ "name": "conversations_project_id_projects_id_fk",
+ "tableFrom": "conversations",
+ "tableTo": "projects",
+ "columnsFrom": ["project_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "conversations_task_id_tasks_id_fk": {
+ "name": "conversations_task_id_tasks_id_fk",
+ "tableFrom": "conversations",
+ "tableTo": "tasks",
+ "columnsFrom": ["task_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "editor_buffers": {
+ "name": "editor_buffers",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "project_id": {
+ "name": "project_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "file_path": {
+ "name": "file_path",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "content": {
+ "name": "content",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_editor_buffers_workspace_file": {
+ "name": "idx_editor_buffers_workspace_file",
+ "columns": ["workspace_id", "file_path"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "editor_buffers_project_id_projects_id_fk": {
+ "name": "editor_buffers_project_id_projects_id_fk",
+ "tableFrom": "editor_buffers",
+ "tableTo": "projects",
+ "columnsFrom": ["project_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "kv": {
+ "name": "kv",
+ "columns": {
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_kv_key": {
+ "name": "idx_kv_key",
+ "columns": ["key"],
+ "isUnique": true
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "messages": {
+ "name": "messages",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "conversation_id": {
+ "name": "conversation_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "content": {
+ "name": "content",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "sender": {
+ "name": "sender",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "timestamp": {
+ "name": "timestamp",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_messages_conversation_id": {
+ "name": "idx_messages_conversation_id",
+ "columns": ["conversation_id"],
+ "isUnique": false
+ },
+ "idx_messages_timestamp": {
+ "name": "idx_messages_timestamp",
+ "columns": ["timestamp"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "messages_conversation_id_conversations_id_fk": {
+ "name": "messages_conversation_id_conversations_id_fk",
+ "tableFrom": "messages",
+ "tableTo": "conversations",
+ "columnsFrom": ["conversation_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "project_remotes": {
+ "name": "project_remotes",
+ "columns": {
+ "project_id": {
+ "name": "project_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "remote_name": {
+ "name": "remote_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "remote_url": {
+ "name": "remote_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "project_remotes_project_id_projects_id_fk": {
+ "name": "project_remotes_project_id_projects_id_fk",
+ "tableFrom": "project_remotes",
+ "tableTo": "projects",
+ "columnsFrom": ["project_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "project_remotes_project_id_remote_name_pk": {
+ "columns": ["project_id", "remote_name"],
+ "name": "project_remotes_project_id_remote_name_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "projects": {
+ "name": "projects",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "path": {
+ "name": "path",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "workspace_provider": {
+ "name": "workspace_provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'local'"
+ },
+ "base_ref": {
+ "name": "base_ref",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "ssh_connection_id": {
+ "name": "ssh_connection_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_projects_path": {
+ "name": "idx_projects_path",
+ "columns": ["path"],
+ "isUnique": true
+ },
+ "idx_projects_ssh_connection_id": {
+ "name": "idx_projects_ssh_connection_id",
+ "columns": ["ssh_connection_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "projects_ssh_connection_id_ssh_connections_id_fk": {
+ "name": "projects_ssh_connection_id_ssh_connections_id_fk",
+ "tableFrom": "projects",
+ "tableTo": "ssh_connections",
+ "columnsFrom": ["ssh_connection_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "pull_request_assignees": {
+ "name": "pull_request_assignees",
+ "columns": {
+ "pull_request_url": {
+ "name": "pull_request_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_pra_pull_request_url": {
+ "name": "idx_pra_pull_request_url",
+ "columns": ["pull_request_url"],
+ "isUnique": false
+ },
+ "idx_pra_user_id": {
+ "name": "idx_pra_user_id",
+ "columns": ["user_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "pull_request_assignees_pull_request_url_pull_requests_url_fk": {
+ "name": "pull_request_assignees_pull_request_url_pull_requests_url_fk",
+ "tableFrom": "pull_request_assignees",
+ "tableTo": "pull_requests",
+ "columnsFrom": ["pull_request_url"],
+ "columnsTo": ["url"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "pull_request_assignees_user_id_pull_request_users_user_id_fk": {
+ "name": "pull_request_assignees_user_id_pull_request_users_user_id_fk",
+ "tableFrom": "pull_request_assignees",
+ "tableTo": "pull_request_users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["user_id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "pull_request_assignees_pull_request_url_user_id_pk": {
+ "columns": ["pull_request_url", "user_id"],
+ "name": "pull_request_assignees_pull_request_url_user_id_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "pull_request_checks": {
+ "name": "pull_request_checks",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "pull_request_url": {
+ "name": "pull_request_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "commit_sha": {
+ "name": "commit_sha",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "conclusion": {
+ "name": "conclusion",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "details_url": {
+ "name": "details_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "started_at": {
+ "name": "started_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "completed_at": {
+ "name": "completed_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "workflow_name": {
+ "name": "workflow_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "app_name": {
+ "name": "app_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "app_logo_url": {
+ "name": "app_logo_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_prc_pull_request_url": {
+ "name": "idx_prc_pull_request_url",
+ "columns": ["pull_request_url"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "pull_request_checks_pull_request_url_pull_requests_url_fk": {
+ "name": "pull_request_checks_pull_request_url_pull_requests_url_fk",
+ "tableFrom": "pull_request_checks",
+ "tableTo": "pull_requests",
+ "columnsFrom": ["pull_request_url"],
+ "columnsTo": ["url"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "pull_request_labels": {
+ "name": "pull_request_labels",
+ "columns": {
+ "pull_request_id": {
+ "name": "pull_request_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "color": {
+ "name": "color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_prl_name": {
+ "name": "idx_prl_name",
+ "columns": ["name"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "pull_request_labels_pull_request_id_pull_requests_url_fk": {
+ "name": "pull_request_labels_pull_request_id_pull_requests_url_fk",
+ "tableFrom": "pull_request_labels",
+ "tableTo": "pull_requests",
+ "columnsFrom": ["pull_request_id"],
+ "columnsTo": ["url"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "pull_request_labels_pull_request_id_name_pk": {
+ "columns": ["pull_request_id", "name"],
+ "name": "pull_request_labels_pull_request_id_name_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "pull_request_users": {
+ "name": "pull_request_users",
+ "columns": {
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_name": {
+ "name": "user_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "display_name": {
+ "name": "display_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "avatar_url": {
+ "name": "avatar_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "user_updated_at": {
+ "name": "user_updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "user_created_at": {
+ "name": "user_created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "pull_requests": {
+ "name": "pull_requests",
+ "columns": {
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "provider": {
+ "name": "provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'github'"
+ },
+ "repository_url": {
+ "name": "repository_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "base_ref_name": {
+ "name": "base_ref_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "base_ref_oid": {
+ "name": "base_ref_oid",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "head_repository_url": {
+ "name": "head_repository_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "head_ref_name": {
+ "name": "head_ref_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "head_ref_oid": {
+ "name": "head_ref_oid",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "identifier": {
+ "name": "identifier",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'open'"
+ },
+ "is_draft": {
+ "name": "is_draft",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "author_user_id": {
+ "name": "author_user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "additions": {
+ "name": "additions",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "deletions": {
+ "name": "deletions",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "changed_files": {
+ "name": "changed_files",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "commit_count": {
+ "name": "commit_count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "mergeable_status": {
+ "name": "mergeable_status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "merge_state_status": {
+ "name": "merge_state_status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "review_decision": {
+ "name": "review_decision",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "pull_request_created_at": {
+ "name": "pull_request_created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "pull_request_updated_at": {
+ "name": "pull_request_updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_pull_requests_url": {
+ "name": "idx_pull_requests_url",
+ "columns": ["url"],
+ "isUnique": true
+ },
+ "idx_pull_requests_repository_url": {
+ "name": "idx_pull_requests_repository_url",
+ "columns": ["repository_url"],
+ "isUnique": false
+ },
+ "idx_pull_requests_head_repository_url": {
+ "name": "idx_pull_requests_head_repository_url",
+ "columns": ["head_repository_url"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "pull_requests_author_user_id_pull_request_users_user_id_fk": {
+ "name": "pull_requests_author_user_id_pull_request_users_user_id_fk",
+ "tableFrom": "pull_requests",
+ "tableTo": "pull_request_users",
+ "columnsFrom": ["author_user_id"],
+ "columnsTo": ["user_id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "ssh_connections": {
+ "name": "ssh_connections",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "host": {
+ "name": "host",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "port": {
+ "name": "port",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 22
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "auth_type": {
+ "name": "auth_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'agent'"
+ },
+ "private_key_path": {
+ "name": "private_key_path",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "use_agent": {
+ "name": "use_agent",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_ssh_connections_name": {
+ "name": "idx_ssh_connections_name",
+ "columns": ["name"],
+ "isUnique": true
+ },
+ "idx_ssh_connections_host": {
+ "name": "idx_ssh_connections_host",
+ "columns": ["host"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "tasks": {
+ "name": "tasks",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "project_id": {
+ "name": "project_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "source_branch": {
+ "name": "source_branch",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "task_branch": {
+ "name": "task_branch",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "linked_issue": {
+ "name": "linked_issue",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "archived_at": {
+ "name": "archived_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "last_interacted_at": {
+ "name": "last_interacted_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "status_changed_at": {
+ "name": "status_changed_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "is_pinned": {
+ "name": "is_pinned",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ },
+ "workspace_provider": {
+ "name": "workspace_provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "workspace_provider_data": {
+ "name": "workspace_provider_data",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_tasks_project_id": {
+ "name": "idx_tasks_project_id",
+ "columns": ["project_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "tasks_project_id_projects_id_fk": {
+ "name": "tasks_project_id_projects_id_fk",
+ "tableFrom": "tasks",
+ "tableTo": "projects",
+ "columnsFrom": ["project_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "terminals": {
+ "name": "terminals",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "project_id": {
+ "name": "project_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "task_id": {
+ "name": "task_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "ssh": {
+ "name": "ssh",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_terminals_task_id": {
+ "name": "idx_terminals_task_id",
+ "columns": ["task_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "terminals_project_id_projects_id_fk": {
+ "name": "terminals_project_id_projects_id_fk",
+ "tableFrom": "terminals",
+ "tableTo": "projects",
+ "columnsFrom": ["project_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "terminals_task_id_tasks_id_fk": {
+ "name": "terminals_task_id_tasks_id_fk",
+ "tableFrom": "terminals",
+ "tableTo": "tasks",
+ "columnsFrom": ["task_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ }
+ },
+ "enums": {},
+ "_meta": {
+ "schemas": {},
+ "tables": {},
+ "columns": {}
+ },
+ "internal": {
+ "indexes": {}
+ }
+}
diff --git a/drizzle/meta/0008_snapshot.json b/drizzle/meta/0008_snapshot.json
new file mode 100644
index 0000000000..4449954ab1
--- /dev/null
+++ b/drizzle/meta/0008_snapshot.json
@@ -0,0 +1,1298 @@
+{
+ "version": "6",
+ "dialect": "sqlite",
+ "id": "f7518b53-ae00-412e-a92c-68667522bca3",
+ "prevId": "68b5cc95-67aa-4078-94fa-c10caad8d9eb",
+ "tables": {
+ "app_secrets": {
+ "name": "app_secrets",
+ "columns": {
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "secret": {
+ "name": "secret",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_app_secrets_key": {
+ "name": "idx_app_secrets_key",
+ "columns": ["key"],
+ "isUnique": true
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "app_settings": {
+ "name": "app_settings",
+ "columns": {
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_app_settings_key": {
+ "name": "idx_app_settings_key",
+ "columns": ["key"],
+ "isUnique": true
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "conversations": {
+ "name": "conversations",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "project_id": {
+ "name": "project_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "task_id": {
+ "name": "task_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "provider": {
+ "name": "provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "config": {
+ "name": "config",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "last_interacted_at": {
+ "name": "last_interacted_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_conversations_task_id": {
+ "name": "idx_conversations_task_id",
+ "columns": ["task_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "conversations_project_id_projects_id_fk": {
+ "name": "conversations_project_id_projects_id_fk",
+ "tableFrom": "conversations",
+ "tableTo": "projects",
+ "columnsFrom": ["project_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "conversations_task_id_tasks_id_fk": {
+ "name": "conversations_task_id_tasks_id_fk",
+ "tableFrom": "conversations",
+ "tableTo": "tasks",
+ "columnsFrom": ["task_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "editor_buffers": {
+ "name": "editor_buffers",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "project_id": {
+ "name": "project_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "file_path": {
+ "name": "file_path",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "content": {
+ "name": "content",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_editor_buffers_workspace_file": {
+ "name": "idx_editor_buffers_workspace_file",
+ "columns": ["workspace_id", "file_path"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "editor_buffers_project_id_projects_id_fk": {
+ "name": "editor_buffers_project_id_projects_id_fk",
+ "tableFrom": "editor_buffers",
+ "tableTo": "projects",
+ "columnsFrom": ["project_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "kv": {
+ "name": "kv",
+ "columns": {
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_kv_key": {
+ "name": "idx_kv_key",
+ "columns": ["key"],
+ "isUnique": true
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "messages": {
+ "name": "messages",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "conversation_id": {
+ "name": "conversation_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "content": {
+ "name": "content",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "sender": {
+ "name": "sender",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "timestamp": {
+ "name": "timestamp",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_messages_conversation_id": {
+ "name": "idx_messages_conversation_id",
+ "columns": ["conversation_id"],
+ "isUnique": false
+ },
+ "idx_messages_timestamp": {
+ "name": "idx_messages_timestamp",
+ "columns": ["timestamp"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "messages_conversation_id_conversations_id_fk": {
+ "name": "messages_conversation_id_conversations_id_fk",
+ "tableFrom": "messages",
+ "tableTo": "conversations",
+ "columnsFrom": ["conversation_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "project_remotes": {
+ "name": "project_remotes",
+ "columns": {
+ "project_id": {
+ "name": "project_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "remote_name": {
+ "name": "remote_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "remote_url": {
+ "name": "remote_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "project_remotes_project_id_projects_id_fk": {
+ "name": "project_remotes_project_id_projects_id_fk",
+ "tableFrom": "project_remotes",
+ "tableTo": "projects",
+ "columnsFrom": ["project_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "project_remotes_project_id_remote_name_pk": {
+ "columns": ["project_id", "remote_name"],
+ "name": "project_remotes_project_id_remote_name_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "projects": {
+ "name": "projects",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "path": {
+ "name": "path",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "workspace_provider": {
+ "name": "workspace_provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'local'"
+ },
+ "base_ref": {
+ "name": "base_ref",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "ssh_connection_id": {
+ "name": "ssh_connection_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_projects_path": {
+ "name": "idx_projects_path",
+ "columns": ["path"],
+ "isUnique": true
+ },
+ "idx_projects_ssh_connection_id": {
+ "name": "idx_projects_ssh_connection_id",
+ "columns": ["ssh_connection_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "projects_ssh_connection_id_ssh_connections_id_fk": {
+ "name": "projects_ssh_connection_id_ssh_connections_id_fk",
+ "tableFrom": "projects",
+ "tableTo": "ssh_connections",
+ "columnsFrom": ["ssh_connection_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "pull_request_assignees": {
+ "name": "pull_request_assignees",
+ "columns": {
+ "pull_request_url": {
+ "name": "pull_request_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_pra_pull_request_url": {
+ "name": "idx_pra_pull_request_url",
+ "columns": ["pull_request_url"],
+ "isUnique": false
+ },
+ "idx_pra_user_id": {
+ "name": "idx_pra_user_id",
+ "columns": ["user_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "pull_request_assignees_pull_request_url_pull_requests_url_fk": {
+ "name": "pull_request_assignees_pull_request_url_pull_requests_url_fk",
+ "tableFrom": "pull_request_assignees",
+ "tableTo": "pull_requests",
+ "columnsFrom": ["pull_request_url"],
+ "columnsTo": ["url"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "pull_request_assignees_user_id_pull_request_users_user_id_fk": {
+ "name": "pull_request_assignees_user_id_pull_request_users_user_id_fk",
+ "tableFrom": "pull_request_assignees",
+ "tableTo": "pull_request_users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["user_id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "pull_request_assignees_pull_request_url_user_id_pk": {
+ "columns": ["pull_request_url", "user_id"],
+ "name": "pull_request_assignees_pull_request_url_user_id_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "pull_request_checks": {
+ "name": "pull_request_checks",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "pull_request_url": {
+ "name": "pull_request_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "commit_sha": {
+ "name": "commit_sha",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "conclusion": {
+ "name": "conclusion",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "details_url": {
+ "name": "details_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "started_at": {
+ "name": "started_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "completed_at": {
+ "name": "completed_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "workflow_name": {
+ "name": "workflow_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "app_name": {
+ "name": "app_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "app_logo_url": {
+ "name": "app_logo_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_prc_pull_request_url": {
+ "name": "idx_prc_pull_request_url",
+ "columns": ["pull_request_url"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "pull_request_checks_pull_request_url_pull_requests_url_fk": {
+ "name": "pull_request_checks_pull_request_url_pull_requests_url_fk",
+ "tableFrom": "pull_request_checks",
+ "tableTo": "pull_requests",
+ "columnsFrom": ["pull_request_url"],
+ "columnsTo": ["url"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "pull_request_labels": {
+ "name": "pull_request_labels",
+ "columns": {
+ "pull_request_id": {
+ "name": "pull_request_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "color": {
+ "name": "color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_prl_name": {
+ "name": "idx_prl_name",
+ "columns": ["name"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "pull_request_labels_pull_request_id_pull_requests_url_fk": {
+ "name": "pull_request_labels_pull_request_id_pull_requests_url_fk",
+ "tableFrom": "pull_request_labels",
+ "tableTo": "pull_requests",
+ "columnsFrom": ["pull_request_id"],
+ "columnsTo": ["url"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "pull_request_labels_pull_request_id_name_pk": {
+ "columns": ["pull_request_id", "name"],
+ "name": "pull_request_labels_pull_request_id_name_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "pull_request_users": {
+ "name": "pull_request_users",
+ "columns": {
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_name": {
+ "name": "user_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "display_name": {
+ "name": "display_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "avatar_url": {
+ "name": "avatar_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "user_updated_at": {
+ "name": "user_updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "user_created_at": {
+ "name": "user_created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "pull_requests": {
+ "name": "pull_requests",
+ "columns": {
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "provider": {
+ "name": "provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'github'"
+ },
+ "repository_url": {
+ "name": "repository_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "base_ref_name": {
+ "name": "base_ref_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "base_ref_oid": {
+ "name": "base_ref_oid",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "head_repository_url": {
+ "name": "head_repository_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "head_ref_name": {
+ "name": "head_ref_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "head_ref_oid": {
+ "name": "head_ref_oid",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "identifier": {
+ "name": "identifier",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'open'"
+ },
+ "is_draft": {
+ "name": "is_draft",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "author_user_id": {
+ "name": "author_user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "additions": {
+ "name": "additions",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "deletions": {
+ "name": "deletions",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "changed_files": {
+ "name": "changed_files",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "commit_count": {
+ "name": "commit_count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "mergeable_status": {
+ "name": "mergeable_status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "merge_state_status": {
+ "name": "merge_state_status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "review_decision": {
+ "name": "review_decision",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "pull_request_created_at": {
+ "name": "pull_request_created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "pull_request_updated_at": {
+ "name": "pull_request_updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_pull_requests_url": {
+ "name": "idx_pull_requests_url",
+ "columns": ["url"],
+ "isUnique": true
+ },
+ "idx_pull_requests_repository_url": {
+ "name": "idx_pull_requests_repository_url",
+ "columns": ["repository_url"],
+ "isUnique": false
+ },
+ "idx_pull_requests_head_repository_url": {
+ "name": "idx_pull_requests_head_repository_url",
+ "columns": ["head_repository_url"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "pull_requests_author_user_id_pull_request_users_user_id_fk": {
+ "name": "pull_requests_author_user_id_pull_request_users_user_id_fk",
+ "tableFrom": "pull_requests",
+ "tableTo": "pull_request_users",
+ "columnsFrom": ["author_user_id"],
+ "columnsTo": ["user_id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "ssh_connections": {
+ "name": "ssh_connections",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "host": {
+ "name": "host",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "port": {
+ "name": "port",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 22
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "auth_type": {
+ "name": "auth_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'agent'"
+ },
+ "private_key_path": {
+ "name": "private_key_path",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "use_agent": {
+ "name": "use_agent",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_ssh_connections_name": {
+ "name": "idx_ssh_connections_name",
+ "columns": ["name"],
+ "isUnique": true
+ },
+ "idx_ssh_connections_host": {
+ "name": "idx_ssh_connections_host",
+ "columns": ["host"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "tasks": {
+ "name": "tasks",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "project_id": {
+ "name": "project_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "source_branch": {
+ "name": "source_branch",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "task_branch": {
+ "name": "task_branch",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "linked_issue": {
+ "name": "linked_issue",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "archived_at": {
+ "name": "archived_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "last_interacted_at": {
+ "name": "last_interacted_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "status_changed_at": {
+ "name": "status_changed_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "is_pinned": {
+ "name": "is_pinned",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ },
+ "workspace_provider": {
+ "name": "workspace_provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "workspace_provider_data": {
+ "name": "workspace_provider_data",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_tasks_project_id": {
+ "name": "idx_tasks_project_id",
+ "columns": ["project_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "tasks_project_id_projects_id_fk": {
+ "name": "tasks_project_id_projects_id_fk",
+ "tableFrom": "tasks",
+ "tableTo": "projects",
+ "columnsFrom": ["project_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "terminals": {
+ "name": "terminals",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "project_id": {
+ "name": "project_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "task_id": {
+ "name": "task_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "ssh": {
+ "name": "ssh",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_terminals_task_id": {
+ "name": "idx_terminals_task_id",
+ "columns": ["task_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "terminals_project_id_projects_id_fk": {
+ "name": "terminals_project_id_projects_id_fk",
+ "tableFrom": "terminals",
+ "tableTo": "projects",
+ "columnsFrom": ["project_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "terminals_task_id_tasks_id_fk": {
+ "name": "terminals_task_id_tasks_id_fk",
+ "tableFrom": "terminals",
+ "tableTo": "tasks",
+ "columnsFrom": ["task_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ }
+ },
+ "enums": {},
+ "_meta": {
+ "schemas": {},
+ "tables": {},
+ "columns": {}
+ },
+ "internal": {
+ "indexes": {}
+ }
+}
diff --git a/drizzle/meta/0009_snapshot.json b/drizzle/meta/0009_snapshot.json
new file mode 100644
index 0000000000..96c7378f56
--- /dev/null
+++ b/drizzle/meta/0009_snapshot.json
@@ -0,0 +1,1305 @@
+{
+ "version": "6",
+ "dialect": "sqlite",
+ "id": "44fce29b-43c5-4a52-98b0-22f4c2a840dd",
+ "prevId": "f7518b53-ae00-412e-a92c-68667522bca3",
+ "tables": {
+ "app_secrets": {
+ "name": "app_secrets",
+ "columns": {
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "secret": {
+ "name": "secret",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_app_secrets_key": {
+ "name": "idx_app_secrets_key",
+ "columns": ["key"],
+ "isUnique": true
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "app_settings": {
+ "name": "app_settings",
+ "columns": {
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_app_settings_key": {
+ "name": "idx_app_settings_key",
+ "columns": ["key"],
+ "isUnique": true
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "conversations": {
+ "name": "conversations",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "project_id": {
+ "name": "project_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "task_id": {
+ "name": "task_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "provider": {
+ "name": "provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "config": {
+ "name": "config",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "last_interacted_at": {
+ "name": "last_interacted_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "is_initial_conversation": {
+ "name": "is_initial_conversation",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_conversations_task_id": {
+ "name": "idx_conversations_task_id",
+ "columns": ["task_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "conversations_project_id_projects_id_fk": {
+ "name": "conversations_project_id_projects_id_fk",
+ "tableFrom": "conversations",
+ "tableTo": "projects",
+ "columnsFrom": ["project_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "conversations_task_id_tasks_id_fk": {
+ "name": "conversations_task_id_tasks_id_fk",
+ "tableFrom": "conversations",
+ "tableTo": "tasks",
+ "columnsFrom": ["task_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "editor_buffers": {
+ "name": "editor_buffers",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "project_id": {
+ "name": "project_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "file_path": {
+ "name": "file_path",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "content": {
+ "name": "content",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_editor_buffers_workspace_file": {
+ "name": "idx_editor_buffers_workspace_file",
+ "columns": ["workspace_id", "file_path"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "editor_buffers_project_id_projects_id_fk": {
+ "name": "editor_buffers_project_id_projects_id_fk",
+ "tableFrom": "editor_buffers",
+ "tableTo": "projects",
+ "columnsFrom": ["project_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "kv": {
+ "name": "kv",
+ "columns": {
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_kv_key": {
+ "name": "idx_kv_key",
+ "columns": ["key"],
+ "isUnique": true
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "messages": {
+ "name": "messages",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "conversation_id": {
+ "name": "conversation_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "content": {
+ "name": "content",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "sender": {
+ "name": "sender",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "timestamp": {
+ "name": "timestamp",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_messages_conversation_id": {
+ "name": "idx_messages_conversation_id",
+ "columns": ["conversation_id"],
+ "isUnique": false
+ },
+ "idx_messages_timestamp": {
+ "name": "idx_messages_timestamp",
+ "columns": ["timestamp"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "messages_conversation_id_conversations_id_fk": {
+ "name": "messages_conversation_id_conversations_id_fk",
+ "tableFrom": "messages",
+ "tableTo": "conversations",
+ "columnsFrom": ["conversation_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "project_remotes": {
+ "name": "project_remotes",
+ "columns": {
+ "project_id": {
+ "name": "project_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "remote_name": {
+ "name": "remote_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "remote_url": {
+ "name": "remote_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "project_remotes_project_id_projects_id_fk": {
+ "name": "project_remotes_project_id_projects_id_fk",
+ "tableFrom": "project_remotes",
+ "tableTo": "projects",
+ "columnsFrom": ["project_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "project_remotes_project_id_remote_name_pk": {
+ "columns": ["project_id", "remote_name"],
+ "name": "project_remotes_project_id_remote_name_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "projects": {
+ "name": "projects",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "path": {
+ "name": "path",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "workspace_provider": {
+ "name": "workspace_provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'local'"
+ },
+ "base_ref": {
+ "name": "base_ref",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "ssh_connection_id": {
+ "name": "ssh_connection_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_projects_path": {
+ "name": "idx_projects_path",
+ "columns": ["path"],
+ "isUnique": true
+ },
+ "idx_projects_ssh_connection_id": {
+ "name": "idx_projects_ssh_connection_id",
+ "columns": ["ssh_connection_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "projects_ssh_connection_id_ssh_connections_id_fk": {
+ "name": "projects_ssh_connection_id_ssh_connections_id_fk",
+ "tableFrom": "projects",
+ "tableTo": "ssh_connections",
+ "columnsFrom": ["ssh_connection_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "pull_request_assignees": {
+ "name": "pull_request_assignees",
+ "columns": {
+ "pull_request_url": {
+ "name": "pull_request_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_pra_pull_request_url": {
+ "name": "idx_pra_pull_request_url",
+ "columns": ["pull_request_url"],
+ "isUnique": false
+ },
+ "idx_pra_user_id": {
+ "name": "idx_pra_user_id",
+ "columns": ["user_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "pull_request_assignees_pull_request_url_pull_requests_url_fk": {
+ "name": "pull_request_assignees_pull_request_url_pull_requests_url_fk",
+ "tableFrom": "pull_request_assignees",
+ "tableTo": "pull_requests",
+ "columnsFrom": ["pull_request_url"],
+ "columnsTo": ["url"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "pull_request_assignees_user_id_pull_request_users_user_id_fk": {
+ "name": "pull_request_assignees_user_id_pull_request_users_user_id_fk",
+ "tableFrom": "pull_request_assignees",
+ "tableTo": "pull_request_users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["user_id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "pull_request_assignees_pull_request_url_user_id_pk": {
+ "columns": ["pull_request_url", "user_id"],
+ "name": "pull_request_assignees_pull_request_url_user_id_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "pull_request_checks": {
+ "name": "pull_request_checks",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "pull_request_url": {
+ "name": "pull_request_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "commit_sha": {
+ "name": "commit_sha",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "conclusion": {
+ "name": "conclusion",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "details_url": {
+ "name": "details_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "started_at": {
+ "name": "started_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "completed_at": {
+ "name": "completed_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "workflow_name": {
+ "name": "workflow_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "app_name": {
+ "name": "app_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "app_logo_url": {
+ "name": "app_logo_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_prc_pull_request_url": {
+ "name": "idx_prc_pull_request_url",
+ "columns": ["pull_request_url"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "pull_request_checks_pull_request_url_pull_requests_url_fk": {
+ "name": "pull_request_checks_pull_request_url_pull_requests_url_fk",
+ "tableFrom": "pull_request_checks",
+ "tableTo": "pull_requests",
+ "columnsFrom": ["pull_request_url"],
+ "columnsTo": ["url"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "pull_request_labels": {
+ "name": "pull_request_labels",
+ "columns": {
+ "pull_request_id": {
+ "name": "pull_request_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "color": {
+ "name": "color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_prl_name": {
+ "name": "idx_prl_name",
+ "columns": ["name"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "pull_request_labels_pull_request_id_pull_requests_url_fk": {
+ "name": "pull_request_labels_pull_request_id_pull_requests_url_fk",
+ "tableFrom": "pull_request_labels",
+ "tableTo": "pull_requests",
+ "columnsFrom": ["pull_request_id"],
+ "columnsTo": ["url"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "pull_request_labels_pull_request_id_name_pk": {
+ "columns": ["pull_request_id", "name"],
+ "name": "pull_request_labels_pull_request_id_name_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "pull_request_users": {
+ "name": "pull_request_users",
+ "columns": {
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_name": {
+ "name": "user_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "display_name": {
+ "name": "display_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "avatar_url": {
+ "name": "avatar_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "user_updated_at": {
+ "name": "user_updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "user_created_at": {
+ "name": "user_created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "pull_requests": {
+ "name": "pull_requests",
+ "columns": {
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "provider": {
+ "name": "provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'github'"
+ },
+ "repository_url": {
+ "name": "repository_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "base_ref_name": {
+ "name": "base_ref_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "base_ref_oid": {
+ "name": "base_ref_oid",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "head_repository_url": {
+ "name": "head_repository_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "head_ref_name": {
+ "name": "head_ref_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "head_ref_oid": {
+ "name": "head_ref_oid",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "identifier": {
+ "name": "identifier",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'open'"
+ },
+ "is_draft": {
+ "name": "is_draft",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "author_user_id": {
+ "name": "author_user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "additions": {
+ "name": "additions",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "deletions": {
+ "name": "deletions",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "changed_files": {
+ "name": "changed_files",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "commit_count": {
+ "name": "commit_count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "mergeable_status": {
+ "name": "mergeable_status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "merge_state_status": {
+ "name": "merge_state_status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "review_decision": {
+ "name": "review_decision",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "pull_request_created_at": {
+ "name": "pull_request_created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "pull_request_updated_at": {
+ "name": "pull_request_updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_pull_requests_url": {
+ "name": "idx_pull_requests_url",
+ "columns": ["url"],
+ "isUnique": true
+ },
+ "idx_pull_requests_repository_url": {
+ "name": "idx_pull_requests_repository_url",
+ "columns": ["repository_url"],
+ "isUnique": false
+ },
+ "idx_pull_requests_head_repository_url": {
+ "name": "idx_pull_requests_head_repository_url",
+ "columns": ["head_repository_url"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "pull_requests_author_user_id_pull_request_users_user_id_fk": {
+ "name": "pull_requests_author_user_id_pull_request_users_user_id_fk",
+ "tableFrom": "pull_requests",
+ "tableTo": "pull_request_users",
+ "columnsFrom": ["author_user_id"],
+ "columnsTo": ["user_id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "ssh_connections": {
+ "name": "ssh_connections",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "host": {
+ "name": "host",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "port": {
+ "name": "port",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 22
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "auth_type": {
+ "name": "auth_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'agent'"
+ },
+ "private_key_path": {
+ "name": "private_key_path",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "use_agent": {
+ "name": "use_agent",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_ssh_connections_name": {
+ "name": "idx_ssh_connections_name",
+ "columns": ["name"],
+ "isUnique": true
+ },
+ "idx_ssh_connections_host": {
+ "name": "idx_ssh_connections_host",
+ "columns": ["host"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "tasks": {
+ "name": "tasks",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "project_id": {
+ "name": "project_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "source_branch": {
+ "name": "source_branch",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "task_branch": {
+ "name": "task_branch",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "linked_issue": {
+ "name": "linked_issue",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "archived_at": {
+ "name": "archived_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "last_interacted_at": {
+ "name": "last_interacted_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "status_changed_at": {
+ "name": "status_changed_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "is_pinned": {
+ "name": "is_pinned",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ },
+ "workspace_provider": {
+ "name": "workspace_provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "workspace_provider_data": {
+ "name": "workspace_provider_data",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "idx_tasks_project_id": {
+ "name": "idx_tasks_project_id",
+ "columns": ["project_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "tasks_project_id_projects_id_fk": {
+ "name": "tasks_project_id_projects_id_fk",
+ "tableFrom": "tasks",
+ "tableTo": "projects",
+ "columnsFrom": ["project_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "terminals": {
+ "name": "terminals",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "project_id": {
+ "name": "project_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "task_id": {
+ "name": "task_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "ssh": {
+ "name": "ssh",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "CURRENT_TIMESTAMP"
+ }
+ },
+ "indexes": {
+ "idx_terminals_task_id": {
+ "name": "idx_terminals_task_id",
+ "columns": ["task_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "terminals_project_id_projects_id_fk": {
+ "name": "terminals_project_id_projects_id_fk",
+ "tableFrom": "terminals",
+ "tableTo": "projects",
+ "columnsFrom": ["project_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "terminals_task_id_tasks_id_fk": {
+ "name": "terminals_task_id_tasks_id_fk",
+ "tableFrom": "terminals",
+ "tableTo": "tasks",
+ "columnsFrom": ["task_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ }
+ },
+ "enums": {},
+ "_meta": {
+ "schemas": {},
+ "tables": {},
+ "columns": {}
+ },
+ "internal": {
+ "indexes": {}
+ }
+}
diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json
index e9a35926ba..5bb2bcc089 100644
--- a/drizzle/meta/_journal.json
+++ b/drizzle/meta/_journal.json
@@ -50,6 +50,27 @@
"when": 1776959681864,
"tag": "0006_bumpy_gamma_corps",
"breakpoints": true
+ },
+ {
+ "idx": 7,
+ "version": "6",
+ "when": 1777399834705,
+ "tag": "0007_bent_spitfire",
+ "breakpoints": true
+ },
+ {
+ "idx": 8,
+ "version": "6",
+ "when": 1778075084353,
+ "tag": "0008_past_shinko_yamashiro",
+ "breakpoints": true
+ },
+ {
+ "idx": 9,
+ "version": "6",
+ "when": 1778239261398,
+ "tag": "0009_lean_goblin_queen",
+ "breakpoints": true
}
]
}
diff --git a/electron-builder.canary.config.ts b/electron-builder.canary.config.ts
new file mode 100644
index 0000000000..06c8de3c49
--- /dev/null
+++ b/electron-builder.canary.config.ts
@@ -0,0 +1,79 @@
+import type { Configuration } from 'electron-builder';
+import {
+ APP_ID,
+ ARTIFACT_PREFIX,
+ PRODUCT_NAME,
+ R2_BASE_URL,
+ UPDATE_CHANNEL,
+} from './src/shared/app-identity.canary';
+
+const config: Configuration = {
+ appId: APP_ID,
+ productName: PRODUCT_NAME,
+ directories: { output: 'release' },
+ artifactName: `${ARTIFACT_PREFIX}-\${arch}.\${ext}`,
+ publish: [
+ {
+ provider: 'generic',
+ url: R2_BASE_URL,
+ channel: UPDATE_CHANNEL,
+ },
+ ],
+ generateUpdatesFilesForAllChannels: false,
+ files: ['out/**/*', 'node_modules/**/*', 'drizzle/**/*'],
+ asarUnpack: [
+ 'node_modules/better-sqlite3/**',
+ 'node_modules/node-pty/**',
+ 'node_modules/@parcel/watcher/**',
+ '**/*.node',
+ ],
+ mac: {
+ category: 'public.app-category.developer-tools',
+ hardenedRuntime: true,
+ entitlements: 'build/entitlements.mac.plist',
+ entitlementsInherit: 'build/entitlements.mac.plist',
+ target: [
+ { target: 'dmg', arch: ['arm64'] },
+ { target: 'zip', arch: ['arm64'] },
+ ],
+ icon: 'src/assets/images/emdash/emdash-canary.icns',
+ notarize: false,
+ },
+ dmg: {
+ icon: 'src/assets/images/emdash/emdash-canary.icns',
+ },
+ linux: {
+ category: 'Development',
+ target: [
+ { target: 'AppImage', arch: ['x64'] },
+ { target: 'deb', arch: ['x64'] },
+ { target: 'rpm', arch: ['x64'] },
+ ],
+ },
+ win: {
+ icon: 'src/assets/images/emdash/app-icon-canary.png',
+ target: [
+ { target: 'nsis', arch: ['x64'] },
+ { target: 'msi', arch: ['x64'] },
+ ],
+ azureSignOptions: {
+ publisherName: 'General Action, Inc.',
+ endpoint: 'https://eus.codesigning.azure.net/',
+ certificateProfileName: 'emdash-public',
+ codeSigningAccountName: 'emdash',
+ },
+ },
+ msi: {
+ oneClick: false,
+ perMachine: false,
+ },
+ nsis: {
+ differentialPackage: true,
+ oneClick: false,
+ allowToChangeInstallationDirectory: true,
+ perMachine: false,
+ },
+ npmRebuild: false,
+};
+
+export default config;
diff --git a/eslint.config.ts b/eslint.config.ts
new file mode 100644
index 0000000000..4584ee0751
--- /dev/null
+++ b/eslint.config.ts
@@ -0,0 +1,63 @@
+import eslint from '@eslint/js';
+import reactHooks from 'eslint-plugin-react-hooks';
+import { globalIgnores } from 'eslint/config';
+import globals from 'globals';
+import tseslint from 'typescript-eslint';
+
+export default tseslint.config(
+ globalIgnores(['dist/**', 'out/**', 'build/**', 'node_modules/**', '**/_*/**']),
+
+ eslint.configs.recommended,
+ ...tseslint.configs.recommended,
+ reactHooks.configs.flat.recommended,
+
+ // Non-type-aware rules for all TS/TSX files
+ {
+ files: ['**/*.{ts,tsx}'],
+ languageOptions: {
+ globals: { ...globals.browser, ...globals.node, ...globals.es2020 },
+ },
+ rules: {
+ '@typescript-eslint/no-unused-vars': [
+ 'error',
+ { argsIgnorePattern: '^_', varsIgnorePattern: '^_' },
+ ],
+ 'prefer-const': 'error',
+ '@typescript-eslint/no-explicit-any': 'warn',
+ '@typescript-eslint/consistent-type-imports': [
+ 'warn',
+ { prefer: 'type-imports', fixStyle: 'inline-type-imports' },
+ ],
+ 'no-empty': ['warn', { allowEmptyCatch: true }],
+ 'no-control-regex': 'off',
+ },
+ },
+
+ // Type-aware rules scoped to src/ only (config files like vitest.config.ts are not in tsconfig)
+ {
+ files: ['src/**/*.{ts,tsx}'],
+ languageOptions: {
+ parserOptions: {
+ project: true,
+ tsconfigRootDir: import.meta.dirname,
+ },
+ },
+ rules: {
+ '@typescript-eslint/no-floating-promises': 'warn',
+ // Allow async functions as React event handler attributes (onClick={asyncFn} is idiomatic)
+ '@typescript-eslint/no-misused-promises': [
+ 'warn',
+ { checksVoidReturn: { attributes: false } },
+ ],
+ '@typescript-eslint/await-thenable': 'warn',
+ },
+ },
+
+ // Relax rules for test files
+ {
+ files: ['**/*.test.{ts,tsx}'],
+ rules: {
+ '@typescript-eslint/no-explicit-any': 'off',
+ },
+ }
+);
diff --git a/flake.nix b/flake.nix
index 37917e95c4..b39da79770 100644
--- a/flake.nix
+++ b/flake.nix
@@ -179,7 +179,7 @@ EOF
meta = {
description = "Emdash – multi-agent orchestration desktop app";
homepage = "https://emdash.sh";
- license = lib.licenses.mit;
+ license = lib.licenses.asl20;
platforms = [ "x86_64-linux" ];
};
}
diff --git a/package.json b/package.json
index 39fb53662e..5e558c67c4 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,8 @@
{
"name": "emdash",
- "version": "1.1.3",
+ "version": "1.1.13",
"description": "A cross-platform Electron app that orchestrates multiple coding agents in parallel",
+ "license": "Apache-2.0",
"type": "module",
"main": "./out/main/index.js",
"packageManager": "pnpm@10.28.2",
@@ -28,7 +29,7 @@
"run:docker-ssh": "docker compose up --build -d",
"clean": "rm -rf node_modules dist",
"reset": "pnpm run clean && pnpm install",
- "lint": "eslint . --ext .ts,.tsx",
+ "lint": "eslint . --cache --cache-strategy content --cache-location node_modules/.cache/eslint/.eslintcache",
"format": "prettier --write .",
"format:check": "prettier --check .",
"typecheck": "tsc --noEmit && tsc --noEmit -p scripts/release/tsconfig.json",
@@ -53,25 +54,24 @@
},
"devDependencies": {
"@electron/rebuild": "^4.0.1",
+ "@eslint/js": "^9.0.0",
"@ianvs/prettier-plugin-sort-imports": "^4.7.1",
"@tailwindcss/vite": "^4.2.1",
"@types/node": "^20.10.0",
"@types/react": "^19.0.0",
"@types/react-dom": "^19.0.0",
"@types/react-syntax-highlighter": "^15.5.13",
- "@typescript-eslint/eslint-plugin": "^6.14.0",
- "@typescript-eslint/parser": "^6.14.0",
"@vitejs/plugin-react": "^4.7.0",
"@vitest/browser": "^4.1.0",
"@vitest/browser-playwright": "^4.1.0",
"@vitest/browser-preview": "^4.1.0",
"concurrently": "^8.2.2",
+ "dotenv": "^17.4.2",
"drizzle-kit": "^0.24.2",
"electron": "^40.7.0",
"electron-builder": "^26.8.1",
"electron-vite": "^5.0.0",
- "eslint": "^8.55.0",
- "eslint-plugin-import": "^2.32.0",
+ "eslint": "^9.0.0",
"eslint-plugin-react-hooks": "^7.0.0",
"husky": "^9.1.7",
"jsdom": "^29.0.2",
@@ -82,6 +82,7 @@
"s3mini": "^0.9.4",
"tailwindcss": "^4.2.1",
"typescript": "^6.0.2",
+ "typescript-eslint": "^8.0.0",
"vite": "^6.4.1",
"vitest": "^4.1.0",
"vitest-browser-react": "^2.1.0"
@@ -156,7 +157,6 @@
"motion": "^12.23.12",
"nbranch": "^0.1.0",
"node-pty": "1.1.0",
- "posthog-js": "^1.297.2",
"react": "^19.2.0",
"react-dom": "^19.2.0",
"react-icons": "^5.5.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 81a1ef8aba..7119b1e0a6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -215,9 +215,6 @@ importers:
node-pty:
specifier: 1.1.0
version: 1.1.0
- posthog-js:
- specifier: ^1.297.2
- version: 1.342.1
react:
specifier: ^19.2.0
version: 19.2.4
@@ -276,6 +273,9 @@ importers:
'@electron/rebuild':
specifier: ^4.0.1
version: 4.0.3
+ '@eslint/js':
+ specifier: ^9.0.0
+ version: 9.39.4
'@ianvs/prettier-plugin-sort-imports':
specifier: ^4.7.1
version: 4.7.1(prettier@3.6.2)
@@ -294,12 +294,6 @@ importers:
'@types/react-syntax-highlighter':
specifier: ^15.5.13
version: 15.5.13
- '@typescript-eslint/eslint-plugin':
- specifier: ^6.14.0
- version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint@8.57.1)(typescript@6.0.2)
- '@typescript-eslint/parser':
- specifier: ^6.14.0
- version: 6.21.0(eslint@8.57.1)(typescript@6.0.2)
'@vitejs/plugin-react':
specifier: ^4.7.0
version: 4.7.0(vite@6.4.1(@types/node@20.19.32)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.8.2))
@@ -315,6 +309,9 @@ importers:
concurrently:
specifier: ^8.2.2
version: 8.2.2
+ dotenv:
+ specifier: ^17.4.2
+ version: 17.4.2
drizzle-kit:
specifier: ^0.24.2
version: 0.24.2
@@ -328,14 +325,11 @@ importers:
specifier: ^5.0.0
version: 5.0.0(vite@6.4.1(@types/node@20.19.32)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.8.2))
eslint:
- specifier: ^8.55.0
- version: 8.57.1
- eslint-plugin-import:
- specifier: ^2.32.0
- version: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint@8.57.1)
+ specifier: ^9.0.0
+ version: 9.39.4(jiti@2.6.1)
eslint-plugin-react-hooks:
specifier: ^7.0.0
- version: 7.0.1(eslint@8.57.1)
+ version: 7.0.1(eslint@9.39.4(jiti@2.6.1))
husky:
specifier: ^9.1.7
version: 9.1.7
@@ -363,6 +357,9 @@ importers:
typescript:
specifier: ^6.0.2
version: 6.0.2
+ typescript-eslint:
+ specifier: ^8.0.0
+ version: 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
vite:
specifier: ^6.4.1
version: 6.4.1(@types/node@20.19.32)(jiti@2.6.1)(lightningcss@1.31.1)(yaml@2.8.2)
@@ -1113,13 +1110,33 @@ packages:
resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/eslintrc@2.1.4':
- resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@eslint/config-array@0.21.2':
+ resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@8.57.1':
- resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@eslint/config-helpers@0.4.2':
+ resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/core@0.17.0':
+ resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/eslintrc@3.3.5':
+ resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/js@9.39.4':
+ resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/object-schema@2.1.7':
+ resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/plugin-kit@0.4.1':
+ resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@exodus/bytes@1.15.0':
resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==}
@@ -1180,18 +1197,25 @@ packages:
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
- '@humanwhocodes/config-array@0.13.0':
- resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==}
- engines: {node: '>=10.10.0'}
- deprecated: Use @eslint/config-array instead
+ '@humanfs/core@0.19.2':
+ resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/node@0.16.8':
+ resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/types@0.15.0':
+ resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==}
+ engines: {node: '>=18.18.0'}
'@humanwhocodes/module-importer@1.0.1':
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
engines: {node: '>=12.22'}
- '@humanwhocodes/object-schema@2.0.3':
- resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
- deprecated: Use @eslint/object-schema instead
+ '@humanwhocodes/retry@0.4.3':
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+ engines: {node: '>=18.18'}
'@ianvs/prettier-plugin-sort-imports@4.7.1':
resolution: {integrity: sha512-jmTNYGlg95tlsoG3JLCcuC4BrFELJtLirLAkQW/71lXSyOhVt/Xj7xWbbGcuVbNq1gwWgSyMrPjJc9Z30hynVw==}
@@ -1282,18 +1306,6 @@ packages:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- '@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'}
-
'@npmcli/agent@3.0.0':
resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==}
engines: {node: ^18.17.0 || >=20.5.0}
@@ -1374,78 +1386,10 @@ packages:
'@octokit/types@16.0.0':
resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==}
- '@opentelemetry/api-logs@0.208.0':
- resolution: {integrity: sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg==}
- engines: {node: '>=8.0.0'}
-
'@opentelemetry/api@1.9.0':
resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
engines: {node: '>=8.0.0'}
- '@opentelemetry/core@2.2.0':
- resolution: {integrity: sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.0.0 <1.10.0'
-
- '@opentelemetry/core@2.5.0':
- resolution: {integrity: sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.0.0 <1.10.0'
-
- '@opentelemetry/exporter-logs-otlp-http@0.208.0':
- resolution: {integrity: sha512-jOv40Bs9jy9bZVLo/i8FwUiuCvbjWDI+ZW13wimJm4LjnlwJxGgB+N/VWOZUTpM+ah/awXeQqKdNlpLf2EjvYg==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/otlp-exporter-base@0.208.0':
- resolution: {integrity: sha512-gMd39gIfVb2OgxldxUtOwGJYSH8P1kVFFlJLuut32L6KgUC4gl1dMhn+YC2mGn0bDOiQYSk/uHOdSjuKp58vvA==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/otlp-transformer@0.208.0':
- resolution: {integrity: sha512-DCFPY8C6lAQHUNkzcNT9R+qYExvsk6C5Bto2pbNxgicpcSWbe2WHShLxkOxIdNcBiYPdVHv/e7vH7K6TI+C+fQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/resources@2.2.0':
- resolution: {integrity: sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.3.0 <1.10.0'
-
- '@opentelemetry/resources@2.5.0':
- resolution: {integrity: sha512-F8W52ApePshpoSrfsSk1H2yJn9aKjCrbpQF1M9Qii0GHzbfVeFUB+rc3X4aggyZD8x9Gu3Slua+s6krmq6Dt8g==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.3.0 <1.10.0'
-
- '@opentelemetry/sdk-logs@0.208.0':
- resolution: {integrity: sha512-QlAyL1jRpOeaqx7/leG1vJMp84g0xKP6gJmfELBpnI4O/9xPX+Hu5m1POk9Kl+veNkyth5t19hRlN6tNY1sjbA==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.4.0 <1.10.0'
-
- '@opentelemetry/sdk-metrics@2.2.0':
- resolution: {integrity: sha512-G5KYP6+VJMZzpGipQw7Giif48h6SGQ2PFKEYCybeXJsOCB4fp8azqMAAzE5lnnHK3ZVwYQrgmFbsUJO/zOnwGw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.9.0 <1.10.0'
-
- '@opentelemetry/sdk-trace-base@2.2.0':
- resolution: {integrity: sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.3.0 <1.10.0'
-
- '@opentelemetry/semantic-conventions@1.39.0':
- resolution: {integrity: sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==}
- engines: {node: '>=14'}
-
'@parcel/watcher-android-arm64@2.5.6':
resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==}
engines: {node: '>= 10.0.0'}
@@ -1541,45 +1485,9 @@ packages:
'@polka/url@1.0.0-next.29':
resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
- '@posthog/core@1.20.1':
- resolution: {integrity: sha512-uoTmWkYCtLYFpiK37/JCq+BuCA/OZn1qQZn5cPv1EEKt3ni3Zgg48xWCnSEyGFl5KKSXlfCruiRTwnbAtCgrBA==}
-
- '@posthog/types@1.342.1':
- resolution: {integrity: sha512-bcyBdO88FWTkd5AVTa4Nu8T7RfY0WJrG7WMCXum/rcvNjYhS3DmOfKf8o/Bt56vA3J3yeU0vbgrmltYVoTAfaA==}
-
'@preact/signals-core@1.14.1':
resolution: {integrity: sha512-vxPpfXqrwUe9lpjqfYNjAF/0RF/eFGeLgdJzdmIIZjpOnTmGmAB4BjWone562mJGMRP4frU6iZ6ei3PDsu52Ng==}
- '@protobufjs/aspromise@1.1.2':
- resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
-
- '@protobufjs/base64@1.1.2':
- resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==}
-
- '@protobufjs/codegen@2.0.4':
- resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==}
-
- '@protobufjs/eventemitter@1.1.0':
- resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==}
-
- '@protobufjs/fetch@1.1.0':
- resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==}
-
- '@protobufjs/float@1.0.2':
- resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
-
- '@protobufjs/inquire@1.1.0':
- resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==}
-
- '@protobufjs/path@1.1.2':
- resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==}
-
- '@protobufjs/pool@1.1.0':
- resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==}
-
- '@protobufjs/utf8@1.1.0':
- resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==}
-
'@radix-ui/number@1.1.1':
resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==}
@@ -2264,9 +2172,6 @@ packages:
cpu: [x64]
os: [win32]
- '@rtsao/scc@1.1.0':
- resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
-
'@shikijs/core@3.22.0':
resolution: {integrity: sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==}
@@ -2662,9 +2567,6 @@ packages:
'@types/responselike@1.0.3':
resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==}
- '@types/semver@7.7.1':
- resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==}
-
'@types/ssh2@1.15.5':
resolution: {integrity: sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==}
@@ -2686,63 +2588,64 @@ packages:
'@types/yauzl@2.10.3':
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
- '@typescript-eslint/eslint-plugin@6.21.0':
- resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ '@typescript-eslint/eslint-plugin@8.59.0':
+ resolution: {integrity: sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
- eslint: ^7.0.0 || ^8.0.0
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
+ '@typescript-eslint/parser': ^8.59.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/parser@6.21.0':
- resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ '@typescript-eslint/parser@8.59.0':
+ resolution: {integrity: sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^7.0.0 || ^8.0.0
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
+
+ '@typescript-eslint/project-service@8.59.0':
+ resolution: {integrity: sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/scope-manager@6.21.0':
- resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ '@typescript-eslint/scope-manager@8.59.0':
+ resolution: {integrity: sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/type-utils@6.21.0':
- resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ '@typescript-eslint/tsconfig-utils@8.59.0':
+ resolution: {integrity: sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^7.0.0 || ^8.0.0
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/types@6.21.0':
- resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ '@typescript-eslint/type-utils@8.59.0':
+ resolution: {integrity: sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
+
+ '@typescript-eslint/types@8.59.0':
+ resolution: {integrity: sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@6.21.0':
- resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ '@typescript-eslint/typescript-estree@8.59.0':
+ resolution: {integrity: sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/utils@6.21.0':
- resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ '@typescript-eslint/utils@8.59.0':
+ resolution: {integrity: sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^7.0.0 || ^8.0.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/visitor-keys@6.21.0':
- resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==}
- engines: {node: ^16.0.0 || >=18.0.0}
+ '@typescript-eslint/visitor-keys@8.59.0':
+ resolution: {integrity: sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
@@ -2857,6 +2760,9 @@ packages:
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ ajv@6.15.0:
+ resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==}
+
allotment@1.20.5:
resolution: {integrity: sha512-7i4NT7ieXEyAd5lBrXmE7WHz/e7hRuo97+j+TwrPE85ha6kyFURoc76nom0dWSZ1pTKVEAMJy/+f3/Isfu/41A==}
peerDependencies:
@@ -2937,34 +2843,6 @@ packages:
aria-query@5.3.0:
resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
- array-buffer-byte-length@1.0.2:
- resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
- engines: {node: '>= 0.4'}
-
- array-includes@3.1.9:
- resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==}
- engines: {node: '>= 0.4'}
-
- array-union@2.1.0:
- resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
- engines: {node: '>=8'}
-
- array.prototype.findlastindex@1.2.6:
- resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==}
- engines: {node: '>= 0.4'}
-
- array.prototype.flat@1.3.3:
- resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
- engines: {node: '>= 0.4'}
-
- array.prototype.flatmap@1.3.3:
- resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
- engines: {node: '>= 0.4'}
-
- arraybuffer.prototype.slice@1.0.4:
- resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
- engines: {node: '>= 0.4'}
-
asn1@0.2.6:
resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==}
@@ -2984,10 +2862,6 @@ packages:
resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==}
engines: {node: '>=0.12.0'}
- async-function@1.0.0:
- resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
- engines: {node: '>= 0.4'}
-
async@3.2.6:
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
@@ -2998,10 +2872,6 @@ packages:
resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
engines: {node: '>= 4.0.0'}
- available-typed-arrays@1.0.7:
- resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
- engines: {node: '>= 0.4'}
-
axios@1.14.0:
resolution: {integrity: sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ==}
@@ -3125,10 +2995,6 @@ packages:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
- call-bind@1.0.8:
- resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
- engines: {node: '>= 0.4'}
-
call-bound@1.0.4:
resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
engines: {node: '>= 0.4'}
@@ -3333,9 +3199,6 @@ packages:
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- core-js@3.48.0:
- resolution: {integrity: sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==}
-
core-util-is@1.0.2:
resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
@@ -3535,18 +3398,6 @@ packages:
resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==}
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
- data-view-buffer@1.0.2:
- resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
- engines: {node: '>= 0.4'}
-
- data-view-byte-length@1.0.2:
- resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
- engines: {node: '>= 0.4'}
-
- data-view-byte-offset@1.0.1:
- resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
- engines: {node: '>= 0.4'}
-
date-fns@2.30.0:
resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
engines: {node: '>=0.11'}
@@ -3557,14 +3408,6 @@ packages:
dayjs@1.11.19:
resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==}
- debug@3.2.7:
- resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
@@ -3646,10 +3489,6 @@ packages:
dir-compare@4.2.0:
resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==}
- dir-glob@3.0.1:
- resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
- engines: {node: '>=8'}
-
dmg-builder@26.8.1:
resolution: {integrity: sha512-glMJgnTreo8CFINujtAhCgN96QAqApDMZ8Vl1r8f0QT8QprvC1UCltV4CcWj20YoIyLZx6IUskaJZ0NV8fokcg==}
@@ -3659,14 +3498,6 @@ packages:
os: [darwin]
hasBin: true
- doctrine@2.1.0:
- resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
- engines: {node: '>=0.10.0'}
-
- doctrine@3.0.0:
- resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
- engines: {node: '>=6.0.0'}
-
dom-accessibility-api@0.5.16:
resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
@@ -3687,6 +3518,10 @@ packages:
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
engines: {node: '>=12'}
+ dotenv@17.4.2:
+ resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==}
+ engines: {node: '>=12'}
+
dotenv@9.0.2:
resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==}
engines: {node: '>=10'}
@@ -3874,10 +3709,6 @@ packages:
err-code@2.0.3:
resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
- es-abstract@1.24.1:
- resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==}
- engines: {node: '>= 0.4'}
-
es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'}
@@ -3897,14 +3728,6 @@ packages:
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
engines: {node: '>= 0.4'}
- es-shim-unscopables@1.1.0:
- resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
- engines: {node: '>= 0.4'}
-
- es-to-primitive@1.3.0:
- resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
- engines: {node: '>= 0.4'}
-
es6-error@4.1.1:
resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==}
@@ -3940,63 +3763,41 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
- eslint-import-resolver-node@0.3.9:
- resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
-
- eslint-module-utils@2.12.1:
- resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==}
- engines: {node: '>=4'}
- peerDependencies:
- '@typescript-eslint/parser': '*'
- eslint: '*'
- eslint-import-resolver-node: '*'
- eslint-import-resolver-typescript: '*'
- eslint-import-resolver-webpack: '*'
- peerDependenciesMeta:
- '@typescript-eslint/parser':
- optional: true
- eslint:
- optional: true
- eslint-import-resolver-node:
- optional: true
- eslint-import-resolver-typescript:
- optional: true
- eslint-import-resolver-webpack:
- optional: true
-
- eslint-plugin-import@2.32.0:
- resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==}
- engines: {node: '>=4'}
- peerDependencies:
- '@typescript-eslint/parser': '*'
- eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
- peerDependenciesMeta:
- '@typescript-eslint/parser':
- optional: true
-
eslint-plugin-react-hooks@7.0.1:
resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==}
engines: {node: '>=18'}
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
- eslint-scope@7.2.2:
- resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ eslint-scope@8.4.0:
+ resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint-visitor-keys@3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- eslint@8.57.1:
- resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
+ eslint-visitor-keys@4.2.1:
+ resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint-visitor-keys@5.0.1:
+ resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ eslint@9.39.4:
+ resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
- espree@9.6.1:
- resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ espree@10.4.0:
+ resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
esquery@1.7.0:
resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
@@ -4056,19 +3857,12 @@ packages:
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
- fast-glob@3.3.3:
- resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
- engines: {node: '>=8.6.0'}
-
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- fastq@1.20.1:
- resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
-
fault@1.0.4:
resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==}
@@ -4084,12 +3878,9 @@ packages:
picomatch:
optional: true
- fflate@0.4.8:
- resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==}
-
- file-entry-cache@6.0.1:
- resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
- engines: {node: ^10.12.0 || >=12.0.0}
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
file-uri-to-path@1.0.0:
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
@@ -4109,9 +3900,9 @@ packages:
resolution: {integrity: sha512-g31GX207Tt+psI53ZSaB1egprYbEN0ZYl90aKcO22A2LmCNnFsSq3b5YpoKp3E/QEiWByTXGJOkFQG4S07Bc1A==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- flat-cache@3.2.0:
- resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
- engines: {node: ^10.12.0 || >=12.0.0}
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
@@ -4125,10 +3916,6 @@ packages:
debug:
optional: true
- for-each@0.3.5:
- resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
- engines: {node: '>= 0.4'}
-
foreground-child@3.3.1:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines: {node: '>=14'}
@@ -4198,22 +3985,11 @@ packages:
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
- function.prototype.name@1.1.8:
- resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
- engines: {node: '>= 0.4'}
-
- functions-have-names@1.2.3:
- resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
-
gauge@4.0.4:
resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
deprecated: This package is no longer supported.
- generator-function@2.0.1:
- resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
- engines: {node: '>= 0.4'}
-
gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
@@ -4250,20 +4026,12 @@ packages:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
- get-symbol-description@1.1.0:
- resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
- engines: {node: '>= 0.4'}
-
get-tsconfig@4.13.6:
resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==}
github-from-package@0.0.0:
resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
- glob-parent@5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
-
glob-parent@6.0.2:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
@@ -4285,18 +4053,14 @@ packages:
resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==}
engines: {node: '>=10.0'}
- globals@13.24.0:
- resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
- engines: {node: '>=8'}
+ globals@14.0.0:
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
globalthis@1.0.4:
resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
engines: {node: '>= 0.4'}
- globby@11.1.0:
- resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
- engines: {node: '>=10'}
-
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
@@ -4312,9 +4076,6 @@ packages:
resolution: {integrity: sha512-rXunEHF9M9EkMydTBux7+IryYXEZinRk6g8OBOGDBzo/qWJjhTxy86i5q7lQYpCLHN8Sqv1XX3OIOc7ka2gtvQ==}
engines: {node: '>=8.0.0'}
- graphemer@1.4.0:
- resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
-
graphql@16.13.1:
resolution: {integrity: sha512-gGgrVCoDKlIZ8fIqXBBb0pPKqDgki0Z/FSKNiQzSGj2uEYHr1tq5wmBegGwJx6QB5S5cM0khSBpi/JFHMCvsmQ==}
engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
@@ -4322,10 +4083,6 @@ packages:
hachure-fill@0.5.2:
resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==}
- has-bigints@1.1.0:
- resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
- engines: {node: '>= 0.4'}
-
has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
@@ -4333,10 +4090,6 @@ packages:
has-property-descriptors@1.0.2:
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
- has-proto@1.2.0:
- resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
- engines: {node: '>= 0.4'}
-
has-symbols@1.1.0:
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
engines: {node: '>= 0.4'}
@@ -4489,6 +4242,10 @@ packages:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
+ ignore@7.0.5:
+ resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
+ engines: {node: '>= 4'}
+
import-fresh@3.3.1:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
@@ -4517,10 +4274,6 @@ packages:
inline-style-parser@0.2.7:
resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
- internal-slot@1.1.0:
- resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
- engines: {node: '>= 0.4'}
-
internmap@1.0.1:
resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==}
@@ -4544,42 +4297,10 @@ packages:
is-alphanumerical@2.0.1:
resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
- is-array-buffer@3.0.5:
- resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
- engines: {node: '>= 0.4'}
-
- is-async-function@2.1.1:
- resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
- engines: {node: '>= 0.4'}
-
- is-bigint@1.1.0:
- resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
- engines: {node: '>= 0.4'}
-
- is-boolean-object@1.2.2:
- resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
- engines: {node: '>= 0.4'}
-
- is-callable@1.2.7:
- resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
- engines: {node: '>= 0.4'}
-
is-ci@3.0.1:
resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
hasBin: true
- is-core-module@2.16.1:
- resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
- engines: {node: '>= 0.4'}
-
- is-data-view@1.0.2:
- resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
- engines: {node: '>= 0.4'}
-
- is-date-object@1.1.0:
- resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
- engines: {node: '>= 0.4'}
-
is-decimal@1.0.4:
resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==}
@@ -4590,10 +4311,6 @@ packages:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
- is-finalizationregistry@1.1.1:
- resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
- engines: {node: '>= 0.4'}
-
is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
@@ -4602,10 +4319,6 @@ packages:
resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==}
engines: {node: '>=18'}
- is-generator-function@1.1.2:
- resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
- engines: {node: '>= 0.4'}
-
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
@@ -4623,26 +4336,10 @@ packages:
is-lambda@1.0.1:
resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==}
- is-map@2.0.3:
- resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
- engines: {node: '>= 0.4'}
-
- is-negative-zero@2.0.3:
- resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
- engines: {node: '>= 0.4'}
-
- is-number-object@1.1.1:
- resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
- engines: {node: '>= 0.4'}
-
is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
- is-path-inside@3.0.3:
- resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
- engines: {node: '>=8'}
-
is-plain-obj@4.1.0:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'}
@@ -4650,56 +4347,17 @@ packages:
is-potential-custom-element-name@1.0.1:
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
- is-regex@1.2.1:
- resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
- engines: {node: '>= 0.4'}
-
- is-set@2.0.3:
- resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
- engines: {node: '>= 0.4'}
-
- is-shared-array-buffer@1.0.4:
- resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
- engines: {node: '>= 0.4'}
-
is-stream@2.0.1:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines: {node: '>=8'}
- is-string@1.1.1:
- resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
- engines: {node: '>= 0.4'}
-
- is-symbol@1.1.1:
- resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
- engines: {node: '>= 0.4'}
-
- is-typed-array@1.1.15:
- resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
- engines: {node: '>= 0.4'}
-
is-unicode-supported@0.1.0:
resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
engines: {node: '>=10'}
- is-weakmap@2.0.2:
- resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
- engines: {node: '>= 0.4'}
-
- is-weakref@1.1.1:
- resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
- engines: {node: '>= 0.4'}
-
- is-weakset@2.0.4:
- resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
- engines: {node: '>= 0.4'}
-
isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
- isarray@2.0.5:
- resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
-
isbinaryfile@4.0.10:
resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==}
engines: {node: '>= 8.0.0'}
@@ -4947,9 +4605,6 @@ packages:
resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
engines: {node: '>=18'}
- long@5.3.2:
- resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==}
-
longest-streak@3.1.0:
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
@@ -5078,10 +4733,6 @@ packages:
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
- merge2@1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
-
mermaid@11.12.2:
resolution: {integrity: sha512-n34QPDPEKmaeCG4WDMGy0OT6PSyxKCfy2pJgShP+Qow2KLrvWjclwbc3yXfSIf4BanqWEhQEpngWwNp/XhZt6w==}
@@ -5245,14 +4896,13 @@ packages:
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ minimatch@3.1.5:
+ resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==}
+
minimatch@5.1.6:
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
engines: {node: '>=10'}
- minimatch@9.0.3:
- resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
- engines: {node: '>=16 || 14 >=14.17'}
-
minimatch@9.0.5:
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -5467,22 +5117,6 @@ packages:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
- object.assign@4.1.7:
- resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
- engines: {node: '>= 0.4'}
-
- object.fromentries@2.0.8:
- resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
- engines: {node: '>= 0.4'}
-
- object.groupby@1.0.3:
- resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
- engines: {node: '>= 0.4'}
-
- object.values@1.2.1:
- resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
- engines: {node: '>= 0.4'}
-
obug@2.1.1:
resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
@@ -5511,10 +5145,6 @@ packages:
resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
engines: {node: '>=10'}
- own-keys@1.0.1:
- resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
- engines: {node: '>= 0.4'}
-
p-cancelable@2.1.1:
resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
engines: {node: '>=8'}
@@ -5572,9 +5202,6 @@ packages:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
- path-parse@1.0.7:
- resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
-
path-scurry@1.11.1:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
@@ -5583,10 +5210,6 @@ packages:
resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==}
engines: {node: 18 || 20 || >=22}
- 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==}
@@ -5639,20 +5262,10 @@ packages:
points-on-path@0.2.1:
resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==}
- possible-typed-array-names@1.1.0:
- resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
- engines: {node: '>= 0.4'}
-
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
- posthog-js@1.342.1:
- resolution: {integrity: sha512-mMnQhWuKj4ejFicLtFzr52InmqploOyW1eInqXBkaVqE1DPhczBDmwsd9MSggY8kv0EXm8zgK+2tzBJUKcX5yg==}
-
- preact@10.28.3:
- resolution: {integrity: sha512-tCmoRkPQLpBeWzpmbhryairGnhW9tKV6c6gr/w+RhoRoKEJwsjzipwp//1oCpGPOchvSLaAPlpcJi9MwMmoPyA==}
-
prebuild-install@7.1.3:
resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==}
engines: {node: '>=10'}
@@ -5772,10 +5385,6 @@ packages:
property-information@7.1.0:
resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
- protobufjs@7.5.4:
- resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==}
- engines: {node: '>=12.0.0'}
-
proxy-from-env@2.1.0:
resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==}
engines: {node: '>=10'}
@@ -5791,12 +5400,6 @@ packages:
resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==}
engines: {node: '>=0.6'}
- query-selector-shadow-dom@1.0.1:
- resolution: {integrity: sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==}
-
- queue-microtask@1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
-
quick-lru@5.1.1:
resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
engines: {node: '>=10'}
@@ -5904,10 +5507,6 @@ packages:
resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
engines: {node: '>= 20.19.0'}
- reflect.getprototypeof@1.0.10:
- resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
- engines: {node: '>= 0.4'}
-
refractor@3.6.0:
resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==}
@@ -5920,10 +5519,6 @@ packages:
regex@6.1.0:
resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==}
- regexp.prototype.flags@1.5.4:
- resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
- engines: {node: '>= 0.4'}
-
rehype-harden@1.1.7:
resolution: {integrity: sha512-j5DY0YSK2YavvNGV+qBHma15J9m0WZmRe8posT5AtKDS6TNWtMVTo6RiqF8SidfcASYz8f3k2J/1RWmq5zTXUw==}
@@ -5999,11 +5594,6 @@ packages:
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
- resolve@1.22.11:
- resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
- engines: {node: '>= 0.4'}
- hasBin: true
-
responselike@2.0.1:
resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==}
@@ -6019,10 +5609,6 @@ packages:
resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
engines: {node: '>= 4'}
- reusify@1.1.0:
- resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
- engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
@@ -6046,9 +5632,6 @@ packages:
roughjs@4.6.6:
resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==}
- run-parallel@1.2.0:
- resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
-
rw@1.3.3:
resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
@@ -6059,24 +5642,12 @@ packages:
resolution: {integrity: sha512-lA6p6JY0+lbcz/NJL8O/BKU8q96iA3f+wDO/QCg4QxOooEJwe0fomHZoeDJhs8TDDRTA40OVNY2E9wOQgAoAVw==}
engines: {node: '>=20'}
- safe-array-concat@1.1.3:
- resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
- engines: {node: '>=0.4'}
-
safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
- safe-push-apply@1.0.0:
- resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
- engines: {node: '>= 0.4'}
-
- safe-regex-test@1.1.0:
- resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
- engines: {node: '>= 0.4'}
-
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
@@ -6117,18 +5688,6 @@ packages:
set-blocking@2.0.0:
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
- set-function-length@1.2.2:
- resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
- engines: {node: '>= 0.4'}
-
- set-function-name@2.0.2:
- resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
- engines: {node: '>= 0.4'}
-
- set-proto@1.0.0:
- resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
- engines: {node: '>= 0.4'}
-
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -6192,10 +5751,6 @@ packages:
resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==}
engines: {node: '>=18'}
- slash@3.0.0:
- resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
- engines: {node: '>=8'}
-
slice-ansi@3.0.0:
resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
engines: {node: '>=8'}
@@ -6281,10 +5836,6 @@ packages:
std-env@4.0.0:
resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==}
- stop-iteration-iterator@1.1.0:
- resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
- engines: {node: '>= 0.4'}
-
stopword@3.1.5:
resolution: {integrity: sha512-OgLYGVFCNa430WOrj9tYZhQge5yg6vd6JsKredveAqEhdLVQkfrpnQIGjx0L9lLqzL4Kq4J8yNTcfQR/MpBwhg==}
@@ -6313,18 +5864,6 @@ packages:
resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==}
engines: {node: '>=20'}
- string.prototype.trim@1.2.10:
- resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
- engines: {node: '>= 0.4'}
-
- string.prototype.trimend@1.0.9:
- resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
- engines: {node: '>= 0.4'}
-
- string.prototype.trimstart@1.0.8:
- resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
- engines: {node: '>= 0.4'}
-
string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
@@ -6382,10 +5921,6 @@ packages:
resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
engines: {node: '>=10'}
- supports-preserve-symlinks-flag@1.0.0:
- resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
- engines: {node: '>= 0.4'}
-
symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
@@ -6424,9 +5959,6 @@ packages:
temp-file@3.4.0:
resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==}
- text-table@0.2.0:
- resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
-
tiny-async-pool@1.3.0:
resolution: {integrity: sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==}
@@ -6491,11 +6023,11 @@ packages:
truncate-utf8-bytes@1.0.2:
resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==}
- ts-api-utils@1.4.3:
- resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==}
- engines: {node: '>=16'}
+ ts-api-utils@2.5.0:
+ resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==}
+ engines: {node: '>=18.12'}
peerDependencies:
- typescript: '>=4.2.0'
+ typescript: '>=4.8.4'
ts-dedent@2.2.0:
resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
@@ -6524,25 +6056,12 @@ packages:
resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==}
engines: {node: '>=10'}
- type-fest@0.20.2:
- resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
- engines: {node: '>=10'}
-
- typed-array-buffer@1.0.3:
- resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
- engines: {node: '>= 0.4'}
-
- typed-array-byte-length@1.0.3:
- resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
- engines: {node: '>= 0.4'}
-
- typed-array-byte-offset@1.0.4:
- resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
- engines: {node: '>= 0.4'}
-
- typed-array-length@1.0.7:
- resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
- engines: {node: '>= 0.4'}
+ typescript-eslint@8.59.0:
+ resolution: {integrity: sha512-BU3ONW9X+v90EcCH9ZS6LMackcVtxRLlI3XrYyqZIwVSHIk7Qf7bFw1z0M9Q0IUxhTMZCf8piY9hTYaNEIASrw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
typescript@5.9.3:
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
@@ -6557,10 +6076,6 @@ packages:
ufo@1.6.3:
resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
- unbox-primitive@1.1.0:
- resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
- engines: {node: '>= 0.4'}
-
undici-types@5.26.5:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
@@ -6805,9 +6320,6 @@ packages:
web-namespaces@2.0.1:
resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
- web-vitals@5.1.0:
- resolution: {integrity: sha512-ArI3kx5jI0atlTtmV0fWU3fjpLmq/nD3Zr1iFFlJLaqa5wLBkUSzINwBPySCX/8jRyjlmy1Volw1kz1g9XE4Jg==}
-
webidl-conversions@8.0.1:
resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==}
engines: {node: '>=20'}
@@ -6820,22 +6332,6 @@ packages:
resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==}
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
- which-boxed-primitive@1.1.1:
- resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
- engines: {node: '>= 0.4'}
-
- which-builtin-type@1.2.1:
- resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
- engines: {node: '>= 0.4'}
-
- which-collection@1.0.2:
- resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
- engines: {node: '>= 0.4'}
-
- which-typed-array@1.1.20:
- resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==}
- engines: {node: '>= 0.4'}
-
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
@@ -7348,7 +6844,7 @@ snapshots:
debug: 4.4.3
dir-compare: 3.3.0
fs-extra: 9.1.0
- minimatch: 3.1.2
+ minimatch: 3.1.5
plist: 3.1.0
transitivePeerDependencies:
- supports-color
@@ -7588,28 +7084,51 @@ snapshots:
'@esbuild/win32-x64@0.25.12':
optional: true
- '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)':
+ '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.6.1))':
dependencies:
- eslint: 8.57.1
+ eslint: 9.39.4(jiti@2.6.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.2': {}
- '@eslint/eslintrc@2.1.4':
+ '@eslint/config-array@0.21.2':
dependencies:
- ajv: 6.12.6
+ '@eslint/object-schema': 2.1.7
+ debug: 4.4.3
+ minimatch: 3.1.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/config-helpers@0.4.2':
+ dependencies:
+ '@eslint/core': 0.17.0
+
+ '@eslint/core@0.17.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/eslintrc@3.3.5':
+ dependencies:
+ ajv: 6.15.0
debug: 4.4.3
- espree: 9.6.1
- globals: 13.24.0
+ espree: 10.4.0
+ globals: 14.0.0
ignore: 5.3.2
import-fresh: 3.3.1
js-yaml: 4.1.1
- minimatch: 3.1.2
+ minimatch: 3.1.5
strip-json-comments: 3.1.1
transitivePeerDependencies:
- supports-color
- '@eslint/js@8.57.1': {}
+ '@eslint/js@9.39.4': {}
+
+ '@eslint/object-schema@2.1.7': {}
+
+ '@eslint/plugin-kit@0.4.1':
+ dependencies:
+ '@eslint/core': 0.17.0
+ levn: 0.4.1
'@exodus/bytes@1.15.0': {}
@@ -7672,17 +7191,21 @@ snapshots:
dependencies:
graphql: 16.13.1
- '@humanwhocodes/config-array@0.13.0':
+ '@humanfs/core@0.19.2':
dependencies:
- '@humanwhocodes/object-schema': 2.0.3
- debug: 4.4.3
- minimatch: 3.1.2
- transitivePeerDependencies:
- - supports-color
+ '@humanfs/types': 0.15.0
+
+ '@humanfs/node@0.16.8':
+ dependencies:
+ '@humanfs/core': 0.19.2
+ '@humanfs/types': 0.15.0
+ '@humanwhocodes/retry': 0.4.3
+
+ '@humanfs/types@0.15.0': {}
'@humanwhocodes/module-importer@1.0.1': {}
- '@humanwhocodes/object-schema@2.0.3': {}
+ '@humanwhocodes/retry@0.4.3': {}
'@ianvs/prettier-plugin-sort-imports@4.7.1(prettier@3.6.2)':
dependencies:
@@ -7785,18 +7308,6 @@ snapshots:
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
- '@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
-
'@npmcli/agent@3.0.0':
dependencies:
agent-base: 7.1.4
@@ -7902,81 +7413,8 @@ snapshots:
dependencies:
'@octokit/openapi-types': 27.0.0
- '@opentelemetry/api-logs@0.208.0':
- dependencies:
- '@opentelemetry/api': 1.9.0
-
- '@opentelemetry/api@1.9.0': {}
-
- '@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/semantic-conventions': 1.39.0
-
- '@opentelemetry/core@2.5.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/semantic-conventions': 1.39.0
-
- '@opentelemetry/exporter-logs-otlp-http@0.208.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/api-logs': 0.208.0
- '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-exporter-base': 0.208.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0)
-
- '@opentelemetry/otlp-exporter-base@0.208.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0)
-
- '@opentelemetry/otlp-transformer@0.208.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/api-logs': 0.208.0
- '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-metrics': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0)
- protobufjs: 7.5.4
-
- '@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.39.0
-
- '@opentelemetry/resources@2.5.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.39.0
-
- '@opentelemetry/sdk-logs@0.208.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/api-logs': 0.208.0
- '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
-
- '@opentelemetry/sdk-metrics@2.2.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
-
- '@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.39.0
-
- '@opentelemetry/semantic-conventions@1.39.0': {}
+ '@opentelemetry/api@1.9.0':
+ optional: true
'@parcel/watcher-android-arm64@2.5.6':
optional: true
@@ -8043,37 +7481,8 @@ snapshots:
'@polka/url@1.0.0-next.29': {}
- '@posthog/core@1.20.1':
- dependencies:
- cross-spawn: 7.0.6
-
- '@posthog/types@1.342.1': {}
-
'@preact/signals-core@1.14.1': {}
- '@protobufjs/aspromise@1.1.2': {}
-
- '@protobufjs/base64@1.1.2': {}
-
- '@protobufjs/codegen@2.0.4': {}
-
- '@protobufjs/eventemitter@1.1.0': {}
-
- '@protobufjs/fetch@1.1.0':
- dependencies:
- '@protobufjs/aspromise': 1.1.2
- '@protobufjs/inquire': 1.1.0
-
- '@protobufjs/float@1.0.2': {}
-
- '@protobufjs/inquire@1.1.0': {}
-
- '@protobufjs/path@1.1.2': {}
-
- '@protobufjs/pool@1.1.0': {}
-
- '@protobufjs/utf8@1.1.0': {}
-
'@radix-ui/number@1.1.1': {}
'@radix-ui/primitive@1.1.3': {}
@@ -8710,8 +8119,6 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.57.1':
optional: true
- '@rtsao/scc@1.1.0': {}
-
'@shikijs/core@3.22.0':
dependencies:
'@shikijs/types': 3.22.0
@@ -9137,8 +8544,6 @@ snapshots:
dependencies:
'@types/node': 20.19.32
- '@types/semver@7.7.1': {}
-
'@types/ssh2@1.15.5':
dependencies:
'@types/node': 18.19.130
@@ -9160,91 +8565,96 @@ snapshots:
'@types/node': 20.19.32
optional: true
- '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint@8.57.1)(typescript@6.0.2)':
+ '@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@6.0.2)
- '@typescript-eslint/scope-manager': 6.21.0
- '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@6.0.2)
- '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@6.0.2)
- '@typescript-eslint/visitor-keys': 6.21.0
- debug: 4.4.3
- eslint: 8.57.1
- graphemer: 1.4.0
- ignore: 5.3.2
+ '@typescript-eslint/parser': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
+ '@typescript-eslint/scope-manager': 8.59.0
+ '@typescript-eslint/type-utils': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
+ '@typescript-eslint/utils': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
+ '@typescript-eslint/visitor-keys': 8.59.0
+ eslint: 9.39.4(jiti@2.6.1)
+ ignore: 7.0.5
natural-compare: 1.4.0
- semver: 7.7.4
- ts-api-utils: 1.4.3(typescript@6.0.2)
- optionalDependencies:
+ ts-api-utils: 2.5.0(typescript@6.0.2)
typescript: 6.0.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2)':
+ '@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)':
dependencies:
- '@typescript-eslint/scope-manager': 6.21.0
- '@typescript-eslint/types': 6.21.0
- '@typescript-eslint/typescript-estree': 6.21.0(typescript@6.0.2)
- '@typescript-eslint/visitor-keys': 6.21.0
+ '@typescript-eslint/scope-manager': 8.59.0
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.2)
+ '@typescript-eslint/visitor-keys': 8.59.0
+ debug: 4.4.3
+ eslint: 9.39.4(jiti@2.6.1)
+ typescript: 6.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/project-service@8.59.0(typescript@6.0.2)':
+ dependencies:
+ '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@6.0.2)
+ '@typescript-eslint/types': 8.59.0
debug: 4.4.3
- eslint: 8.57.1
- optionalDependencies:
typescript: 6.0.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@6.21.0':
+ '@typescript-eslint/scope-manager@8.59.0':
+ dependencies:
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/visitor-keys': 8.59.0
+
+ '@typescript-eslint/tsconfig-utils@8.59.0(typescript@6.0.2)':
dependencies:
- '@typescript-eslint/types': 6.21.0
- '@typescript-eslint/visitor-keys': 6.21.0
+ typescript: 6.0.2
- '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@6.0.2)':
+ '@typescript-eslint/type-utils@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)':
dependencies:
- '@typescript-eslint/typescript-estree': 6.21.0(typescript@6.0.2)
- '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@6.0.2)
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.2)
+ '@typescript-eslint/utils': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
debug: 4.4.3
- eslint: 8.57.1
- ts-api-utils: 1.4.3(typescript@6.0.2)
- optionalDependencies:
+ eslint: 9.39.4(jiti@2.6.1)
+ ts-api-utils: 2.5.0(typescript@6.0.2)
typescript: 6.0.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@6.21.0': {}
+ '@typescript-eslint/types@8.59.0': {}
- '@typescript-eslint/typescript-estree@6.21.0(typescript@6.0.2)':
+ '@typescript-eslint/typescript-estree@8.59.0(typescript@6.0.2)':
dependencies:
- '@typescript-eslint/types': 6.21.0
- '@typescript-eslint/visitor-keys': 6.21.0
+ '@typescript-eslint/project-service': 8.59.0(typescript@6.0.2)
+ '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@6.0.2)
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/visitor-keys': 8.59.0
debug: 4.4.3
- globby: 11.1.0
- is-glob: 4.0.3
- minimatch: 9.0.3
+ minimatch: 10.2.4
semver: 7.7.4
- ts-api-utils: 1.4.3(typescript@6.0.2)
- optionalDependencies:
+ tinyglobby: 0.2.15
+ ts-api-utils: 2.5.0(typescript@6.0.2)
typescript: 6.0.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@6.0.2)':
+ '@typescript-eslint/utils@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1)
- '@types/json-schema': 7.0.15
- '@types/semver': 7.7.1
- '@typescript-eslint/scope-manager': 6.21.0
- '@typescript-eslint/types': 6.21.0
- '@typescript-eslint/typescript-estree': 6.21.0(typescript@6.0.2)
- eslint: 8.57.1
- semver: 7.7.4
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1))
+ '@typescript-eslint/scope-manager': 8.59.0
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.2)
+ eslint: 9.39.4(jiti@2.6.1)
+ typescript: 6.0.2
transitivePeerDependencies:
- supports-color
- - typescript
- '@typescript-eslint/visitor-keys@6.21.0':
+ '@typescript-eslint/visitor-keys@8.59.0':
dependencies:
- '@typescript-eslint/types': 6.21.0
- eslint-visitor-keys: 3.4.3
+ '@typescript-eslint/types': 8.59.0
+ eslint-visitor-keys: 5.0.1
'@ungap/structured-clone@1.3.0': {}
@@ -9396,6 +8806,13 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
+ ajv@6.15.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
allotment@1.20.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
dependencies:
classnames: 2.5.1
@@ -9559,58 +8976,6 @@ snapshots:
dependencies:
dequal: 2.0.3
- array-buffer-byte-length@1.0.2:
- dependencies:
- call-bound: 1.0.4
- is-array-buffer: 3.0.5
-
- array-includes@3.1.9:
- dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- define-properties: 1.2.1
- es-abstract: 1.24.1
- es-object-atoms: 1.1.1
- get-intrinsic: 1.3.0
- is-string: 1.1.1
- math-intrinsics: 1.1.0
-
- array-union@2.1.0: {}
-
- array.prototype.findlastindex@1.2.6:
- dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- define-properties: 1.2.1
- es-abstract: 1.24.1
- es-errors: 1.3.0
- es-object-atoms: 1.1.1
- es-shim-unscopables: 1.1.0
-
- array.prototype.flat@1.3.3:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-abstract: 1.24.1
- es-shim-unscopables: 1.1.0
-
- array.prototype.flatmap@1.3.3:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-abstract: 1.24.1
- es-shim-unscopables: 1.1.0
-
- arraybuffer.prototype.slice@1.0.4:
- dependencies:
- array-buffer-byte-length: 1.0.2
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-abstract: 1.24.1
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
- is-array-buffer: 3.0.5
-
asn1@0.2.6:
dependencies:
safer-buffer: 2.1.2
@@ -9625,18 +8990,12 @@ snapshots:
async-exit-hook@2.0.1: {}
- async-function@1.0.0: {}
-
async@3.2.6: {}
asynckit@0.4.0: {}
at-least-node@1.0.0: {}
- available-typed-arrays@1.0.7:
- dependencies:
- possible-typed-array-names: 1.1.0
-
axios@1.14.0:
dependencies:
follow-redirects: 1.15.11
@@ -9842,13 +9201,6 @@ snapshots:
es-errors: 1.3.0
function-bind: 1.1.2
- call-bind@1.0.8:
- dependencies:
- call-bind-apply-helpers: 1.0.2
- es-define-property: 1.0.1
- get-intrinsic: 1.3.0
- set-function-length: 1.2.2
-
call-bound@1.0.4:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -10037,8 +9389,6 @@ snapshots:
convert-source-map@2.0.0: {}
- core-js@3.48.0: {}
-
core-util-is@1.0.2:
optional: true
@@ -10274,24 +9624,6 @@ snapshots:
transitivePeerDependencies:
- '@noble/hashes'
- data-view-buffer@1.0.2:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-data-view: 1.0.2
-
- data-view-byte-length@1.0.2:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-data-view: 1.0.2
-
- data-view-byte-offset@1.0.1:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-data-view: 1.0.2
-
date-fns@2.30.0:
dependencies:
'@babel/runtime': 7.28.6
@@ -10300,10 +9632,6 @@ snapshots:
dayjs@1.11.19: {}
- debug@3.2.7:
- dependencies:
- ms: 2.1.3
-
debug@4.4.3:
dependencies:
ms: 2.1.3
@@ -10335,12 +9663,14 @@ snapshots:
es-define-property: 1.0.1
es-errors: 1.3.0
gopd: 1.2.0
+ optional: true
define-properties@1.2.1:
dependencies:
define-data-property: 1.1.4
has-property-descriptors: 1.0.2
object-keys: 1.1.1
+ optional: true
delaunator@5.0.1:
dependencies:
@@ -10369,17 +9699,13 @@ snapshots:
dir-compare@3.3.0:
dependencies:
buffer-equal: 1.0.1
- minimatch: 3.1.2
+ minimatch: 3.1.5
dir-compare@4.2.0:
dependencies:
minimatch: 3.1.2
p-limit: 3.1.0
- dir-glob@3.0.1:
- dependencies:
- path-type: 4.0.0
-
dmg-builder@26.8.1(electron-builder-squirrel-windows@24.13.3):
dependencies:
app-builder-lib: 26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@24.13.3)
@@ -10405,14 +9731,6 @@ snapshots:
verror: 1.10.1
optional: true
- doctrine@2.1.0:
- dependencies:
- esutils: 2.0.3
-
- doctrine@3.0.0:
- dependencies:
- esutils: 2.0.3
-
dom-accessibility-api@0.5.16: {}
dompurify@3.2.7:
@@ -10431,6 +9749,8 @@ snapshots:
dotenv@16.6.1: {}
+ dotenv@17.4.2: {}
+
dotenv@9.0.2: {}
drizzle-kit@0.24.2:
@@ -10581,63 +9901,6 @@ snapshots:
err-code@2.0.3: {}
- es-abstract@1.24.1:
- dependencies:
- array-buffer-byte-length: 1.0.2
- arraybuffer.prototype.slice: 1.0.4
- available-typed-arrays: 1.0.7
- call-bind: 1.0.8
- call-bound: 1.0.4
- data-view-buffer: 1.0.2
- data-view-byte-length: 1.0.2
- data-view-byte-offset: 1.0.1
- es-define-property: 1.0.1
- es-errors: 1.3.0
- es-object-atoms: 1.1.1
- es-set-tostringtag: 2.1.0
- es-to-primitive: 1.3.0
- function.prototype.name: 1.1.8
- get-intrinsic: 1.3.0
- get-proto: 1.0.1
- get-symbol-description: 1.1.0
- globalthis: 1.0.4
- gopd: 1.2.0
- has-property-descriptors: 1.0.2
- has-proto: 1.2.0
- has-symbols: 1.1.0
- hasown: 2.0.2
- internal-slot: 1.1.0
- is-array-buffer: 3.0.5
- is-callable: 1.2.7
- is-data-view: 1.0.2
- is-negative-zero: 2.0.3
- is-regex: 1.2.1
- is-set: 2.0.3
- is-shared-array-buffer: 1.0.4
- is-string: 1.1.1
- is-typed-array: 1.1.15
- is-weakref: 1.1.1
- math-intrinsics: 1.1.0
- object-inspect: 1.13.4
- object-keys: 1.1.1
- object.assign: 4.1.7
- own-keys: 1.0.1
- regexp.prototype.flags: 1.5.4
- safe-array-concat: 1.1.3
- safe-push-apply: 1.0.0
- safe-regex-test: 1.1.0
- set-proto: 1.0.0
- stop-iteration-iterator: 1.1.0
- string.prototype.trim: 1.2.10
- string.prototype.trimend: 1.0.9
- string.prototype.trimstart: 1.0.8
- typed-array-buffer: 1.0.3
- typed-array-byte-length: 1.0.3
- typed-array-byte-offset: 1.0.4
- typed-array-length: 1.0.7
- unbox-primitive: 1.1.0
- which-typed-array: 1.1.20
-
es-define-property@1.0.1: {}
es-errors@1.3.0: {}
@@ -10655,16 +9918,6 @@ snapshots:
has-tostringtag: 1.0.2
hasown: 2.0.2
- es-shim-unscopables@1.1.0:
- dependencies:
- hasown: 2.0.2
-
- es-to-primitive@1.3.0:
- dependencies:
- is-callable: 1.2.7
- is-date-object: 1.1.0
- is-symbol: 1.1.1
-
es6-error@4.1.1:
optional: true
@@ -10761,119 +10014,74 @@ snapshots:
escape-string-regexp@5.0.0: {}
- eslint-import-resolver-node@0.3.9:
+ eslint-plugin-react-hooks@7.0.1(eslint@9.39.4(jiti@2.6.1)):
dependencies:
- debug: 3.2.7
- is-core-module: 2.16.1
- resolve: 1.22.11
+ '@babel/core': 7.29.0
+ '@babel/parser': 7.29.0
+ eslint: 9.39.4(jiti@2.6.1)
+ hermes-parser: 0.25.1
+ zod: 4.3.6
+ zod-validation-error: 4.0.2(zod@4.3.6)
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1):
+ eslint-scope@8.4.0:
dependencies:
- debug: 3.2.7
- optionalDependencies:
- '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@6.0.2)
- eslint: 8.57.1
- eslint-import-resolver-node: 0.3.9
- transitivePeerDependencies:
- - supports-color
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint@8.57.1):
- dependencies:
- '@rtsao/scc': 1.1.0
- array-includes: 3.1.9
- array.prototype.findlastindex: 1.2.6
- array.prototype.flat: 1.3.3
- array.prototype.flatmap: 1.3.3
- debug: 3.2.7
- doctrine: 2.1.0
- eslint: 8.57.1
- eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1)
- hasown: 2.0.2
- is-core-module: 2.16.1
- is-glob: 4.0.3
- minimatch: 3.1.2
- object.fromentries: 2.0.8
- object.groupby: 1.0.3
- object.values: 1.2.1
- semver: 6.3.1
- string.prototype.trimend: 1.0.9
- tsconfig-paths: 3.15.0
- optionalDependencies:
- '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@6.0.2)
- transitivePeerDependencies:
- - eslint-import-resolver-typescript
- - eslint-import-resolver-webpack
- - supports-color
-
- eslint-plugin-react-hooks@7.0.1(eslint@8.57.1):
- dependencies:
- '@babel/core': 7.29.0
- '@babel/parser': 7.29.0
- eslint: 8.57.1
- hermes-parser: 0.25.1
- zod: 4.3.6
- zod-validation-error: 4.0.2(zod@4.3.6)
- transitivePeerDependencies:
- - supports-color
+ eslint-visitor-keys@3.4.3: {}
- eslint-scope@7.2.2:
- dependencies:
- esrecurse: 4.3.0
- estraverse: 5.3.0
+ eslint-visitor-keys@4.2.1: {}
- eslint-visitor-keys@3.4.3: {}
+ eslint-visitor-keys@5.0.1: {}
- eslint@8.57.1:
+ eslint@9.39.4(jiti@2.6.1):
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1)
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.2
- '@eslint/eslintrc': 2.1.4
- '@eslint/js': 8.57.1
- '@humanwhocodes/config-array': 0.13.0
+ '@eslint/config-array': 0.21.2
+ '@eslint/config-helpers': 0.4.2
+ '@eslint/core': 0.17.0
+ '@eslint/eslintrc': 3.3.5
+ '@eslint/js': 9.39.4
+ '@eslint/plugin-kit': 0.4.1
+ '@humanfs/node': 0.16.8
'@humanwhocodes/module-importer': 1.0.1
- '@nodelib/fs.walk': 1.2.8
- '@ungap/structured-clone': 1.3.0
- ajv: 6.12.6
+ '@humanwhocodes/retry': 0.4.3
+ '@types/estree': 1.0.8
+ ajv: 6.15.0
chalk: 4.1.2
cross-spawn: 7.0.6
debug: 4.4.3
- doctrine: 3.0.0
escape-string-regexp: 4.0.0
- eslint-scope: 7.2.2
- eslint-visitor-keys: 3.4.3
- espree: 9.6.1
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
esquery: 1.7.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
- file-entry-cache: 6.0.1
+ file-entry-cache: 8.0.0
find-up: 5.0.0
glob-parent: 6.0.2
- globals: 13.24.0
- graphemer: 1.4.0
ignore: 5.3.2
imurmurhash: 0.1.4
is-glob: 4.0.3
- is-path-inside: 3.0.3
- js-yaml: 4.1.1
json-stable-stringify-without-jsonify: 1.0.1
- levn: 0.4.1
lodash.merge: 4.6.2
- minimatch: 3.1.2
+ minimatch: 3.1.5
natural-compare: 1.4.0
optionator: 0.9.4
- strip-ansi: 6.0.1
- text-table: 0.2.0
+ optionalDependencies:
+ jiti: 2.6.1
transitivePeerDependencies:
- supports-color
- espree@9.6.1:
+ espree@10.4.0:
dependencies:
acorn: 8.15.0
acorn-jsx: 5.3.2(acorn@8.15.0)
- eslint-visitor-keys: 3.4.3
+ eslint-visitor-keys: 4.2.1
esquery@1.7.0:
dependencies:
@@ -10932,22 +10140,10 @@ snapshots:
fast-deep-equal@3.1.3: {}
- 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
-
fast-json-stable-stringify@2.1.0: {}
fast-levenshtein@2.0.6: {}
- fastq@1.20.1:
- dependencies:
- reusify: 1.1.0
-
fault@1.0.4:
dependencies:
format: 0.2.2
@@ -10960,11 +10156,9 @@ snapshots:
optionalDependencies:
picomatch: 4.0.3
- fflate@0.4.8: {}
-
- file-entry-cache@6.0.1:
+ file-entry-cache@8.0.0:
dependencies:
- flat-cache: 3.2.0
+ flat-cache: 4.0.1
file-uri-to-path@1.0.0: {}
@@ -10985,20 +10179,15 @@ snapshots:
dependencies:
shell-path: 3.1.0
- flat-cache@3.2.0:
+ flat-cache@4.0.1:
dependencies:
flatted: 3.3.3
keyv: 4.5.4
- rimraf: 3.0.2
flatted@3.3.3: {}
follow-redirects@1.15.11: {}
- for-each@0.3.5:
- dependencies:
- is-callable: 1.2.7
-
foreground-child@3.3.1:
dependencies:
cross-spawn: 7.0.6
@@ -11068,17 +10257,6 @@ snapshots:
function-bind@1.1.2: {}
- function.prototype.name@1.1.8:
- dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- define-properties: 1.2.1
- functions-have-names: 1.2.3
- hasown: 2.0.2
- is-callable: 1.2.7
-
- functions-have-names@1.2.3: {}
-
gauge@4.0.4:
dependencies:
aproba: 2.1.0
@@ -11091,8 +10269,6 @@ snapshots:
wide-align: 1.1.5
optional: true
- generator-function@2.0.1: {}
-
gensync@1.0.0-beta.2: {}
get-caller-file@2.0.5: {}
@@ -11127,22 +10303,12 @@ snapshots:
get-stream@6.0.1: {}
- get-symbol-description@1.1.0:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
-
get-tsconfig@4.13.6:
dependencies:
resolve-pkg-maps: 1.0.0
github-from-package@0.0.0: {}
- glob-parent@5.1.2:
- dependencies:
- is-glob: 4.0.3
-
glob-parent@6.0.2:
dependencies:
is-glob: 4.0.3
@@ -11181,23 +10347,13 @@ snapshots:
serialize-error: 7.0.1
optional: true
- globals@13.24.0:
- dependencies:
- type-fest: 0.20.2
+ globals@14.0.0: {}
globalthis@1.0.4:
dependencies:
define-properties: 1.2.1
gopd: 1.2.0
-
- 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
+ optional: true
gopd@1.2.0: {}
@@ -11219,23 +10375,16 @@ snapshots:
grad-school@0.0.5: {}
- graphemer@1.4.0: {}
-
graphql@16.13.1: {}
hachure-fill@0.5.2: {}
- has-bigints@1.1.0: {}
-
has-flag@4.0.0: {}
has-property-descriptors@1.0.2:
dependencies:
es-define-property: 1.0.1
-
- has-proto@1.2.0:
- dependencies:
- dunder-proto: 1.0.1
+ optional: true
has-symbols@1.1.0: {}
@@ -11482,6 +10631,8 @@ snapshots:
ignore@5.3.2: {}
+ ignore@7.0.5: {}
+
import-fresh@3.3.1:
dependencies:
parent-module: 1.0.1
@@ -11506,12 +10657,6 @@ snapshots:
inline-style-parser@0.2.7: {}
- internal-slot@1.1.0:
- dependencies:
- es-errors: 1.3.0
- hasown: 2.0.2
- side-channel: 1.1.0
-
internmap@1.0.1: {}
internmap@2.0.3: {}
@@ -11532,74 +10677,22 @@ snapshots:
is-alphabetical: 2.0.1
is-decimal: 2.0.1
- is-array-buffer@3.0.5:
- dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- get-intrinsic: 1.3.0
-
- is-async-function@2.1.1:
- dependencies:
- async-function: 1.0.0
- call-bound: 1.0.4
- get-proto: 1.0.1
- has-tostringtag: 1.0.2
- safe-regex-test: 1.1.0
-
- is-bigint@1.1.0:
- dependencies:
- has-bigints: 1.1.0
-
- is-boolean-object@1.2.2:
- dependencies:
- call-bound: 1.0.4
- has-tostringtag: 1.0.2
-
- is-callable@1.2.7: {}
-
is-ci@3.0.1:
dependencies:
ci-info: 3.9.0
- is-core-module@2.16.1:
- dependencies:
- hasown: 2.0.2
-
- is-data-view@1.0.2:
- dependencies:
- call-bound: 1.0.4
- get-intrinsic: 1.3.0
- is-typed-array: 1.1.15
-
- is-date-object@1.1.0:
- dependencies:
- call-bound: 1.0.4
- has-tostringtag: 1.0.2
-
is-decimal@1.0.4: {}
is-decimal@2.0.1: {}
is-extglob@2.1.1: {}
- is-finalizationregistry@1.1.1:
- dependencies:
- call-bound: 1.0.4
-
is-fullwidth-code-point@3.0.0: {}
is-fullwidth-code-point@5.1.0:
dependencies:
get-east-asian-width: 1.4.0
- is-generator-function@1.1.2:
- dependencies:
- call-bound: 1.0.4
- generator-function: 2.0.1
- get-proto: 1.0.1
- has-tostringtag: 1.0.2
- safe-regex-test: 1.1.0
-
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
@@ -11613,70 +10706,18 @@ snapshots:
is-lambda@1.0.1:
optional: true
- is-map@2.0.3: {}
-
- is-negative-zero@2.0.3: {}
-
- is-number-object@1.1.1:
- dependencies:
- call-bound: 1.0.4
- has-tostringtag: 1.0.2
-
is-number@7.0.0: {}
- is-path-inside@3.0.3: {}
-
is-plain-obj@4.1.0: {}
is-potential-custom-element-name@1.0.1: {}
- is-regex@1.2.1:
- dependencies:
- call-bound: 1.0.4
- gopd: 1.2.0
- has-tostringtag: 1.0.2
- hasown: 2.0.2
-
- is-set@2.0.3: {}
-
- is-shared-array-buffer@1.0.4:
- dependencies:
- call-bound: 1.0.4
-
is-stream@2.0.1: {}
- is-string@1.1.1:
- dependencies:
- call-bound: 1.0.4
- has-tostringtag: 1.0.2
-
- is-symbol@1.1.1:
- dependencies:
- call-bound: 1.0.4
- has-symbols: 1.1.0
- safe-regex-test: 1.1.0
-
- is-typed-array@1.1.15:
- dependencies:
- which-typed-array: 1.1.20
-
is-unicode-supported@0.1.0: {}
- is-weakmap@2.0.2: {}
-
- is-weakref@1.1.1:
- dependencies:
- call-bound: 1.0.4
-
- is-weakset@2.0.4:
- dependencies:
- call-bound: 1.0.4
- get-intrinsic: 1.3.0
-
isarray@1.0.0: {}
- isarray@2.0.5: {}
-
isbinaryfile@4.0.10: {}
isbinaryfile@5.0.7: {}
@@ -11906,8 +10947,6 @@ snapshots:
strip-ansi: 7.1.2
wrap-ansi: 9.0.2
- long@5.3.2: {}
-
longest-streak@3.1.0: {}
lowercase-keys@2.0.0: {}
@@ -12166,8 +11205,6 @@ snapshots:
merge-stream@2.0.0: {}
- merge2@1.4.1: {}
-
mermaid@11.12.2:
dependencies:
'@braintree/sanitize-url': 7.1.2
@@ -12457,11 +11494,11 @@ snapshots:
dependencies:
brace-expansion: 1.1.12
- minimatch@5.1.6:
+ minimatch@3.1.5:
dependencies:
- brace-expansion: 2.0.2
+ brace-expansion: 1.1.12
- minimatch@9.0.3:
+ minimatch@5.1.6:
dependencies:
brace-expansion: 2.0.2
@@ -12676,36 +11713,8 @@ snapshots:
object-inspect@1.13.4: {}
- object-keys@1.1.1: {}
-
- object.assign@4.1.7:
- dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- define-properties: 1.2.1
- es-object-atoms: 1.1.1
- has-symbols: 1.1.0
- object-keys: 1.1.1
-
- object.fromentries@2.0.8:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-abstract: 1.24.1
- es-object-atoms: 1.1.1
-
- object.groupby@1.0.3:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-abstract: 1.24.1
-
- object.values@1.2.1:
- dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- define-properties: 1.2.1
- es-object-atoms: 1.1.1
+ object-keys@1.1.1:
+ optional: true
obug@2.1.1: {}
@@ -12750,12 +11759,6 @@ snapshots:
strip-ansi: 6.0.1
wcwidth: 1.0.1
- own-keys@1.0.1:
- dependencies:
- get-intrinsic: 1.3.0
- object-keys: 1.1.1
- safe-push-apply: 1.0.0
-
p-cancelable@2.1.1: {}
p-limit@3.1.0:
@@ -12816,8 +11819,6 @@ snapshots:
path-key@3.1.1: {}
- path-parse@1.0.7: {}
-
path-scurry@1.11.1:
dependencies:
lru-cache: 10.4.3
@@ -12828,8 +11829,6 @@ snapshots:
lru-cache: 11.2.6
minipass: 7.1.3
- path-type@4.0.0: {}
-
pathe@2.0.3: {}
pe-library@0.4.1: {}
@@ -12873,32 +11872,12 @@ snapshots:
path-data-parser: 0.1.0
points-on-curve: 0.2.0
- possible-typed-array-names@1.1.0: {}
-
postcss@8.5.6:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
- posthog-js@1.342.1:
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/api-logs': 0.208.0
- '@opentelemetry/exporter-logs-otlp-http': 0.208.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0)
- '@posthog/core': 1.20.1
- '@posthog/types': 1.342.1
- core-js: 3.48.0
- dompurify: 3.3.1
- fflate: 0.4.8
- preact: 10.28.3
- query-selector-shadow-dom: 1.0.1
- web-vitals: 5.1.0
-
- preact@10.28.3: {}
-
prebuild-install@7.1.3:
dependencies:
detect-libc: 2.1.2
@@ -12960,21 +11939,6 @@ snapshots:
property-information@7.1.0: {}
- protobufjs@7.5.4:
- dependencies:
- '@protobufjs/aspromise': 1.1.2
- '@protobufjs/base64': 1.1.2
- '@protobufjs/codegen': 2.0.4
- '@protobufjs/eventemitter': 1.1.0
- '@protobufjs/fetch': 1.1.0
- '@protobufjs/float': 1.0.2
- '@protobufjs/inquire': 1.1.0
- '@protobufjs/path': 1.1.2
- '@protobufjs/pool': 1.1.0
- '@protobufjs/utf8': 1.1.0
- '@types/node': 20.19.32
- long: 5.3.2
-
proxy-from-env@2.1.0: {}
pump@3.0.3:
@@ -12988,10 +11952,6 @@ snapshots:
dependencies:
side-channel: 1.1.0
- query-selector-shadow-dom@1.0.1: {}
-
- queue-microtask@1.2.3: {}
-
quick-lru@5.1.1: {}
rate-limiter-flexible@8.3.0: {}
@@ -13120,17 +12080,6 @@ snapshots:
readdirp@5.0.0: {}
- reflect.getprototypeof@1.0.10:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-abstract: 1.24.1
- es-errors: 1.3.0
- es-object-atoms: 1.1.1
- get-intrinsic: 1.3.0
- get-proto: 1.0.1
- which-builtin-type: 1.2.1
-
refractor@3.6.0:
dependencies:
hastscript: 6.0.0
@@ -13147,15 +12096,6 @@ snapshots:
dependencies:
regex-utilities: 2.3.0
- regexp.prototype.flags@1.5.4:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-errors: 1.3.0
- get-proto: 1.0.1
- gopd: 1.2.0
- set-function-name: 2.0.2
-
rehype-harden@1.1.7:
dependencies:
unist-util-visit: 5.1.0
@@ -13262,12 +12202,6 @@ snapshots:
resolve-pkg-maps@1.0.0: {}
- resolve@1.22.11:
- dependencies:
- is-core-module: 2.16.1
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
-
responselike@2.0.1:
dependencies:
lowercase-keys: 2.0.0
@@ -13284,13 +12218,12 @@ snapshots:
retry@0.12.0: {}
- reusify@1.1.0: {}
-
rfdc@1.4.1: {}
rimraf@3.0.2:
dependencies:
glob: 7.2.3
+ optional: true
roarr@2.15.4:
dependencies:
@@ -13342,10 +12275,6 @@ snapshots:
points-on-curve: 0.2.0
points-on-path: 0.2.1
- run-parallel@1.2.0:
- dependencies:
- queue-microtask: 1.2.3
-
rw@1.3.3: {}
rxjs@7.8.2:
@@ -13354,29 +12283,10 @@ snapshots:
s3mini@0.9.4: {}
- safe-array-concat@1.1.3:
- dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- get-intrinsic: 1.3.0
- has-symbols: 1.1.0
- isarray: 2.0.5
-
safe-buffer@5.1.2: {}
safe-buffer@5.2.1: {}
- safe-push-apply@1.0.0:
- dependencies:
- es-errors: 1.3.0
- isarray: 2.0.5
-
- safe-regex-test@1.1.0:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-regex: 1.2.1
-
safer-buffer@2.1.2: {}
sanitize-filename@1.6.3:
@@ -13408,28 +12318,6 @@ snapshots:
set-blocking@2.0.0:
optional: true
- set-function-length@1.2.2:
- dependencies:
- define-data-property: 1.1.4
- es-errors: 1.3.0
- function-bind: 1.1.2
- get-intrinsic: 1.3.0
- gopd: 1.2.0
- has-property-descriptors: 1.0.2
-
- set-function-name@2.0.2:
- dependencies:
- define-data-property: 1.1.4
- es-errors: 1.3.0
- functions-have-names: 1.2.3
- has-property-descriptors: 1.0.2
-
- set-proto@1.0.0:
- dependencies:
- dunder-proto: 1.0.1
- es-errors: 1.3.0
- es-object-atoms: 1.1.1
-
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
@@ -13511,8 +12399,6 @@ snapshots:
mrmime: 2.0.1
totalist: 3.0.1
- slash@3.0.0: {}
-
slice-ansi@3.0.0:
dependencies:
ansi-styles: 4.3.0
@@ -13612,11 +12498,6 @@ snapshots:
std-env@4.0.0: {}
- stop-iteration-iterator@1.1.0:
- dependencies:
- es-errors: 1.3.0
- internal-slot: 1.1.0
-
stopword@3.1.5: {}
streamdown@1.6.11(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2)(react@19.2.4):
@@ -13676,29 +12557,6 @@ snapshots:
get-east-asian-width: 1.5.0
strip-ansi: 7.1.2
- string.prototype.trim@1.2.10:
- dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- define-data-property: 1.1.4
- define-properties: 1.2.1
- es-abstract: 1.24.1
- es-object-atoms: 1.1.1
- has-property-descriptors: 1.0.2
-
- string.prototype.trimend@1.0.9:
- dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- define-properties: 1.2.1
- es-object-atoms: 1.1.1
-
- string.prototype.trimstart@1.0.8:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-object-atoms: 1.1.1
-
string_decoder@1.1.1:
dependencies:
safe-buffer: 5.1.2
@@ -13754,8 +12612,6 @@ snapshots:
dependencies:
has-flag: 4.0.0
- supports-preserve-symlinks-flag@1.0.0: {}
-
symbol-tree@3.2.4: {}
tabbable@6.4.0: {}
@@ -13805,8 +12661,6 @@ snapshots:
async-exit-hook: 2.0.1
fs-extra: 10.1.0
- text-table@0.2.0: {}
-
tiny-async-pool@1.3.0:
dependencies:
semver: 5.7.2
@@ -13860,7 +12714,7 @@ snapshots:
dependencies:
utf8-byte-length: 1.0.5
- ts-api-utils@1.4.3(typescript@6.0.2):
+ ts-api-utils@2.5.0(typescript@6.0.2):
dependencies:
typescript: 6.0.2
@@ -13890,40 +12744,16 @@ snapshots:
type-fest@0.13.1:
optional: true
- type-fest@0.20.2: {}
-
- typed-array-buffer@1.0.3:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-typed-array: 1.1.15
-
- typed-array-byte-length@1.0.3:
+ typescript-eslint@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2):
dependencies:
- call-bind: 1.0.8
- for-each: 0.3.5
- gopd: 1.2.0
- has-proto: 1.2.0
- is-typed-array: 1.1.15
-
- typed-array-byte-offset@1.0.4:
- dependencies:
- available-typed-arrays: 1.0.7
- call-bind: 1.0.8
- for-each: 0.3.5
- gopd: 1.2.0
- has-proto: 1.2.0
- is-typed-array: 1.1.15
- reflect.getprototypeof: 1.0.10
-
- typed-array-length@1.0.7:
- dependencies:
- call-bind: 1.0.8
- for-each: 0.3.5
- gopd: 1.2.0
- is-typed-array: 1.1.15
- possible-typed-array-names: 1.1.0
- reflect.getprototypeof: 1.0.10
+ '@typescript-eslint/eslint-plugin': 8.59.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
+ '@typescript-eslint/parser': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
+ '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.2)
+ '@typescript-eslint/utils': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.2)
+ eslint: 9.39.4(jiti@2.6.1)
+ typescript: 6.0.2
+ transitivePeerDependencies:
+ - supports-color
typescript@5.9.3: {}
@@ -13931,13 +12761,6 @@ snapshots:
ufo@1.6.3: {}
- unbox-primitive@1.1.0:
- dependencies:
- call-bound: 1.0.4
- has-bigints: 1.1.0
- has-symbols: 1.1.0
- which-boxed-primitive: 1.1.1
-
undici-types@5.26.5: {}
undici-types@6.21.0: {}
@@ -14157,8 +12980,6 @@ snapshots:
web-namespaces@2.0.1: {}
- web-vitals@5.1.0: {}
-
webidl-conversions@8.0.1: {}
whatwg-mimetype@5.0.0: {}
@@ -14171,47 +12992,6 @@ snapshots:
transitivePeerDependencies:
- '@noble/hashes'
- which-boxed-primitive@1.1.1:
- dependencies:
- is-bigint: 1.1.0
- is-boolean-object: 1.2.2
- is-number-object: 1.1.1
- is-string: 1.1.1
- is-symbol: 1.1.1
-
- which-builtin-type@1.2.1:
- dependencies:
- call-bound: 1.0.4
- function.prototype.name: 1.1.8
- has-tostringtag: 1.0.2
- is-async-function: 2.1.1
- is-date-object: 1.1.0
- is-finalizationregistry: 1.1.1
- is-generator-function: 1.1.2
- is-regex: 1.2.1
- is-weakref: 1.1.1
- isarray: 2.0.5
- which-boxed-primitive: 1.1.1
- which-collection: 1.0.2
- which-typed-array: 1.1.20
-
- which-collection@1.0.2:
- dependencies:
- is-map: 2.0.3
- is-set: 2.0.3
- is-weakmap: 2.0.2
- is-weakset: 2.0.4
-
- which-typed-array@1.1.20:
- dependencies:
- available-typed-arrays: 1.0.7
- call-bind: 1.0.8
- call-bound: 1.0.4
- for-each: 0.3.5
- get-proto: 1.0.1
- gopd: 1.2.0
- has-tostringtag: 1.0.2
-
which@2.0.2:
dependencies:
isexe: 2.0.0
diff --git a/scripts/postinstall.ts b/scripts/postinstall.ts
index dcea87cf92..47c0001205 100644
--- a/scripts/postinstall.ts
+++ b/scripts/postinstall.ts
@@ -28,7 +28,6 @@ function runElectronRebuild(onlyModules) {
: spawnSync(electronRebuildBin, args, { stdio: 'inherit' });
if (result.error) {
- // eslint-disable-next-line no-console
console.error('postinstall: failed to run electron-rebuild:', result.error);
}
@@ -39,7 +38,7 @@ function runElectronRebuild(onlyModules) {
const disablePty = process.env.EMDASH_DISABLE_PTY === '1';
const disableNativeDb = process.env.EMDASH_DISABLE_NATIVE_DB === '1';
-const nativeModules = [];
+const nativeModules: string[] = [];
if (!disableNativeDb) nativeModules.push('better-sqlite3');
if (!disablePty) nativeModules.push('node-pty');
diff --git a/scripts/release/build.ts b/scripts/release/build.ts
index 68db2f4b63..9a2bff567e 100644
--- a/scripts/release/build.ts
+++ b/scripts/release/build.ts
@@ -7,13 +7,16 @@ const { values } = parseArgs({
platform: { type: 'string' },
arch: { type: 'string', default: 'both' },
targets: { type: 'string' },
+ config: { type: 'string', default: 'electron-builder.config.ts' },
},
strict: true,
});
const platform = values.platform;
if (!platform || !['mac', 'linux', 'win'].includes(platform)) {
- fail('Usage: build.ts --platform mac|linux|win [--arch arm64|x64|both] [--targets dmg,zip]');
+ fail(
+ 'Usage: build.ts --platform mac|linux|win [--arch arm64|x64|both] [--targets dmg,zip] [--config electron-builder.config.ts]'
+ );
}
const archInput = values.arch ?? 'both';
@@ -41,7 +44,7 @@ for (const arch of archs) {
targets,
archFlag,
'--publish always',
- '--config electron-builder.config.ts',
+ `--config ${values.config}`,
'--config.npmRebuild=false',
].join(' ');
diff --git a/scripts/release/inject-telemetry.ts b/scripts/release/inject-telemetry.ts
deleted file mode 100644
index 90b1fdfb0a..0000000000
--- a/scripts/release/inject-telemetry.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { mkdirSync, writeFileSync } from 'node:fs';
-import { info, step } from './lib/log.ts';
-
-const phKey = process.env.PH_KEY ?? '';
-const phHost = process.env.PH_HOST ?? '';
-
-if (!phKey || !phHost) {
- console.log('PostHog secrets not set; skipping telemetry injection.');
- process.exit(0);
-}
-
-step('Inject PostHog config');
-mkdirSync('dist/main', { recursive: true });
-writeFileSync(
- 'dist/main/appConfig.json',
- JSON.stringify({ posthogHost: phHost, posthogKey: phKey }, null, 2)
-);
-info('Wrote dist/main/appConfig.json');
diff --git a/scripts/release/lib/artifacts.ts b/scripts/release/lib/artifacts.ts
index dacd6dec96..dffe1f9215 100644
--- a/scripts/release/lib/artifacts.ts
+++ b/scripts/release/lib/artifacts.ts
@@ -12,12 +12,12 @@ function matchFiles(pattern: RegExp): string[] {
}
}
-export function findManifests(): string[] {
- return matchFiles(new RegExp(`^${UPDATE_CHANNEL}.*\\.yml$`));
+export function findManifests(channel = UPDATE_CHANNEL): string[] {
+ return matchFiles(new RegExp(`^${channel}.*\\.yml$`));
}
-export function findInstallers(): string[] {
- return matchFiles(new RegExp(`^${ARTIFACT_PREFIX}-.*\\.(dmg|zip|exe|msi|AppImage|deb|rpm)$`));
+export function findInstallers(prefix = ARTIFACT_PREFIX): string[] {
+ return matchFiles(new RegExp(`^${prefix}-.*\\.(dmg|zip|exe|msi|AppImage|deb|rpm)$`));
}
export function findBlockmaps(): string[] {
diff --git a/scripts/release/lib/config.ts b/scripts/release/lib/config.ts
index 958d87624f..806d8ebb05 100644
--- a/scripts/release/lib/config.ts
+++ b/scripts/release/lib/config.ts
@@ -1,5 +1,3 @@
-import { PRODUCT_NAME } from '../../../src/shared/app-identity.ts';
-
export {
APP_ID,
APP_NAME_LOWER,
@@ -9,8 +7,6 @@ export {
UPDATE_CHANNEL,
} from '../../../src/shared/app-identity.ts';
-export const APP_BUNDLE = `${PRODUCT_NAME}.app`;
-export const APP_BINARY = PRODUCT_NAME;
export const RELEASE_DIR = 'release';
export const NATIVE_MODULES = ['better-sqlite3', 'node-pty', '@parcel/watcher'];
diff --git a/scripts/release/notarize-mac.ts b/scripts/release/notarize-mac.ts
index 8c868be954..a439842b65 100644
--- a/scripts/release/notarize-mac.ts
+++ b/scripts/release/notarize-mac.ts
@@ -1,7 +1,8 @@
import { existsSync, mkdtempSync, readdirSync, rmSync } from 'node:fs';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
-import { APP_BUNDLE, RELEASE_DIR } from './lib/config.ts';
+import { parseArgs } from 'node:util';
+import { RELEASE_DIR } from './lib/config.ts';
import { exec } from './lib/exec.ts';
import { fail, info, step, warn } from './lib/log.ts';
@@ -10,6 +11,19 @@ if (process.platform !== 'darwin') {
process.exit(0);
}
+const { values } = parseArgs({
+ options: {
+ 'app-bundle': { type: 'string' },
+ },
+ strict: true,
+});
+
+if (!values['app-bundle']) {
+ fail('--app-bundle is required (e.g. --app-bundle "Emdash.app")');
+}
+
+const appBundle = values['app-bundle'];
+
const apiKeyPath = process.env.APPLE_API_KEY ?? process.env.APPLE_API_KEY_CONTENT;
const apiKeyId = process.env.APPLE_API_KEY_ID;
const apiIssuer = process.env.APPLE_API_ISSUER;
@@ -50,7 +64,7 @@ for (const dmg of dmgs) {
step('Staple app bundles');
const macDirs = readdirSync(RELEASE_DIR)
.filter((d) => d.startsWith('mac'))
- .map((d) => join(RELEASE_DIR, d, APP_BUNDLE))
+ .map((d) => join(RELEASE_DIR, d, appBundle))
.filter((p) => existsSync(p));
for (const appDir of macDirs) {
@@ -68,9 +82,9 @@ for (const dmg of dmgs) {
const mnt = mkdtempSync(join(tmpdir(), 'dmg-'));
try {
exec(`hdiutil attach "${dmg}" -mountpoint "${mnt}" -nobrowse -quiet`, { echo: true });
- const appPath = join(mnt, APP_BUNDLE);
+ const appPath = join(mnt, appBundle);
if (!existsSync(appPath)) {
- fail(`No ${APP_BUNDLE} found inside ${dmg}`);
+ fail(`No ${appBundle} found inside ${dmg}`);
}
exec(`spctl -a -vv --type execute "${appPath}"`, { echo: true });
info(`Gatekeeper passed for ${dmg}`);
diff --git a/scripts/release/upload-r2.ts b/scripts/release/upload-r2.ts
index afa8b1345d..1b3f803af5 100644
--- a/scripts/release/upload-r2.ts
+++ b/scripts/release/upload-r2.ts
@@ -1,10 +1,19 @@
import { readFileSync } from 'node:fs';
import { basename } from 'node:path';
+import { parseArgs } from 'node:util';
import { S3mini } from 's3mini';
import { findBlockmaps, findInstallers, findManifests } from './lib/artifacts.ts';
import { r2Endpoint, requireEnv } from './lib/config.ts';
import { fail, info, step } from './lib/log.ts';
+const { values } = parseArgs({
+ options: {
+ channel: { type: 'string' },
+ prefix: { type: 'string' },
+ },
+ strict: true,
+});
+
const s3 = new S3mini({
accessKeyId: requireEnv('R2_ACCESS_KEY_ID'),
secretAccessKey: requireEnv('R2_SECRET_ACCESS_KEY'),
@@ -12,7 +21,11 @@ const s3 = new S3mini({
region: 'auto',
});
-const files = [...findManifests(), ...findInstallers(), ...findBlockmaps()];
+const files = [
+ ...findManifests(values.channel),
+ ...findInstallers(values.prefix),
+ ...findBlockmaps(),
+];
if (files.length === 0) {
fail('No artifacts found to upload');
diff --git a/scripts/release/verify-mac.ts b/scripts/release/verify-mac.ts
index 26a92b43a5..1d8290a508 100644
--- a/scripts/release/verify-mac.ts
+++ b/scripts/release/verify-mac.ts
@@ -1,7 +1,7 @@
import { existsSync, readdirSync } from 'node:fs';
-import { join } from 'node:path';
+import { basename, join } from 'node:path';
import { parseArgs } from 'node:util';
-import { APP_BUNDLE, APP_ID, PRODUCT_NAME, RELEASE_DIR } from './lib/config.ts';
+import { RELEASE_DIR } from './lib/config.ts';
import { exec, execOrNull } from './lib/exec.ts';
import { fail, info, step, warn } from './lib/log.ts';
@@ -12,34 +12,39 @@ if (process.platform !== 'darwin') {
const { values } = parseArgs({
options: {
- 'smoke-test': { type: 'boolean', default: false },
'expected-team-id': { type: 'string' },
},
strict: true,
});
-const smokeTest = values['smoke-test'] ?? false;
const expectedTeamId = values['expected-team-id'];
-const macDirs = readdirSync(RELEASE_DIR)
+const appBundles = readdirSync(RELEASE_DIR)
.filter((d) => d.startsWith('mac'))
- .map((d) => join(RELEASE_DIR, d, APP_BUNDLE))
+ .flatMap((d) => {
+ const dir = join(RELEASE_DIR, d);
+ return readdirSync(dir)
+ .filter((f) => f.endsWith('.app'))
+ .map((f) => join(dir, f));
+ })
.filter((p) => existsSync(p));
-if (macDirs.length === 0) {
+if (appBundles.length === 0) {
fail('No app bundles found to verify');
}
let verified = 0;
-for (const appDir of macDirs) {
+for (const appDir of appBundles) {
const archDir = appDir.split('/').at(-2)!;
const expectedArch =
archDir === 'mac-arm64' ? 'arm64' : archDir.startsWith('mac') ? 'x86_64' : null;
+ const productName = basename(appDir, '.app');
+
step(`Verifying ${appDir} (expected: ${expectedArch ?? 'unknown'})`);
- const electronBin = join(appDir, 'Contents', 'MacOS', PRODUCT_NAME);
+ const electronBin = join(appDir, 'Contents', 'MacOS', productName);
const sqliteNode = join(
appDir,
'Contents',
@@ -70,14 +75,6 @@ for (const appDir of macDirs) {
}
}
- if (smokeTest && archDir === 'mac-arm64') {
- step('Smoke test sqlite3 (arm64)');
- exec(
- `ELECTRON_RUN_AS_NODE=1 NODE_PATH="${appDir}/Contents/Resources/app.asar.unpacked/node_modules" "${electronBin}" -e "require('sqlite3'); console.log('sqlite3 OK')"`,
- { echo: true }
- );
- }
-
const plist = join(appDir, 'Contents', 'Info.plist');
if (existsSync(plist)) {
const bid =
@@ -86,9 +83,6 @@ for (const appDir of macDirs) {
`plutil -extract CFBundleIdentifier xml1 -o - "${plist}" | sed -n 's/.*