fix(magic): always show supervised + lock profile true/false; company from exists

This commit is contained in:
chahinebrini 2026-06-18 07:10:12 +02:00
parent dd84f8ec38
commit e6fad4f51e
9 changed files with 296794 additions and 199830 deletions

@ -0,0 +1 @@
Subproject commit b7e3af80f6e331f6fb456667b82b12cade7c9d35

View File

@ -270,12 +270,10 @@ const backendRows = computed(() => {
},
{
label: "Supervised",
value: data?.enrolled ? (data.supervised ? "Ja" : "Nein") : "—",
valueClass: data?.enrolled
? data.supervised
value: data?.supervised ? "Ja" : "Nein",
valueClass: data?.supervised
? "text-green-600 dark:text-green-400 font-medium"
: "text-red-600 dark:text-red-400 font-medium"
: "text-gray-400 dark:text-gray-500",
: "text-red-600 dark:text-red-400 font-medium",
},
{
label: "Organisation",
@ -286,16 +284,10 @@ const backendRows = computed(() => {
},
{
label: "Lock-Profil",
value: data?.enrolled
? data.lockProfileInstalled
? "Installiert"
: "Fehlt"
: "—",
valueClass: data?.enrolled
? data.lockProfileInstalled
value: data?.lockProfileInstalled ? "Installiert" : "Fehlt",
valueClass: data?.lockProfileInstalled
? "text-green-600 dark:text-green-400 font-medium"
: "text-red-600 dark:text-red-400 font-medium"
: "text-gray-400 dark:text-gray-500",
: "text-red-600 dark:text-red-400 font-medium",
},
{
label: "ReBreak App",

View File

@ -85,7 +85,7 @@ export default defineEventHandler(async (event) => {
success: true,
data: {
enrolled: status.enrolled,
company: status.enrolled ? "ReBreak" : null,
company: status.exists ? "ReBreak" : null,
supervised: status.supervised,
lockProfileInstalled: lockState?.active ?? false,
lastAppPushAt: status.lastAppPushAt?.toISOString() ?? null,

View File

@ -0,0 +1,437 @@
# Self-Hosted GitHub Actions Runner Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Betreiben eines self-hosted GitHub Actions Runners auf `api.trucko.org` (128.140.47.53) mit dem Label `raynis-builder`, um Backend- und Admin-Builds für das rebreak-monorepo kostenlos auszuführen und weiterhin auf `staging.rebreak.org` zu deployen.
**Architecture:** Code-Hosting bleibt auf GitHub. GitHub Actions Workflows werden auf `runs-on: [self-hosted, raynis-builder]` umgestellt. Der Runner auf `api.trucko.org` checkt aus, baut das Artifact und kopiert es per SCP auf `staging.rebreak.org`. Dort übernimmt das bestehende `deploy-from-artifact.sh` das Entpacken, Migrations-Check und PM2-Restart.
**Tech Stack:** GitHub Actions, self-hosted Runner, Hetzner VPS, pnpm, Node.js 24.11.1, SSH/SCP, PM2.
---
## File Structure
| File / Pfad | Verantwortung | Aktion |
|---|---|---|
| `api.trucko.org` (Server) | Self-hosted Runner + Build-Umgebung | Einrichten |
| `staging.rebreak.org` (Server) | Production/Staging + Deploy-Script | SSH-Key hinzufügen |
| `.github/workflows/deploy-staging.yml` | Backend-Deploy-Workflow | Ändern: `runs-on` + SSH-Secret |
| `.github/workflows/deploy-admin-staging.yml` | Admin-Deploy-Workflow | Ändern: `runs-on` + SSH-Secret |
| GitHub Repo → Settings → Environments → staging | Secrets/Variables | `STAGING_DEPLOY_KEY` hinzufügen |
---
### Task 1: Server `api.trucko.org` vorbereiten
**Files:**
- Ausführen auf: `api.trucko.org` (per SSH)
- [ ] **Step 1: SSH auf Server verbinden**
```bash
ssh root@128.140.47.53
```
- [ ] **Step 2: System aktualisieren und Basis-Tools installieren**
```bash
apt-get update && apt-get install -y curl git build-essential
```
- [ ] **Step 3: Node.js 24.11.1 installieren (via nvm)**
```bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 24.11.1
nvm use 24.11.1
node -v
```
Expected output: `v24.11.1`
- [ ] **Step 4: pnpm 10.23.0 installieren**
```bash
corepack enable
corepack prepare pnpm@10.23.0 --activate
pnpm -v
```
Expected output: `10.23.0`
- [ ] **Step 5: Git-Config für den Runner setzen**
```bash
git config --global user.name "Raynis Builder"
git config --global user.email "builder@raynis.dev"
```
- [ ] **Step 6: Workspace-Verzeichnis anlegen**
```bash
mkdir -p /srv/raynis-builder
chown root:root /srv/raynis-builder
```
---
### Task 2: GitHub Actions Runner installieren und registrieren
**Files:**
- Ausführen auf: `api.trucko.org`
- Zu prüfen in GitHub: Settings → Actions → Runners
- [ ] **Step 1: Runner-Version ermitteln (aktuellste)**
```bash
RUNNER_VERSION=$(curl -sL https://api.github.com/repos/actions/runner/releases/latest | jq -r '.tag_name' | sed 's/^v//')
echo "$RUNNER_VERSION"
```
- [ ] **Step 2: Runner herunterladen und entpacken**
```bash
cd /srv/raynis-builder
curl -o actions-runner-linux-x64-${RUNNER_VERSION}.tar.gz -L https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-x64-${RUNNER_VERSION}.tar.gz
tar xzf actions-runner-linux-x64-${RUNNER_VERSION}.tar.gz
rm actions-runner-linux-x64-${RUNNER_VERSION}.tar.gz
```
- [ ] **Step 3: Runner konfigurieren (Token aus GitHub holen)**
In GitHub: Repository `rebreak-monorepo` → Settings → Actions → Runners → New self-hosted runner → Linux → x64.
Dort angezeigte `config.sh`-Befehle auf dem Server ausführen, z. B.:
```bash
cd /srv/raynis-builder
./config.sh --url https://github.com/RaynisDev/rebreak --token <TOKEN_AUS_GITHUB> --name raynis-builder-01 --labels raynis-builder --work _work
```
- [ ] **Step 4: Runner als systemd-Service registrieren**
```bash
cd /srv/raynis-builder
./svc.sh install
./svc.sh start
./svc.sh status
```
Expected: `active (running)`
- [ ] **Step 5: Runner in GitHub UI als Online verifizieren**
In GitHub: Settings → Actions → Runners → Status muss `Idle` oder `Online` zeigen.
---
### Task 3: SSH-Deploy-Key zwischen Servern einrichten
**Files:**
- Ausführen auf: `api.trucko.org` und `staging.rebreak.org`
- [ ] **Step 1: SSH-Key auf `api.trucko.org` erzeugen**
```bash
ssh-keygen -t ed25519 -f /root/.ssh/rebreak-deploy -C "raynis-builder@api.trucko.org" -N ""
cat /root/.ssh/rebreak-deploy.pub
```
- [ ] **Step 2: Public Key auf `staging.rebreak.org` autorisieren**
```bash
ssh root@staging.rebreak.org
mkdir -p /root/.ssh
cat >> /root/.ssh/authorized_keys << 'EOF'
<PUBLIC_KEY_VON_OBEN>
EOF
chmod 600 /root/.ssh/authorized_keys
```
- [ ] **Step 3: Verbindung vom Builder zum Staging testen**
```bash
ssh -i /root/.ssh/rebreak-deploy root@staging.rebreak.org "whoami"
```
Expected output: `root`
- [ ] **Step 4: SSH-Konfiguration für einfacheren Zugriff anlegen**
Auf `api.trucko.org`:
```bash
cat >> /root/.ssh/config << 'EOF'
Host rebreak-staging
HostName staging.rebreak.org
User root
IdentityFile ~/.ssh/rebreak-deploy
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
EOF
chmod 600 /root/.ssh/config
```
- [ ] **Step 5: Verbindung mit Alias testen**
```bash
ssh rebreak-staging "whoami"
```
Expected output: `root`
---
### Task 4: GitHub Secrets aktualisieren
**Files:**
- GitHub Repository: Settings → Environments → staging
- [ ] **Step 1: Neuen Private Key als Secret hinzufügen**
Auf `api.trucko.org`:
```bash
cat /root/.ssh/rebreak-deploy
```
Inhalt kopieren und in GitHub einfügen:
- Environment: `staging`
- Secret-Name: `STAGING_DEPLOY_KEY`
- Wert: Inhalt von `/root/.ssh/rebreak-deploy`
- [ ] **Step 2: Bestehende Secrets überprüfen**
In GitHub prüfen, dass folgende Secrets/Vars im Environment `staging` vorhanden sind:
- `HETZNER_SSH_KEY` → kann später entfernt werden, wenn neuer Key funktioniert
- `HETZNER_HOST``staging.rebreak.org`
- `HETZNER_USER``root`
- [ ] **Step 3: Altes Secret nicht löschen (Fallback)**
`HETZNER_SSH_KEY` erst nach erfolgreichem Test-Deploy entfernen.
---
### Task 5: Workflows auf self-hosted Runner umstellen
**Files:**
- Modify: `.github/workflows/deploy-staging.yml`
- Modify: `.github/workflows/deploy-admin-staging.yml`
- [ ] **Step 1: `deploy-staging.yml` anpassen**
Ändere in beiden Jobs `runs-on: ubuntu-latest` zu:
```yaml
runs-on: [self-hosted, raynis-builder]
```
Ändere den SSH-Setup-Step, sodass er `STAGING_DEPLOY_KEY` verwendet:
```yaml
- name: Setup SSH
env:
SSH_PRIVATE_KEY: ${{ secrets.STAGING_DEPLOY_KEY }}
SSH_HOST: ${{ vars.HETZNER_HOST }}
run: |
if [ -z "$SSH_PRIVATE_KEY" ] || [ -z "$SSH_HOST" ]; then
echo "FATAL: STAGING_DEPLOY_KEY oder HETZNER_HOST nicht gesetzt"
exit 1
fi
mkdir -p ~/.ssh
printf '%s\n' "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -H "$SSH_HOST" >> ~/.ssh/known_hosts
```
- [ ] **Step 2: `deploy-admin-staging.yml` analog anpassen**
Gleiche Änderungen wie bei `deploy-staging.yml`:
```yaml
runs-on: [self-hosted, raynis-builder]
```
und SSH-Setup-Step auf `STAGING_DEPLOY_KEY` umstellen.
- [ ] **Step 3: Node-Setup überprüfen**
Da der Runner Node.js 24.11.1 und pnpm 10.23.0 bereits hat, kann der Schritt `actions/setup-node` theoretisch entfallen. Für Robustheit aber beibehalten:
```yaml
- uses: actions/setup-node@v4
with:
node-version: 24.11.1
cache: pnpm
```
**Hinweis:** `cache: pnpm` funktioniert auf self-hosted Runnern nur, wenn der Runner persistent ist. Da der Server nicht bei jedem Job neu aufgesetzt wird, ist das gegeben.
- [ ] **Step 4: Beide Dateien lokal validieren**
```bash
cd /Users/chahinebrini/mono/rebreak-monorepo
git diff .github/workflows/deploy-staging.yml .github/workflows/deploy-admin-staging.yml
```
- [ ] **Step 5: Änderungen commiten**
```bash
git add .github/workflows/deploy-staging.yml .github/workflows/deploy-admin-staging.yml
git commit -m "ci: use self-hosted runner raynis-builder on api.trucko.org"
```
---
### Task 6: Test-Deploy durchführen
**Files:**
- GitHub Actions UI
- Server-Logs auf `api.trucko.org` und `staging.rebreak.org`
- [ ] **Step 1: Workflow manuell triggern**
In GitHub: Actions → Deploy Staging → Run workflow → Branch: main → Run.
- [ ] **Step 2: Build-Logs auf Runner verfolgen**
Auf `api.trucko.org`:
```bash
tail -f /srv/raynis-builder/_diag/Worker_*.log
tail -f /srv/raynis-builder/_diag/SelfUpdate-*.log
```
- [ ] **Step 3: Deploy-Logs auf Staging verfolgen**
Auf `staging.rebreak.org`:
```bash
pm2 logs rebreak-staging --lines 50
```
- [ ] **Step 4: Health-Check manuell ausführen**
Lokal oder auf `api.trucko.org`:
```bash
for i in $(seq 1 12); do
STATUS=$(curl -sS -o /dev/null -w '%{http_code}' https://staging.rebreak.org/api/auth/me 2>/dev/null || echo "000")
echo "Attempt $i: $STATUS"
[ "$STATUS" = "401" ] || [ "$STATUS" = "200" ] && echo "PASSED" && break
sleep 5
done
```
Expected: `PASSED`
- [ ] **Step 5: Admin-Deploy testen**
In GitHub: Actions → Deploy Admin Staging → Run workflow.
Health-Check:
```bash
curl -sS -o /dev/null -w '%{http_code}' https://admin.staging.rebreak.org/
```
Expected: Nicht `000`, `502` oder `503`.
---
### Task 7: Alten Webhook-Deploy abschalten (optional, nach stabilem Betrieb)
**Files:**
- Ausführen auf: `staging.rebreak.org`
- GitHub Repo: Settings → Webhooks
- [ ] **Step 1: Mindestens 35 erfolgreiche Deploys über neuen Runner abwarten**
- [ ] **Step 2: GitHub-Webhook deaktivieren**
In GitHub: Settings → Webhooks → `https://staging.rebreak.org/webhook` → Active: aus.
- [ ] **Step 3: Webhook-Service auf Server stoppen**
```bash
ssh root@staging.rebreak.org
pm2 stop rebreak-webhook
pm2 save
```
- [ ] **Step 4: Legacy-Dateien archivieren (nicht löschen)**
```bash
cd /srv/rebreak
mkdir -p scripts/legacy
mv scripts/deploy.sh scripts/legacy/deploy.sh
mv scripts/deploy-webhook scripts/legacy/deploy-webhook
```
- [ ] **Step 5: `ecosystem.config.js` bereinigen**
Entferne den Block für `rebreak-webhook` aus `ecosystem.config.js` und deploye die Änderung.
---
### Task 8: Cleanup und Monitoring
- [ ] **Step 1: Altes `HETZNER_SSH_KEY` Secret aus GitHub entfernen**
Nur nachdem `STAGING_DEPLOY_KEY` erfolgreich getestet wurde.
- [ ] **Step 2: Runner-Verfügbarkeit überwachen**
In GitHub: Settings → Actions → Runners → Status regelmäßig prüfen.
- [ ] **Step 3: Log-Rotation auf Runner einrichten**
```bash
logrotate --version || apt-get install -y logrotate
cat > /etc/logrotate.d/github-runner << 'EOF'
/srv/raynis-builder/_diag/*.log {
daily
rotate 7
compress
missingok
notifempty
}
EOF
```
- [ ] **Step 4: pnpm-Store auf Runner bereinigen (monatlich)**
```bash
pnpm store prune
```
---
## Self-Review
### Spec coverage
- Self-hosted Runner auf `api.trucko.org`: Task 1 + 2
- Label `raynis-builder`: Task 2
- Code-Hosting bleibt auf GitHub: implizit durch GitHub Actions
- Workflows auf `runs-on: [self-hosted, raynis-builder]`: Task 5
- Deploy zu `staging.rebreak.org`: Task 3 + 4 + 6
- Sicherheit (kein PR-Trigger): Task 5 (Workflow-Trigger bleibt `push: branches: [main]`)
- Webhook abschalten: Task 7
### Placeholder scan
Keine TBD/TODO. Alle Befehle sind konkret.
### Konsistenz
- Label durchgehend `raynis-builder`
- Secret-Name durchgehend `STAGING_DEPLOY_KEY`
- Node-Version durchgehend `24.11.1`
- pnpm-Version durchgehend `10.23.0`
- Server-IP durchgehend `128.140.47.53`

View File

@ -0,0 +1,242 @@
# Self-Hosted GitHub Actions Runner für rebreak-monorepo
**Datum:** 2026-06-18
**Status:** Genehmigt — bereit für Implementierungsplanung
**Autor:** Kimi Code (Brainstorming-Session)
**Ziel:** GitHub-Actions-Buildkosten eliminieren, indem Backend- und Admin-Builds auf den bereits vorhandenen Hetzner-Server `api.trucko.org` (128.140.47.53) verlagert werden.
---
## 1. Zusammenfassung
Derzeit laufen Backend- und Admin-Builds auf kostenpflichtigen GitHub-gehosteten Runnern (`ubuntu-latest`). Bei einem privaten Repository führt das bei hoher Push-Frequenz zu Kosten von über 200 €/Monat.
Dieses Design schlägt vor, einen **self-hosted GitHub Actions Runner** auf dem bereits vorhandenen, aktuell ungenutzten Hetzner-Server `api.trucko.org` (128.140.47.53, 8 GB RAM) zu betreiben. Der Code-Hosting-Aspekt bleibt vollständig auf GitHub; nur die Build- und Deploy-Ausführung wird auf die eigene Infrastruktur verlagert.
Das Runner-Label `raynis-builder` ist bewusst generisch gewählt, damit später weitere Raynis-Apps (Mutterfirma von ReBreak) denselben Runner nutzen können.
---
## 2. Kontext & Ausgangslage
### Aktueller Flow
```
local dev → push to main
GitHub Actions (ubuntu-latest)
Build Backend / Admin
Upload Artifact
Deploy-Job (ubuntu-latest)
SCP + SSH zu staging.rebreak.org
deploy-from-artifact.sh
```
### Bestehende Komponenten (werden wiederverwendet)
- `.github/workflows/deploy-staging.yml`
- `.github/workflows/deploy-admin-staging.yml`
- `scripts/deploy-from-artifact.sh`
- `scripts/deploy-admin-from-artifact.sh`
- `ecosystem.config.js` auf `staging.rebreak.org`
### Probleme mit dem aktuellen Setup
- GitHub Actions Minuten kosten bei privatem Repo über 200 €/Monat.
- Keine Notwendigkeit für die ursprüngliche Entscheidung, Builds auf GitHub laufen zu lassen (Server-OOM auf CX23) — `api.trucko.org` hat 8 GB RAM.
---
## 3. Ziele
1. **Kosten eliminieren:** Keine kostenpflichtigen GitHub Actions Minuten mehr für Backend-/Admin-Builds.
2. **Minimaler Änderungsaufwand:** Bestehende Workflows und Deploy-Scripts bleiben weitgehend erhalten.
3. **Sicherheit:** Self-hosted Runner wird nicht für Pull Requests von Forks genutzt.
4. **Zuverlässigkeit:** Concurrency-Group, Health-Check und atomic deploy bleiben erhalten.
## 4. Nicht-Ziele
- Kein Wechsel des Code-Hostings (GitHub bleibt).
- Kein Ersatz für Windows- oder iOS-Builds (diese bleiben bei GitHub Actions oder werden lokal gebaut).
- Keine Einführung zusätzlicher CI-Tools wie Gitea, GitLab oder Woodpecker.
- Keine Änderung an der Production-Infrastruktur auf `staging.rebreak.org` über das Nötige hinaus.
---
## 5. Architektur
```
GitHub Push (main)
GitHub Actions Workflow
Self-hosted Runner auf api.trucko.org
Checkout → pnpm install → pnpm build → tar artifact
SCP artifact zu staging.rebreak.org
SSH: bash /srv/rebreak/scripts/deploy-from-artifact.sh
Atomic swap .output-staging + pm2 restart + health-check
```
### Komponenten
| Komponente | Ort | Verantwortung |
|---|---|---|
| GitHub Repository | GitHub Cloud | Code-Hosting, Workflow-Definitionen |
| GitHub Actions Runner | `api.trucko.org` | Workflow-Ausführung, Build, Deploy-Trigger |
| Build-Umgebung | `api.trucko.org` | `pnpm install`, `pnpm build`, Artifact-Erstellung |
| Production-Server | `staging.rebreak.org` | Artifact entpacken, Migrationen, PM2-Restart |
| Deploy-Script | `staging.rebreak.org` | `scripts/deploy-from-artifact.sh` / `deploy-admin-from-artifact.sh` |
---
## 6. Datenfluss (detailliert)
### 6.1 Backend-Deploy
1. Push auf `main` triggert `.github/workflows/deploy-staging.yml`.
2. Workflow-Job `build` läuft auf `runs-on: self-hosted` (Runner auf `api.trucko.org`).
3. Runner checkt Repo mit `actions/checkout@v4` aus.
4. `pnpm install --frozen-lockfile` wird ausgeführt.
5. `cd backend && pnpm build` erzeugt `backend/.output`.
6. Artifact wird gepackt: `tar czf backend-output.tar.gz -C backend/.output .`.
7. Artifact wird per SCP auf `staging.rebreak.org:/srv/rebreak/backend/.output-incoming.tar.gz` kopiert.
8. `imap-idle/` wird per SCP synchronisiert.
9. Runner führt per SSH `bash /srv/rebreak/scripts/deploy-from-artifact.sh` aus.
10. Server entpackt Artifact atomisch, führt ggf. Prisma-Migrationen aus und restartet `rebreak-staging`.
11. Health-Check gegen `https://staging.rebreak.org/api/auth/me` prüft Erreichbarkeit.
### 6.2 Admin-Deploy
- Analog zu Backend über `.github/workflows/deploy-admin-staging.yml`.
- Ziel: `staging.rebreak.org:/srv/rebreak/apps/admin/.output-incoming.tar.gz`.
- Script: `scripts/deploy-admin-from-artifact.sh`.
- Health-Check: `https://admin.staging.rebreak.org/`.
---
## 7. Sicherheit
### Runner-Isolation
- Der Runner wird als **Repository-Level Runner** im `rebreak-monorepo` registriert, damit nur dieses Repo ihn nutzen kann.
- Der Runner bekommt ein dediziertes Label: `raynis-builder`.
- Der Workflow fordert das Label explizit an: `runs-on: [self-hosted, raynis-builder]`.
- Der Runner reagiert **nicht** auf Pull-Request-Events — nur auf `push` zu `main` und `workflow_dispatch`.
### SSH-Zugriff
- Ein neuer SSH-Deploy-Key wird auf `api.trucko.org` erzeugt.
- Der Public Key wird auf `staging.rebreak.org` in `/root/.ssh/authorized_keys` eingetragen.
- Der Private Key wird als GitHub Secret (z. B. `STAGING_DEPLOY_KEY`) im Environment `staging` hinterlegt.
### Secrets
- Keine Secrets im Runner-Image.
- Alle sensiblen Daten kommen weiterhin aus GitHub Environments oder Infisical (auf `staging.rebreak.org`).
---
## 8. Fehlerbehandlung
### Build-Fehler
- Wenn `pnpm build` fehlschlägt, bricht der Workflow ab.
- Es wird nichts auf `staging.rebreak.org` kopiert.
### Deploy-Fehler
- `deploy-from-artifact.sh` bricht bei fehlgeschlagenen Prisma-Migrationen ab.
- Der alte `.output-staging`-Ordner bleibt durch atomisches `mv` erhalten.
- Health-Check muss bestehen, sonst schlägt der Workflow fehl.
### Parallelität
- Concurrency-Group bleibt erhalten:
```yaml
concurrency:
group: deploy-staging
cancel-in-progress: false
```
- Parallele Deploys queueen sich, statt sich gegenseitig abzubrechen.
---
## 9. Tests in CI
Aktuell laufen keine automatisierten Tests in den Deploy-Workflows. Mit dem eigenen Runner entstehen hierfür keine zusätzlichen Kosten.
**Empfohlener optionaler nächster Schritt:**
- Vitest-Unit-Tests vor dem Build-Schritt ausführen.
- Reihenfolge: `install → lint → test → build → deploy`.
Dies ist **nicht Teil dieses Designs** und wird in einem separaten Plan behandelt.
---
## 10. Migrationsschritte
1. **Runner auf `api.trucko.org` installieren**
- Node.js 24.11.1, pnpm 10.23.0, git einrichten.
- GitHub Actions Runner herunterladen und konfigurieren.
- Als Service registrieren (`./svc.sh install && ./svc.sh start`).
- Label `raynis-builder` zuweisen.
2. **SSH-Verbindung einrichten**
- Auf `api.trucko.org`: `ssh-keygen -t ed25519 -f ~/.ssh/rebreak-deploy`.
- Public Key auf `staging.rebreak.org` in `/root/.ssh/authorized_keys` eintragen.
- Private Key als GitHub Secret `STAGING_DEPLOY_KEY` im Environment `staging` hinterlegen.
3. **Workflows anpassen**
- `runs-on: ubuntu-latest``runs-on: [self-hosted, raynis-builder]`.
- SSH-Setup-Step an neues Secret `STAGING_DEPLOY_KEY` anpassen.
- Node-Setup beibehalten (Version 24.11.1).
4. **Test-Deploy durchführen**
- `workflow_dispatch` auf `main` auslösen.
- Logs auf `api.trucko.org` und `staging.rebreak.org` prüfen.
- Health-Check bestätigen.
5. **Alte Pfade abschalten**
- Nach erfolgreichen Test-Deploys können die alten Webhook-basierten Deploys deaktiviert werden.
- `pm2 stop rebreak-webhook && pm2 save` auf `staging.rebreak.org` (nur auf User-Approval).
---
## 11. Risiken & Mitigationen
| Risiko | Wahrscheinlichkeit | Auswirkung | Mitigation |
|---|---|---|---|
| Runner-Prozess stürzt ab | Niedrig | Hoch | Runner als systemd-Service laufen lassen; GitHub zeigt Runner offline an. |
| Build auf `api.trucko.org` zu langsam | Mittel | Mittel | 8 GB RAM + 8 GB Swap einrichten; SSD statt HDD prüfen. |
| SSH-Verbindung zwischen Servern failt | Niedrig | Hoch | SSH-Key testen; `ssh-keyscan` im Workflow nutzen. |
| Runner wird versehentlich für PRs genutzt | Niedrig | Hoch | Trigger auf `push: branches: [main]` beschränken; kein `pull_request`. |
| Windows-/Native-Builds bleiben kostenpflichtig | Sicher | Niedrig | In separatem Schritt evaluieren (nicht Teil dieses Designs). |
---
## 12. Offene Punkte
1. Exakte Spezifikation von `api.trucko.org` bestätigen (CPU, SSD, OS).
2. Soll der Runner unter einem dedizierten User laufen oder als `root`?
3. Sollen bestehende Webhook-Deploys sofort abgeschaltet oder parallel als Fallback laufen?
4. Sollen Vitest-Tests vor dem Build integriert werden (separater Plan)?
---
## 13. Erwartetes Ergebnis
Nach der Umstellung:
- Backend- und Admin-Builds laufen auf `api.trucko.org`.
- GitHub-Actions-Minutenkosten für diese Workflows fallen nahezu auf null.
- Die Deploy-Mechanik auf `staging.rebreak.org` bleibt unverändert.
- Windows-/Native-Builds bleiben bei GitHub Actions oder werden separat betrachtet.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

511
pnpm-lock.yaml generated
View File

@ -36,7 +36,7 @@ importers:
version: 1.15.0(magicast@0.5.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(vue@3.5.34(typescript@5.9.3))
'@nuxt/ui':
specifier: ^4.5.1
version: 4.7.1(@internationalized/date@3.12.1)(@internationalized/number@3.6.6)(@tiptap/extensions@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.2.4)(typescript@5.9.3)(valibot@1.4.1(typescript@5.9.3))(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(vue-router@4.6.4(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3))(yjs@13.6.30)(zod@3.25.76)
version: 4.7.1(@internationalized/date@3.12.1)(@internationalized/number@3.6.6)(@tiptap/extensions@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.3)(qrcode@1.5.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.2.4)(typescript@5.9.3)(valibot@1.4.1(typescript@5.9.3))(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(vue-router@4.6.4(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3))(yjs@13.6.30)(zod@3.25.76)
'@nuxtjs/supabase':
specifier: ^2.0.4
version: 2.0.6
@ -45,7 +45,7 @@ importers:
version: 14.3.0(vue@3.5.34(typescript@5.9.3))
'@vueuse/nuxt':
specifier: ^14.2.1
version: 14.3.0(magicast@0.5.3)(nuxt@4.1.3(@electric-sql/pglite@0.4.1)(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(eslint@10.3.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.3)(mysql2@3.15.3)(optionator@0.9.4)(rollup@4.60.3)(terser@5.46.2)(typescript@5.9.3)(yaml@2.8.4))(vue@3.5.34(typescript@5.9.3))
version: 14.3.0(magicast@0.5.3)(nuxt@4.1.3(@electric-sql/pglite@0.4.1)(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(eslint@10.3.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.3)(mysql2@3.15.3)(optionator@0.9.4)(rollup@4.60.3)(terser@5.46.2)(typescript@5.9.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(yaml@2.8.4))(vue@3.5.34(typescript@5.9.3))
nuxt:
specifier: 4.1.3
version: 4.1.3(@electric-sql/pglite@0.4.1)(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(eslint@10.3.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.3)(mysql2@3.15.3)(optionator@0.9.4)(rollup@4.60.3)(terser@5.46.2)(typescript@5.9.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(yaml@2.8.4)
@ -76,7 +76,7 @@ importers:
version: 1.2.3
'@nuxt/fonts':
specifier: ^0.11.4
version: 0.11.4(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(ioredis@5.10.1)(magicast@0.5.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))
version: 0.11.4(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(ioredis@5.10.1)(magicast@0.5.3)
'@nuxt/icon':
specifier: ^1.10.0
version: 1.15.0(magicast@0.5.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(vue@3.5.34(typescript@5.9.3))
@ -85,7 +85,7 @@ importers:
version: 1.11.0(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(ioredis@5.10.1)(magicast@0.5.3)
'@nuxt/ui':
specifier: ^4.5.1
version: 4.7.1(@internationalized/date@3.12.1)(@internationalized/number@3.6.6)(@tiptap/extensions@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.2.4)(typescript@5.9.3)(valibot@1.4.1(typescript@5.9.3))(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(vue-router@4.6.4(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3))(yjs@13.6.30)(zod@3.25.76)
version: 4.7.1(@internationalized/date@3.12.1)(@internationalized/number@3.6.6)(@tiptap/extensions@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.3)(qrcode@1.5.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.2.4)(typescript@5.9.3)(valibot@1.4.1(typescript@5.9.3))(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(vue-router@4.6.4(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3))(yjs@13.6.30)(zod@3.25.76)
'@nuxtjs/i18n':
specifier: ^9.5.6
version: 9.5.6(@vue/compiler-dom@3.5.35)(eslint@10.3.0(jiti@2.7.0))(magicast@0.5.3)(rollup@4.60.3)(vue@3.5.34(typescript@5.9.3))
@ -94,7 +94,7 @@ importers:
version: 3.0.3(magicast@0.5.3)(vue@3.5.34(typescript@5.9.3))
'@vueuse/nuxt':
specifier: ^14.2.1
version: 14.3.0(magicast@0.5.3)(nuxt@4.1.3(@electric-sql/pglite@0.4.1)(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(eslint@10.3.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.3)(mysql2@3.15.3)(optionator@0.9.4)(rollup@4.60.3)(terser@5.46.2)(typescript@5.9.3)(yaml@2.8.4))(vue@3.5.34(typescript@5.9.3))
version: 14.3.0(magicast@0.5.3)(nuxt@4.1.3(@electric-sql/pglite@0.4.1)(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(eslint@10.3.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.3)(mysql2@3.15.3)(optionator@0.9.4)(rollup@4.60.3)(terser@5.46.2)(typescript@5.9.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(yaml@2.8.4))(vue@3.5.34(typescript@5.9.3))
chart.js:
specifier: ^4.5.1
version: 4.5.1
@ -124,6 +124,52 @@ importers:
specifier: ^5.9.3
version: 5.9.3
apps/rebreak-magic:
dependencies:
'@nuxt/icon':
specifier: ^1.10.0
version: 1.15.0(magicast@0.5.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(vue@3.5.35(typescript@5.9.3))
'@nuxt/ui':
specifier: ^4.5.1
version: 4.7.1(@internationalized/date@3.12.1)(@internationalized/number@3.6.6)(@tiptap/extensions@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.3)(qrcode@1.5.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.2.4)(typescript@5.9.3)(valibot@1.4.1(typescript@5.9.3))(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(vue-router@4.6.4(vue@3.5.35(typescript@5.9.3)))(vue@3.5.35(typescript@5.9.3))(yjs@13.6.30)(zod@3.25.76)
'@vueuse/core':
specifier: ^14.2.1
version: 14.3.0(vue@3.5.35(typescript@5.9.3))
'@vueuse/nuxt':
specifier: ^14.2.1
version: 14.3.0(magicast@0.5.3)(nuxt@4.1.3(@electric-sql/pglite@0.4.1)(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(eslint@10.3.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.3)(mysql2@3.15.3)(optionator@0.9.4)(rollup@4.60.3)(terser@5.46.2)(typescript@5.9.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(yaml@2.8.4))(vue@3.5.35(typescript@5.9.3))
nuxt:
specifier: 4.1.3
version: 4.1.3(@electric-sql/pglite@0.4.1)(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(eslint@10.3.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.3)(mysql2@3.15.3)(optionator@0.9.4)(rollup@4.60.3)(terser@5.46.2)(typescript@5.9.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(yaml@2.8.4)
qrcode:
specifier: ^1.5.4
version: 1.5.4
tailwindcss:
specifier: ^4.1.18
version: 4.2.4
vue:
specifier: ^3.5.22
version: 3.5.35(typescript@5.9.3)
vue-router:
specifier: ^4.5.1
version: 4.6.4(vue@3.5.35(typescript@5.9.3))
devDependencies:
'@iconify-json/heroicons':
specifier: ^1.2.3
version: 1.2.3
'@tauri-apps/api':
specifier: ^2.0.0
version: 2.11.0
'@tauri-apps/cli':
specifier: ^2.0.0
version: 2.11.2
'@types/qrcode':
specifier: ^1.5.5
version: 1.5.6
typescript:
specifier: ^5.9.3
version: 5.9.3
apps/rebreak-magic-win:
dependencies:
'@fontsource/nunito':
@ -4054,6 +4100,9 @@ packages:
'@types/prop-types@15.7.15':
resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==}
'@types/qrcode@1.5.6':
resolution: {integrity: sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==}
'@types/react-dom@18.3.7':
resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==}
peerDependencies:
@ -4959,6 +5008,9 @@ packages:
client-only@0.0.1:
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
cliui@6.0.0:
resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
@ -5246,6 +5298,10 @@ packages:
supports-color:
optional: true
decamelize@1.2.0:
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
engines: {node: '>=0.10.0'}
decode-uri-component@0.2.2:
resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
engines: {node: '>=0.10'}
@ -5359,6 +5415,9 @@ packages:
resolution: {integrity: sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==}
engines: {node: '>=0.3.1'}
dijkstrajs@1.0.3:
resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==}
dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
@ -7705,6 +7764,10 @@ packages:
resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==}
engines: {node: '>=4.0.0'}
pngjs@5.0.0:
resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
engines: {node: '>=10.13.0'}
popmotion@11.0.5:
resolution: {integrity: sha512-la8gPM1WYeFznb/JqF4GiTkRRPZsfaj2+kCxqQgr2MJylMmIKUwBfWW8Wa5fml/8gmtlD5yI01MP1QCZPWmppA==}
@ -8091,6 +8154,11 @@ packages:
resolution: {integrity: sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==}
hasBin: true
qrcode@1.5.4:
resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==}
engines: {node: '>=10.13.0'}
hasBin: true
qs@6.15.1:
resolution: {integrity: sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==}
engines: {node: '>=0.6'}
@ -8433,6 +8501,9 @@ packages:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
require-main-filename@2.0.0:
resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
requireg@0.2.2:
resolution: {integrity: sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==}
engines: {node: '>= 4.0.0'}
@ -8631,6 +8702,9 @@ packages:
server-only@0.0.1:
resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==}
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'}
@ -9797,6 +9871,9 @@ packages:
resolution: {integrity: sha512-f+Gy33Oa5Z14XY9679Zze+7VFhbsQfBFXodnU2x589l4kxGM9L5Y8zETTmcMR5pWOPQyRv4Z0lNax6xCO0NSlA==}
engines: {node: '>=18'}
which-module@2.0.1:
resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
which-typed-array@1.1.20:
resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==}
engines: {node: '>= 0.4'}
@ -9828,6 +9905,10 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
@ -9933,6 +10014,9 @@ packages:
peerDependencies:
yjs: ^13.0.0
y18n@4.0.3:
resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
@ -9953,6 +10037,10 @@ packages:
engines: {node: '>= 14.6'}
hasBin: true
yargs-parser@18.1.3:
resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
engines: {node: '>=6'}
yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
@ -9961,6 +10049,10 @@ packages:
resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==}
engines: {node: ^20.19.0 || ^22.12.0 || >=23}
yargs@15.4.1:
resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
engines: {node: '>=8'}
yargs@17.7.2:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
@ -11414,6 +11506,15 @@ snapshots:
- '@vue/composition-api'
- vue
'@floating-ui/vue@1.1.11(vue@3.5.35(typescript@5.9.3))':
dependencies:
'@floating-ui/dom': 1.7.6
'@floating-ui/utils': 0.2.11
vue-demi: 0.14.10(vue@3.5.35(typescript@5.9.3))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
'@fontsource/nunito@5.2.7': {}
'@hono/node-server@1.19.11(hono@4.12.17)':
@ -11474,6 +11575,11 @@ snapshots:
'@iconify/types': 2.0.0
vue: 3.5.34(typescript@5.9.3)
'@iconify/vue@5.0.1(vue@3.5.35(typescript@5.9.3))':
dependencies:
'@iconify/types': 2.0.0
vue: 3.5.35(typescript@5.9.3)
'@ide/backoff@1.0.0': {}
'@internationalized/date@3.12.1':
@ -11918,7 +12024,7 @@ snapshots:
- utf-8-validate
- vue
'@nuxt/fonts@0.11.4(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(ioredis@5.10.1)(magicast@0.5.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))':
'@nuxt/fonts@0.11.4(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(ioredis@5.10.1)(magicast@0.5.3)':
dependencies:
'@nuxt/devtools-kit': 2.7.0(magicast@0.5.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))
'@nuxt/kit': 3.21.4(magicast@0.5.3)
@ -12026,6 +12132,28 @@ snapshots:
- vite
- vue
'@nuxt/icon@1.15.0(magicast@0.5.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(vue@3.5.35(typescript@5.9.3))':
dependencies:
'@iconify/collections': 1.0.680
'@iconify/types': 2.0.0
'@iconify/utils': 2.3.0
'@iconify/vue': 5.0.1(vue@3.5.35(typescript@5.9.3))
'@nuxt/devtools-kit': 2.7.0(magicast@0.5.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))
'@nuxt/kit': 3.21.4(magicast@0.5.3)
consola: 3.4.2
local-pkg: 1.1.2
mlly: 1.8.2
ohash: 2.0.11
pathe: 2.0.3
picomatch: 4.0.4
std-env: 3.10.0
tinyglobby: 0.2.16
transitivePeerDependencies:
- magicast
- supports-color
- vite
- vue
'@nuxt/icon@2.2.2(magicast@0.5.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(vue@3.5.34(typescript@5.9.3))':
dependencies:
'@iconify/collections': 1.0.680
@ -12047,6 +12175,27 @@ snapshots:
- vite
- vue
'@nuxt/icon@2.2.2(magicast@0.5.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(vue@3.5.35(typescript@5.9.3))':
dependencies:
'@iconify/collections': 1.0.680
'@iconify/types': 2.0.0
'@iconify/utils': 3.1.3
'@iconify/vue': 5.0.1(vue@3.5.35(typescript@5.9.3))
'@nuxt/devtools-kit': 3.2.4(magicast@0.5.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))
'@nuxt/kit': 4.4.4(magicast@0.5.3)
consola: 3.4.2
local-pkg: 1.1.2
mlly: 1.8.2
ohash: 2.0.11
pathe: 2.0.3
picomatch: 4.0.4
std-env: 4.1.0
tinyglobby: 0.2.16
transitivePeerDependencies:
- magicast
- vite
- vue
'@nuxt/image@1.11.0(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(ioredis@5.10.1)(magicast@0.5.3)':
dependencies:
'@nuxt/kit': 3.21.4(magicast@0.5.3)
@ -12242,7 +12391,7 @@ snapshots:
rc9: 3.0.1
std-env: 4.1.0
'@nuxt/ui@4.7.1(@internationalized/date@3.12.1)(@internationalized/number@3.6.6)(@tiptap/extensions@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.2.4)(typescript@5.9.3)(valibot@1.4.1(typescript@5.9.3))(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(vue-router@4.6.4(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3))(yjs@13.6.30)(zod@3.25.76)':
'@nuxt/ui@4.7.1(@internationalized/date@3.12.1)(@internationalized/number@3.6.6)(@tiptap/extensions@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.3)(qrcode@1.5.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.2.4)(typescript@5.9.3)(valibot@1.4.1(typescript@5.9.3))(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(vue-router@4.6.4(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3))(yjs@13.6.30)(zod@3.25.76)':
dependencies:
'@floating-ui/dom': 1.7.6
'@iconify/vue': 5.0.1(vue@3.5.34(typescript@5.9.3))
@ -12275,7 +12424,7 @@ snapshots:
'@tiptap/vue-3': 3.23.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(vue@3.5.34(typescript@5.9.3))
'@unhead/vue': 2.1.13(vue@3.5.34(typescript@5.9.3))
'@vueuse/core': 14.3.0(vue@3.5.34(typescript@5.9.3))
'@vueuse/integrations': 14.3.0(fuse.js@7.3.0)(vue@3.5.34(typescript@5.9.3))
'@vueuse/integrations': 14.3.0(fuse.js@7.3.0)(qrcode@1.5.4)(vue@3.5.34(typescript@5.9.3))
'@vueuse/shared': 14.3.0(vue@3.5.34(typescript@5.9.3))
colortranslator: 5.0.0
consola: 3.4.2
@ -12356,6 +12505,120 @@ snapshots:
- vue
- yjs
'@nuxt/ui@4.7.1(@internationalized/date@3.12.1)(@internationalized/number@3.6.6)(@tiptap/extensions@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.3)(qrcode@1.5.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.2.4)(typescript@5.9.3)(valibot@1.4.1(typescript@5.9.3))(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(vue-router@4.6.4(vue@3.5.35(typescript@5.9.3)))(vue@3.5.35(typescript@5.9.3))(yjs@13.6.30)(zod@3.25.76)':
dependencies:
'@floating-ui/dom': 1.7.6
'@iconify/vue': 5.0.1(vue@3.5.35(typescript@5.9.3))
'@nuxt/fonts': 0.14.0(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(ioredis@5.10.1)(magicast@0.5.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))
'@nuxt/icon': 2.2.2(magicast@0.5.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(vue@3.5.35(typescript@5.9.3))
'@nuxt/kit': 4.4.4(magicast@0.5.3)
'@nuxt/schema': 4.4.4
'@nuxtjs/color-mode': 3.5.2(magicast@0.5.3)
'@standard-schema/spec': 1.1.0
'@tailwindcss/postcss': 4.2.4
'@tailwindcss/vite': 4.2.4(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))
'@tanstack/vue-table': 8.21.3(vue@3.5.35(typescript@5.9.3))
'@tanstack/vue-virtual': 3.13.24(vue@3.5.35(typescript@5.9.3))
'@tiptap/core': 3.23.1(@tiptap/pm@3.23.1)
'@tiptap/extension-bubble-menu': 3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)
'@tiptap/extension-code': 3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))
'@tiptap/extension-collaboration': 3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30)
'@tiptap/extension-drag-handle': 3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/extension-collaboration@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30))(@tiptap/extension-node-range@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))
'@tiptap/extension-drag-handle-vue-3': 3.23.1(@tiptap/extension-drag-handle@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/extension-collaboration@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30))(@tiptap/extension-node-range@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30)))(@tiptap/pm@3.23.1)(@tiptap/vue-3@3.23.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(vue@3.5.35(typescript@5.9.3)))(vue@3.5.35(typescript@5.9.3))
'@tiptap/extension-floating-menu': 3.23.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)
'@tiptap/extension-horizontal-rule': 3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)
'@tiptap/extension-image': 3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))
'@tiptap/extension-mention': 3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(@tiptap/suggestion@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1))
'@tiptap/extension-node-range': 3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)
'@tiptap/extension-placeholder': 3.23.1(@tiptap/extensions@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1))
'@tiptap/markdown': 3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)
'@tiptap/pm': 3.23.1
'@tiptap/starter-kit': 3.23.1
'@tiptap/suggestion': 3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)
'@tiptap/vue-3': 3.23.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(vue@3.5.35(typescript@5.9.3))
'@unhead/vue': 2.1.13(vue@3.5.35(typescript@5.9.3))
'@vueuse/core': 14.3.0(vue@3.5.35(typescript@5.9.3))
'@vueuse/integrations': 14.3.0(fuse.js@7.3.0)(qrcode@1.5.4)(vue@3.5.35(typescript@5.9.3))
'@vueuse/shared': 14.3.0(vue@3.5.35(typescript@5.9.3))
colortranslator: 5.0.0
consola: 3.4.2
defu: 6.1.7
embla-carousel-auto-height: 8.6.0(embla-carousel@8.6.0)
embla-carousel-auto-scroll: 8.6.0(embla-carousel@8.6.0)
embla-carousel-autoplay: 8.6.0(embla-carousel@8.6.0)
embla-carousel-class-names: 8.6.0(embla-carousel@8.6.0)
embla-carousel-fade: 8.6.0(embla-carousel@8.6.0)
embla-carousel-vue: 8.6.0(vue@3.5.35(typescript@5.9.3))
embla-carousel-wheel-gestures: 8.1.0(embla-carousel@8.6.0)
fuse.js: 7.3.0
hookable: 6.1.1
knitwork: 1.3.0
magic-string: 0.30.21
mlly: 1.8.2
motion-v: 2.2.1(@vueuse/core@14.3.0(vue@3.5.35(typescript@5.9.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(vue@3.5.35(typescript@5.9.3))
ohash: 2.0.11
pathe: 2.0.3
reka-ui: 2.9.6(vue@3.5.35(typescript@5.9.3))
scule: 1.3.0
tailwind-merge: 3.5.0
tailwind-variants: 3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.4)
tailwindcss: 4.2.4
tinyglobby: 0.2.16
typescript: 5.9.3
ufo: 1.6.4
unplugin: 3.0.0
unplugin-auto-import: 21.0.0(@nuxt/kit@4.4.4(magicast@0.5.3))(@vueuse/core@14.3.0(vue@3.5.35(typescript@5.9.3)))
unplugin-vue-components: 32.0.0(@nuxt/kit@4.4.4(magicast@0.5.3))(vue@3.5.35(typescript@5.9.3))
vaul-vue: 0.4.1(reka-ui@2.9.6(vue@3.5.35(typescript@5.9.3)))(vue@3.5.35(typescript@5.9.3))
vue-component-type-helpers: 3.2.8
optionalDependencies:
'@internationalized/date': 3.12.1
'@internationalized/number': 3.6.6
valibot: 1.4.1(typescript@5.9.3)
vue-router: 4.6.4(vue@3.5.35(typescript@5.9.3))
zod: 3.25.76
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
- '@azure/data-tables'
- '@azure/identity'
- '@azure/keyvault-secrets'
- '@azure/storage-blob'
- '@capacitor/preferences'
- '@deno/kv'
- '@emotion/is-prop-valid'
- '@netlify/blobs'
- '@planetscale/database'
- '@tiptap/extensions'
- '@tiptap/y-tiptap'
- '@upstash/redis'
- '@vercel/blob'
- '@vercel/functions'
- '@vercel/kv'
- '@vue/composition-api'
- async-validator
- aws4fetch
- axios
- change-case
- db0
- drauu
- embla-carousel
- focus-trap
- idb-keyval
- ioredis
- jwt-decode
- magicast
- nprogress
- qrcode
- react
- react-dom
- sortablejs
- universal-cookie
- uploadthing
- vite
- vue
- yjs
'@nuxt/vite-builder@4.1.3(@types/node@22.19.17)(eslint@10.3.0(jiti@2.7.0))(lightningcss@1.32.0)(magicast@0.5.3)(optionator@0.9.4)(rollup@4.60.3)(terser@5.46.2)(typescript@5.9.3)(vue@3.5.34(typescript@5.9.3))(yaml@2.8.4)':
dependencies:
'@nuxt/kit': 4.1.3(magicast@0.5.3)
@ -13679,11 +13942,21 @@ snapshots:
'@tanstack/table-core': 8.21.3
vue: 3.5.34(typescript@5.9.3)
'@tanstack/vue-table@8.21.3(vue@3.5.35(typescript@5.9.3))':
dependencies:
'@tanstack/table-core': 8.21.3
vue: 3.5.35(typescript@5.9.3)
'@tanstack/vue-virtual@3.13.24(vue@3.5.34(typescript@5.9.3))':
dependencies:
'@tanstack/virtual-core': 3.14.0
vue: 3.5.34(typescript@5.9.3)
'@tanstack/vue-virtual@3.13.24(vue@3.5.35(typescript@5.9.3))':
dependencies:
'@tanstack/virtual-core': 3.14.0
vue: 3.5.35(typescript@5.9.3)
'@tauri-apps/api@2.11.0': {}
'@tauri-apps/cli-darwin-arm64@2.11.2':
@ -13782,6 +14055,13 @@ snapshots:
'@tiptap/vue-3': 3.23.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(vue@3.5.34(typescript@5.9.3))
vue: 3.5.34(typescript@5.9.3)
'@tiptap/extension-drag-handle-vue-3@3.23.1(@tiptap/extension-drag-handle@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/extension-collaboration@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30))(@tiptap/extension-node-range@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30)))(@tiptap/pm@3.23.1)(@tiptap/vue-3@3.23.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(vue@3.5.35(typescript@5.9.3)))(vue@3.5.35(typescript@5.9.3))':
dependencies:
'@tiptap/extension-drag-handle': 3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/extension-collaboration@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30))(@tiptap/extension-node-range@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))
'@tiptap/pm': 3.23.1
'@tiptap/vue-3': 3.23.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(vue@3.5.35(typescript@5.9.3))
vue: 3.5.35(typescript@5.9.3)
'@tiptap/extension-drag-handle@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/extension-collaboration@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30))(@tiptap/extension-node-range@3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))':
dependencies:
'@floating-ui/dom': 1.7.6
@ -13948,6 +14228,16 @@ snapshots:
'@tiptap/extension-bubble-menu': 3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)
'@tiptap/extension-floating-menu': 3.23.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)
'@tiptap/vue-3@3.23.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)(vue@3.5.35(typescript@5.9.3))':
dependencies:
'@floating-ui/dom': 1.7.6
'@tiptap/core': 3.23.1(@tiptap/pm@3.23.1)
'@tiptap/pm': 3.23.1
vue: 3.5.35(typescript@5.9.3)
optionalDependencies:
'@tiptap/extension-bubble-menu': 3.23.1(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)
'@tiptap/extension-floating-menu': 3.23.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.23.1(@tiptap/pm@3.23.1))(@tiptap/pm@3.23.1)
'@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30)':
dependencies:
lib0: 0.2.117
@ -14031,6 +14321,10 @@ snapshots:
'@types/prop-types@15.7.15': {}
'@types/qrcode@1.5.6':
dependencies:
'@types/node': 22.19.17
'@types/react-dom@18.3.7(@types/react@18.3.31)':
dependencies:
'@types/react': 18.3.31
@ -14115,6 +14409,12 @@ snapshots:
unhead: 2.1.13
vue: 3.5.34(typescript@5.9.3)
'@unhead/vue@2.1.13(vue@3.5.35(typescript@5.9.3))':
dependencies:
hookable: 6.1.1
unhead: 2.1.13
vue: 3.5.35(typescript@5.9.3)
'@urql/core@5.2.0':
dependencies:
'@0no-co/graphql.web': 1.2.0
@ -14359,7 +14659,7 @@ snapshots:
'@vue-macros/common@1.16.1(vue@3.5.34(typescript@5.9.3))':
dependencies:
'@vue/compiler-sfc': 3.5.34
'@vue/compiler-sfc': 3.5.35
ast-kit: 1.4.3
local-pkg: 1.1.2
magic-string-ast: 0.7.1
@ -14370,7 +14670,7 @@ snapshots:
'@vue-macros/common@3.0.0-beta.16(vue@3.5.34(typescript@5.9.3))':
dependencies:
'@vue/compiler-sfc': 3.5.34
'@vue/compiler-sfc': 3.5.35
ast-kit: 2.2.0
local-pkg: 1.1.2
magic-string-ast: 1.0.3
@ -14390,7 +14690,7 @@ snapshots:
'@babel/types': 7.29.0
'@vue/babel-helper-vue-transform-on': 2.0.1
'@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.0)
'@vue/shared': 3.5.34
'@vue/shared': 3.5.35
optionalDependencies:
'@babel/core': 7.29.0
transitivePeerDependencies:
@ -14403,7 +14703,7 @@ snapshots:
'@babel/helper-module-imports': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
'@babel/parser': 7.29.3
'@vue/compiler-sfc': 3.5.34
'@vue/compiler-sfc': 3.5.35
transitivePeerDependencies:
- supports-color
@ -14513,8 +14813,8 @@ snapshots:
'@vue/language-core@3.2.8':
dependencies:
'@volar/language-core': 2.4.28
'@vue/compiler-dom': 3.5.34
'@vue/shared': 3.5.34
'@vue/compiler-dom': 3.5.35
'@vue/shared': 3.5.35
alien-signals: 3.1.2
muggle-string: 0.4.1
path-browserify: 1.0.1
@ -14578,6 +14878,16 @@ snapshots:
- '@vue/composition-api'
- vue
'@vueuse/core@10.11.1(vue@3.5.35(typescript@5.9.3))':
dependencies:
'@types/web-bluetooth': 0.0.20
'@vueuse/metadata': 10.11.1
'@vueuse/shared': 10.11.1(vue@3.5.35(typescript@5.9.3))
vue-demi: 0.14.10(vue@3.5.35(typescript@5.9.3))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
'@vueuse/core@13.9.0(vue@3.5.34(typescript@5.9.3))':
dependencies:
'@types/web-bluetooth': 0.0.21
@ -14592,13 +14902,30 @@ snapshots:
'@vueuse/shared': 14.3.0(vue@3.5.34(typescript@5.9.3))
vue: 3.5.34(typescript@5.9.3)
'@vueuse/integrations@14.3.0(fuse.js@7.3.0)(vue@3.5.34(typescript@5.9.3))':
'@vueuse/core@14.3.0(vue@3.5.35(typescript@5.9.3))':
dependencies:
'@types/web-bluetooth': 0.0.21
'@vueuse/metadata': 14.3.0
'@vueuse/shared': 14.3.0(vue@3.5.35(typescript@5.9.3))
vue: 3.5.35(typescript@5.9.3)
'@vueuse/integrations@14.3.0(fuse.js@7.3.0)(qrcode@1.5.4)(vue@3.5.34(typescript@5.9.3))':
dependencies:
'@vueuse/core': 14.3.0(vue@3.5.34(typescript@5.9.3))
'@vueuse/shared': 14.3.0(vue@3.5.34(typescript@5.9.3))
vue: 3.5.34(typescript@5.9.3)
optionalDependencies:
fuse.js: 7.3.0
qrcode: 1.5.4
'@vueuse/integrations@14.3.0(fuse.js@7.3.0)(qrcode@1.5.4)(vue@3.5.35(typescript@5.9.3))':
dependencies:
'@vueuse/core': 14.3.0(vue@3.5.35(typescript@5.9.3))
'@vueuse/shared': 14.3.0(vue@3.5.35(typescript@5.9.3))
vue: 3.5.35(typescript@5.9.3)
optionalDependencies:
fuse.js: 7.3.0
qrcode: 1.5.4
'@vueuse/metadata@10.11.1': {}
@ -14620,7 +14947,7 @@ snapshots:
transitivePeerDependencies:
- magicast
'@vueuse/nuxt@14.3.0(magicast@0.5.3)(nuxt@4.1.3(@electric-sql/pglite@0.4.1)(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(eslint@10.3.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.3)(mysql2@3.15.3)(optionator@0.9.4)(rollup@4.60.3)(terser@5.46.2)(typescript@5.9.3)(yaml@2.8.4))(vue@3.5.34(typescript@5.9.3))':
'@vueuse/nuxt@14.3.0(magicast@0.5.3)(nuxt@4.1.3(@electric-sql/pglite@0.4.1)(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(eslint@10.3.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.3)(mysql2@3.15.3)(optionator@0.9.4)(rollup@4.60.3)(terser@5.46.2)(typescript@5.9.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(yaml@2.8.4))(vue@3.5.34(typescript@5.9.3))':
dependencies:
'@nuxt/kit': 4.4.4(magicast@0.5.3)
'@vueuse/core': 14.3.0(vue@3.5.34(typescript@5.9.3))
@ -14631,6 +14958,17 @@ snapshots:
transitivePeerDependencies:
- magicast
'@vueuse/nuxt@14.3.0(magicast@0.5.3)(nuxt@4.1.3(@electric-sql/pglite@0.4.1)(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(eslint@10.3.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.3)(mysql2@3.15.3)(optionator@0.9.4)(rollup@4.60.3)(terser@5.46.2)(typescript@5.9.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(yaml@2.8.4))(vue@3.5.35(typescript@5.9.3))':
dependencies:
'@nuxt/kit': 4.4.4(magicast@0.5.3)
'@vueuse/core': 14.3.0(vue@3.5.35(typescript@5.9.3))
'@vueuse/metadata': 14.3.0
local-pkg: 1.1.2
nuxt: 4.1.3(@electric-sql/pglite@0.4.1)(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.1)(mysql2@3.15.3))(eslint@10.3.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.3)(mysql2@3.15.3)(optionator@0.9.4)(rollup@4.60.3)(terser@5.46.2)(typescript@5.9.3)(vite@7.3.3(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.4))(yaml@2.8.4)
vue: 3.5.35(typescript@5.9.3)
transitivePeerDependencies:
- magicast
'@vueuse/shared@10.11.1(vue@3.5.34(typescript@5.9.3))':
dependencies:
vue-demi: 0.14.10(vue@3.5.34(typescript@5.9.3))
@ -14638,6 +14976,13 @@ snapshots:
- '@vue/composition-api'
- vue
'@vueuse/shared@10.11.1(vue@3.5.35(typescript@5.9.3))':
dependencies:
vue-demi: 0.14.10(vue@3.5.35(typescript@5.9.3))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
'@vueuse/shared@13.9.0(vue@3.5.34(typescript@5.9.3))':
dependencies:
vue: 3.5.34(typescript@5.9.3)
@ -14646,6 +14991,10 @@ snapshots:
dependencies:
vue: 3.5.34(typescript@5.9.3)
'@vueuse/shared@14.3.0(vue@3.5.35(typescript@5.9.3))':
dependencies:
vue: 3.5.35(typescript@5.9.3)
'@xmldom/xmldom@0.8.13': {}
'@xmldom/xmldom@0.9.10': {}
@ -15273,6 +15622,12 @@ snapshots:
client-only@0.0.1: {}
cliui@6.0.0:
dependencies:
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi: 6.2.0
cliui@8.0.1:
dependencies:
string-width: 4.2.3
@ -15545,6 +15900,8 @@ snapshots:
dependencies:
ms: 2.1.3
decamelize@1.2.0: {}
decode-uri-component@0.2.2: {}
decompress-response@6.0.0:
@ -15634,6 +15991,8 @@ snapshots:
diff@9.0.0: {}
dijkstrajs@1.0.3: {}
dlv@1.1.3: {}
dom-serializer@2.0.0:
@ -15719,6 +16078,12 @@ snapshots:
embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0)
vue: 3.5.34(typescript@5.9.3)
embla-carousel-vue@8.6.0(vue@3.5.35(typescript@5.9.3)):
dependencies:
embla-carousel: 8.6.0
embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0)
vue: 3.5.35(typescript@5.9.3)
embla-carousel-wheel-gestures@8.1.0(embla-carousel@8.6.0):
dependencies:
embla-carousel: 8.6.0
@ -17801,6 +18166,19 @@ snapshots:
- react
- react-dom
motion-v@2.2.1(@vueuse/core@14.3.0(vue@3.5.35(typescript@5.9.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(vue@3.5.35(typescript@5.9.3)):
dependencies:
'@vueuse/core': 14.3.0(vue@3.5.35(typescript@5.9.3))
framer-motion: 12.38.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
hey-listen: 1.0.8
motion-dom: 12.38.0
motion-utils: 12.36.0
vue: 3.5.35(typescript@5.9.3)
transitivePeerDependencies:
- '@emotion/is-prop-valid'
- react
- react-dom
mri@1.2.0: {}
mrmime@2.0.1: {}
@ -18675,6 +19053,8 @@ snapshots:
pngjs@3.4.0: {}
pngjs@5.0.0: {}
popmotion@11.0.5:
dependencies:
framesync: 6.1.2
@ -19073,6 +19453,12 @@ snapshots:
qrcode-terminal@0.11.0: {}
qrcode@1.5.4:
dependencies:
dijkstrajs: 1.0.3
pngjs: 5.0.0
yargs: 15.4.1
qs@6.15.1:
dependencies:
side-channel: 1.1.0
@ -19468,12 +19854,30 @@ snapshots:
transitivePeerDependencies:
- '@vue/composition-api'
reka-ui@2.9.6(vue@3.5.35(typescript@5.9.3)):
dependencies:
'@floating-ui/dom': 1.7.6
'@floating-ui/vue': 1.1.11(vue@3.5.35(typescript@5.9.3))
'@internationalized/date': 3.12.1
'@internationalized/number': 3.6.6
'@tanstack/vue-virtual': 3.13.24(vue@3.5.35(typescript@5.9.3))
'@vueuse/core': 14.3.0(vue@3.5.35(typescript@5.9.3))
'@vueuse/shared': 14.3.0(vue@3.5.35(typescript@5.9.3))
aria-hidden: 1.2.6
defu: 6.1.7
ohash: 2.0.11
vue: 3.5.35(typescript@5.9.3)
transitivePeerDependencies:
- '@vue/composition-api'
remeda@2.33.4: {}
require-directory@2.1.1: {}
require-from-string@2.0.2: {}
require-main-filename@2.0.0: {}
requireg@0.2.2:
dependencies:
nested-error-stacks: 2.0.1
@ -19693,6 +20097,8 @@ snapshots:
server-only@0.0.1: {}
set-blocking@2.0.0: {}
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
@ -20379,6 +20785,18 @@ snapshots:
'@nuxt/kit': 4.4.4(magicast@0.5.3)
'@vueuse/core': 14.3.0(vue@3.5.34(typescript@5.9.3))
unplugin-auto-import@21.0.0(@nuxt/kit@4.4.4(magicast@0.5.3))(@vueuse/core@14.3.0(vue@3.5.35(typescript@5.9.3))):
dependencies:
local-pkg: 1.1.2
magic-string: 0.30.21
picomatch: 4.0.4
unimport: 5.7.0
unplugin: 2.3.11
unplugin-utils: 0.3.1
optionalDependencies:
'@nuxt/kit': 4.4.4(magicast@0.5.3)
'@vueuse/core': 14.3.0(vue@3.5.35(typescript@5.9.3))
unplugin-utils@0.2.5:
dependencies:
pathe: 2.0.3
@ -20404,6 +20822,21 @@ snapshots:
optionalDependencies:
'@nuxt/kit': 4.4.4(magicast@0.5.3)
unplugin-vue-components@32.0.0(@nuxt/kit@4.4.4(magicast@0.5.3))(vue@3.5.35(typescript@5.9.3)):
dependencies:
chokidar: 5.0.0
local-pkg: 1.1.2
magic-string: 0.30.21
mlly: 1.8.2
obug: 2.1.1
picomatch: 4.0.4
tinyglobby: 0.2.16
unplugin: 3.0.0
unplugin-utils: 0.3.1
vue: 3.5.35(typescript@5.9.3)
optionalDependencies:
'@nuxt/kit': 4.4.4(magicast@0.5.3)
unplugin-vue-router@0.12.0(vue-router@4.6.4(vue@3.5.34(typescript@5.9.3)))(vue@3.5.34(typescript@5.9.3)):
dependencies:
'@babel/types': 7.29.0
@ -20578,6 +21011,14 @@ snapshots:
transitivePeerDependencies:
- '@vue/composition-api'
vaul-vue@0.4.1(reka-ui@2.9.6(vue@3.5.35(typescript@5.9.3)))(vue@3.5.35(typescript@5.9.3)):
dependencies:
'@vueuse/core': 10.11.1(vue@3.5.35(typescript@5.9.3))
reka-ui: 2.9.6(vue@3.5.35(typescript@5.9.3))
vue: 3.5.35(typescript@5.9.3)
transitivePeerDependencies:
- '@vue/composition-api'
vaul@1.1.2(@types/react-dom@18.3.7(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.3.7(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
@ -20815,6 +21256,10 @@ snapshots:
dependencies:
vue: 3.5.34(typescript@5.9.3)
vue-demi@0.14.10(vue@3.5.35(typescript@5.9.3)):
dependencies:
vue: 3.5.35(typescript@5.9.3)
vue-devtools-stub@0.1.0: {}
vue-i18n@10.0.8(vue@3.5.34(typescript@5.9.3)):
@ -20829,6 +21274,11 @@ snapshots:
'@vue/devtools-api': 6.6.4
vue: 3.5.34(typescript@5.9.3)
vue-router@4.6.4(vue@3.5.35(typescript@5.9.3)):
dependencies:
'@vue/devtools-api': 6.6.4
vue: 3.5.35(typescript@5.9.3)
vue-virtual-scroller@3.0.4(vue@3.5.35(typescript@5.9.3)):
dependencies:
vue: 3.5.35(typescript@5.9.3)
@ -20888,6 +21338,8 @@ snapshots:
wheel-gestures@2.2.48: {}
which-module@2.0.1: {}
which-typed-array@1.1.20:
dependencies:
available-typed-arrays: 1.0.7
@ -20919,6 +21371,12 @@ snapshots:
word-wrap@1.2.5: {}
wrap-ansi@6.2.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
@ -20990,6 +21448,8 @@ snapshots:
lib0: 0.2.117
yjs: 13.6.30
y18n@4.0.3: {}
y18n@5.0.8: {}
yallist@3.1.1: {}
@ -21003,10 +21463,29 @@ snapshots:
yaml@2.8.4: {}
yargs-parser@18.1.3:
dependencies:
camelcase: 5.3.1
decamelize: 1.2.0
yargs-parser@21.1.1: {}
yargs-parser@22.0.0: {}
yargs@15.4.1:
dependencies:
cliui: 6.0.0
decamelize: 1.2.0
find-up: 4.1.0
get-caller-file: 2.0.5
require-directory: 2.1.1
require-main-filename: 2.0.0
set-blocking: 2.0.0
string-width: 4.2.3
which-module: 2.0.1
y18n: 4.0.3
yargs-parser: 18.1.3
yargs@17.7.2:
dependencies:
cliui: 8.0.1