diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3d4ff92d..606196da 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -79,10 +79,10 @@ jobs: cache: npm - name: Install dependencies - run: npm ci + run: npm ci --workspaces - name: Build macOS binaries - run: npm run build:mac + run: npm run build:mac --workspace @codenomad/electron-app - name: Upload release assets env: @@ -91,7 +91,7 @@ jobs: run: | set -euo pipefail shopt -s nullglob - for file in release/*; do + for file in packages/electron-app/release/*; do [ -f "$file" ] || continue case "$file" in *.dmg|*.zip) @@ -119,10 +119,10 @@ jobs: cache: npm - name: Install dependencies - run: npm ci + run: npm ci --workspaces - name: Build Windows binaries - run: npm run build:win + run: npm run build:win --workspace @codenomad/electron-app - name: Upload release assets shell: pwsh @@ -130,7 +130,7 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} TAG: ${{ needs.prepare-release.outputs.tag }} run: | - Get-ChildItem -Path "release" -File | Where-Object { + Get-ChildItem -Path "packages/electron-app/release" -File | Where-Object { $_.Name -match '\.(exe|zip)$' } | ForEach-Object { gh release upload $env:TAG $_.FullName --clobber @@ -152,10 +152,10 @@ jobs: cache: npm - name: Install dependencies - run: npm ci + run: npm ci --workspaces - name: Build Linux binaries - run: npm run build:linux + run: npm run build:linux --workspace @codenomad/electron-app - name: Upload release assets env: @@ -164,7 +164,7 @@ jobs: run: | set -euo pipefail shopt -s nullglob - for file in release/*; do + for file in packages/electron-app/release/*; do [ -f "$file" ] || continue case "$file" in *.AppImage|*.deb|*.tar.gz) @@ -198,10 +198,10 @@ jobs: sudo gem install --no-document fpm - name: Install project dependencies - run: npm ci + run: npm ci --workspaces - name: Build Linux RPM binaries - run: npm run build:linux-rpm + run: npm run build:linux-rpm --workspace @codenomad/electron-app - name: Upload RPM release assets env: @@ -210,7 +210,7 @@ jobs: run: | set -euo pipefail shopt -s nullglob - for file in release/*.rpm; do + for file in packages/electron-app/release/*.rpm; do [ -f "$file" ] || continue gh release upload "$TAG" "$file" --clobber done diff --git a/BUILD.md b/BUILD.md index 6043f022..4d2a95b6 100644 --- a/BUILD.md +++ b/BUILD.md @@ -10,6 +10,12 @@ This guide explains how to build distributable binaries for CodeNomad. ## Quick Start +All commands now run inside the workspace packages. From the repo root you can target the Electron app package directly: + +```bash +npm run build --workspace @codenomad/electron-app +``` + ### Build for Current Platform (macOS default) ```bash diff --git a/README.md b/README.md index 22ba7c1d..f19e3dca 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,15 @@ CodeNomad is built for people who live inside OpenCode for hours on end and need - [OpenCode CLI](https://opencode.ai) installed and available in your `PATH`, or point CodeNomad to a local binary through Advanced Settings. +## Repository Layout + +CodeNomad now ships as a small workspace with two packages: + +- `packages/ui` — SolidJS renderer, Tailwind styles, and standalone Vite configuration for building the UI bundle independently. +- `packages/electron-app` — Electron main/preload processes plus packaging scripts. It consumes the UI package during development/build via `electron-vite`. + +Use `npm run dev --workspace @codenomad/electron-app` for the Electron shell and `npm run dev --workspace @codenomad/ui` for UI-only work. Working with the workspace requires Node.js 18+ with npm 7 or newer so the workspace protocol is available. + ## Downloads Grab the latest build for macOS, Windows, and Linux from the [GitHub Releases page](https://github.com/shantur/CodeNomad/releases). diff --git a/TOOL_CALL_IMPLEMENTATION.md b/dev-docs/TOOL_CALL_IMPLEMENTATION.md similarity index 100% rename from TOOL_CALL_IMPLEMENTATION.md rename to dev-docs/TOOL_CALL_IMPLEMENTATION.md diff --git a/package-lock.json b/package-lock.json index a362221c..eee3e553 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,38 +1,19 @@ { - "name": "@shantur/codenomad", + "name": "codenomad-workspace", "version": "0.1.2", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@shantur/codenomad", + "name": "codenomad-workspace", "version": "0.1.2", "dependencies": { - "@git-diff-view/solid": "^0.0.8", - "@kobalte/core": "0.13.11", - "@opencode-ai/sdk": "1.0.68", - "@solidjs/router": "^0.13.0", - "github-markdown-css": "^5.8.1", - "ignore": "7.0.5", - "lucide-solid": "^0.300.0", - "marked": "^12.0.0", - "shiki": "^3.13.0", - "solid-js": "^1.8.0", - "solid-toast": "^0.5.0" + "7zip-bin": "^5.2.0" }, - "devDependencies": { - "@tsconfig/bun": "^1.0.9", - "autoprefixer": "10.4.21", - "electron": "39.0.0", - "electron-builder": "^24.0.0", - "electron-vite": "4.0.1", - "png2icons": "^2.0.1", - "pngjs": "^7.0.0", - "postcss": "8.5.6", - "tailwindcss": "3", - "typescript": "^5.3.0", - "vite": "^5.0.0", - "vite-plugin-solid": "^2.10.0" + "workspaces": { + "packages": [ + "packages/*" + ] } }, "node_modules/@alloc/quick-lru": { @@ -79,7 +60,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -331,6 +311,14 @@ "node": ">=6.9.0" } }, + "node_modules/@codenomad/electron-app": { + "resolved": "packages/electron-app", + "link": true + }, + "node_modules/@codenomad/ui": { + "resolved": "packages/ui", + "link": true + }, "node_modules/@corvu/utils": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@corvu/utils/-/utils-0.4.2.tgz", @@ -634,91 +622,6 @@ "node": ">= 10.0.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/darwin-x64": { "version": "0.25.12", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", @@ -736,346 +639,6 @@ "node": ">=18" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@floating-ui/core": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", @@ -1481,48 +1044,6 @@ "node": ">=14" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", - "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", - "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", - "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, "node_modules/@rollup/rollup-darwin-x64": { "version": "4.52.5", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", @@ -1537,258 +1058,6 @@ "darwin" ] }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", - "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", - "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", - "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", - "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", - "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", - "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", - "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", - "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", - "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", - "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", - "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", - "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", - "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", - "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", - "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", - "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", - "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", - "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@shikijs/core": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.15.0.tgz", @@ -2042,13 +1311,6 @@ "node": ">= 10" } }, - "node_modules/@tsconfig/bun": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/bun/-/bun-1.0.9.tgz", - "integrity": "sha512-4M0/Ivfwcpz325z6CwSifOBZYji3DFOEpY6zEUt0+Xi2qRhzwvmqQN9XAHJh3OVvRJuAqVTLU2abdCplvp6mwQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -2268,7 +1530,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", - "dev": true, "license": "MIT" }, "node_modules/agent-base": { @@ -2290,7 +1551,6 @@ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2466,6 +1726,7 @@ "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "archiver-utils": "^2.1.0", "async": "^3.2.4", @@ -2485,6 +1746,7 @@ "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "glob": "^7.1.4", "graceful-fs": "^4.2.0", @@ -2507,6 +1769,7 @@ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -2522,7 +1785,8 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/archiver-utils/node_modules/string_decoder": { "version": "1.1.1", @@ -2530,6 +1794,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -2748,6 +2013,7 @@ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -2823,7 +2089,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.19", "caniuse-lite": "^1.0.30001751", @@ -3287,6 +2552,7 @@ "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "buffer-crc32": "^0.2.13", "crc32-stream": "^4.0.2", @@ -3393,6 +2659,7 @@ "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "crc32": "bin/crc32.njs" }, @@ -3406,6 +2673,7 @@ "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "crc-32": "^1.2.0", "readable-stream": "^3.4.0" @@ -3638,7 +2906,6 @@ "integrity": "sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "app-builder-lib": "24.13.3", "builder-util": "24.13.1", @@ -3823,6 +3090,7 @@ "integrity": "sha512-oHkV0iogWfyK+ah9ZIvMDpei1m9ZRpdXcvde1wTpra2U8AFDNNpqJdnin5z+PM1GbQ5BoaKCWas2HSjtR0HwMg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "app-builder-lib": "24.13.3", "archiver": "^5.3.1", @@ -3836,6 +3104,7 @@ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -3851,6 +3120,7 @@ "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "universalify": "^2.0.0" }, @@ -3864,6 +3134,7 @@ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 10.0.0" } @@ -4345,7 +3616,8 @@ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/fs-extra": { "version": "8.1.0", @@ -5064,7 +4336,8 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/isbinaryfile": { "version": "5.0.6", @@ -5126,7 +4399,6 @@ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "dev": true, "license": "MIT", - "peer": true, "bin": { "jiti": "bin/jiti.js" } @@ -5232,6 +4504,7 @@ "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "readable-stream": "^2.0.5" }, @@ -5245,6 +4518,7 @@ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5260,7 +4534,8 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lazystream/node_modules/string_decoder": { "version": "1.1.1", @@ -5268,6 +4543,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -5304,35 +4580,40 @@ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lowercase-keys": { "version": "2.0.0", @@ -6027,7 +5308,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -6176,7 +5456,8 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/progress": { "version": "2.0.3", @@ -6325,6 +5606,7 @@ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6340,6 +5622,7 @@ "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "minimatch": "^5.1.0" } @@ -6557,7 +5840,8 @@ "url": "https://feross.org/support" } ], - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/safer-buffer": { "version": "2.1.2", @@ -6623,7 +5907,6 @@ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz", "integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=10" } @@ -6751,7 +6034,6 @@ "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.10.tgz", "integrity": "sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.1.0", "seroval": "~1.3.0", @@ -6871,6 +6153,7 @@ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -7128,6 +6411,7 @@ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -7511,7 +6795,6 @@ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -7591,91 +6874,6 @@ } } }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/vite/node_modules/@esbuild/darwin-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", @@ -7693,295 +6891,6 @@ "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/vite/node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", @@ -8174,6 +7083,7 @@ "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "archiver-utils": "^3.0.4", "compress-commons": "^4.1.2", @@ -8189,6 +7099,7 @@ "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "glob": "^7.2.3", "graceful-fs": "^4.2.0", @@ -8214,6 +7125,57 @@ "type": "github", "url": "https://github.com/sponsors/wooorm" } + }, + "packages/electron-app": { + "name": "@codenomad/electron-app", + "version": "0.1.2", + "dependencies": { + "@codenomad/ui": "file:../ui", + "ignore": "7.0.5" + }, + "devDependencies": { + "7zip-bin": "^5.2.0", + "app-builder-bin": "^4.2.0", + "electron": "39.0.0", + "electron-builder": "^24.0.0", + "electron-vite": "4.0.1", + "png2icons": "^2.0.1", + "pngjs": "^7.0.0", + "typescript": "^5.3.0", + "vite": "^5.0.0", + "vite-plugin-solid": "^2.10.0" + } + }, + "packages/electron-app/node_modules/app-builder-bin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.2.0.tgz", + "integrity": "sha512-PGXlkukQnroTgAaDZnnppdLzsRJmab6Rh/rJ5fKyYaYhd+FfaORH59/ArkB5dr2cAeYQU5lCeHFEwURaoBO8BA==", + "dev": true, + "license": "MIT" + }, + "packages/ui": { + "name": "@codenomad/ui", + "version": "0.1.2", + "dependencies": { + "@git-diff-view/solid": "^0.0.8", + "@kobalte/core": "0.13.11", + "@opencode-ai/sdk": "1.0.68", + "@solidjs/router": "^0.13.0", + "github-markdown-css": "^5.8.1", + "lucide-solid": "^0.300.0", + "marked": "^12.0.0", + "shiki": "^3.13.0", + "solid-js": "^1.8.0", + "solid-toast": "^0.5.0" + }, + "devDependencies": { + "autoprefixer": "10.4.21", + "postcss": "8.5.6", + "tailwindcss": "3", + "typescript": "^5.3.0", + "vite": "^5.0.0", + "vite-plugin-solid": "^2.10.0" + } } } } diff --git a/package.json b/package.json index 0f8808ef..21f1867d 100644 --- a/package.json +++ b/package.json @@ -1,169 +1,24 @@ { - "name": "@shantur/codenomad", + "name": "codenomad-workspace", "version": "0.1.2", - "description": "CodeNomad - AI coding assistant", - "author": { - "name": "Shantur Rathore", - "email": "codenomad@shantur.com" + "private": true, + "description": "CodeNomad monorepo workspace", + "workspaces": { + "packages": [ + "packages/*" + ] }, - "type": "module", - "main": "dist/main/main.js", "scripts": { - "dev": "electron-vite dev", - "dev:electron": "NODE_ENV=development electron .", - "build": "electron-vite build", - "typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.node.json", - "preview": "electron-vite preview", - "build:binaries": "node scripts/build.js", - "build:mac": "node scripts/build.js mac", - "build:mac-x64": "node scripts/build.js mac-x64", - "build:mac-arm64": "node scripts/build.js mac-arm64", - "build:win": "node scripts/build.js win", - "build:win-arm64": "node scripts/build.js win-arm64", - "build:linux": "node scripts/build.js linux", - "build:linux-arm64": "node scripts/build.js linux-arm64", - "build:linux-rpm": "node scripts/build.js linux-rpm", - "build:all": "node scripts/build.js all", - "package:mac": "electron-builder --mac", - "package:win": "electron-builder --win", - "package:linux": "electron-builder --linux" + "dev": "npm run dev --workspace @codenomad/electron-app", + "dev:electron": "npm run dev --workspace @codenomad/electron-app", + "dev:ui": "npm run dev --workspace @codenomad/ui", + "build": "npm run build --workspace @codenomad/electron-app", + "build:ui": "npm run build --workspace @codenomad/ui", + "build:mac-x64": "npm run build:mac-x64 --workspace @codenomad/electron-app", + "build:binaries": "npm run build:binaries --workspace @codenomad/electron-app", + "typecheck": "npm run typecheck --workspace @codenomad/ui && npm run typecheck --workspace @codenomad/electron-app" }, "dependencies": { - "@git-diff-view/solid": "^0.0.8", - "@kobalte/core": "0.13.11", - "@opencode-ai/sdk": "1.0.68", - "@solidjs/router": "^0.13.0", - "github-markdown-css": "^5.8.1", - "ignore": "7.0.5", - "lucide-solid": "^0.300.0", - "marked": "^12.0.0", - "shiki": "^3.13.0", - "solid-js": "^1.8.0", - "solid-toast": "^0.5.0" - }, - "devDependencies": { - "@tsconfig/bun": "^1.0.9", - "autoprefixer": "10.4.21", - "electron": "39.0.0", - "png2icons": "^2.0.1", - "pngjs": "^7.0.0", - "electron-builder": "^24.0.0", - "electron-vite": "4.0.1", - "postcss": "8.5.6", - "tailwindcss": "3", - "typescript": "^5.3.0", - "vite": "^5.0.0", - "vite-plugin-solid": "^2.10.0" - }, - "build": { - "appId": "ai.opencode.client", - "productName": "CodeNomad", - "directories": { - "output": "release", - "buildResources": "electron/resources" - }, - "files": [ - "dist/**/*", - "package.json" - ], - "mac": { - "category": "public.app-category.developer-tools", - "target": [ - { - "target": "dmg", - "arch": [ - "x64", - "arm64", - "universal" - ] - }, - { - "target": "zip", - "arch": [ - "x64", - "arm64", - "universal" - ] - } - ], - "artifactName": "${productName}-${version}-${os}-${arch}.${ext}", - "icon": "electron/resources/icon.icns" - }, - "dmg": { - "contents": [ - { - "x": 130, - "y": 220 - }, - { - "x": 410, - "y": 220, - "type": "link", - "path": "/Applications" - } - ] - }, - "win": { - "target": [ - { - "target": "nsis", - "arch": [ - "x64", - "arm64" - ] - }, - { - "target": "zip", - "arch": [ - "x64", - "arm64" - ] - } - ], - "artifactName": "${productName}-${version}-${os}-${arch}.${ext}", - "icon": "electron/resources/icon.ico" - }, - "nsis": { - "oneClick": false, - "allowToChangeInstallationDirectory": true, - "createDesktopShortcut": true, - "createStartMenuShortcut": true - }, - "linux": { - "target": [ - { - "target": "AppImage", - "arch": [ - "x64", - "arm64" - ] - }, - { - "target": "deb", - "arch": [ - "x64", - "arm64" - ] - }, - { - "target": "rpm", - "arch": [ - "x64", - "arm64" - ] - }, - { - "target": "tar.gz", - "arch": [ - "x64", - "arm64" - ] - } - ], - "artifactName": "${productName}-${version}-${os}-${arch}.${ext}", - "category": "Development", - "icon": "electron/resources/icon.png" - } - }, - "private": true + "7zip-bin": "^5.2.0" + } } diff --git a/packages/electron-app/.gitignore b/packages/electron-app/.gitignore new file mode 100644 index 00000000..2dfa475b --- /dev/null +++ b/packages/electron-app/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +dist/ +release/ +.vite/ diff --git a/electron.vite.config.ts b/packages/electron-app/electron.vite.config.ts similarity index 70% rename from electron.vite.config.ts rename to packages/electron-app/electron.vite.config.ts index ded6a215..c3cdcc7c 100644 --- a/electron.vite.config.ts +++ b/packages/electron-app/electron.vite.config.ts @@ -2,6 +2,11 @@ import { defineConfig, externalizeDepsPlugin } from "electron-vite" import solid from "vite-plugin-solid" import { resolve } from "path" +const uiRoot = resolve(__dirname, "../ui") +const uiSrc = resolve(uiRoot, "src") +const uiRendererRoot = resolve(uiRoot, "src/renderer") +const uiRendererEntry = resolve(uiRendererRoot, "index.html") + export default defineConfig({ main: { plugins: [externalizeDepsPlugin()], @@ -33,21 +38,24 @@ export default defineConfig({ }, }, renderer: { - root: "./src/renderer", + root: uiRendererRoot, plugins: [solid()], css: { - postcss: "./postcss.config.js", + postcss: resolve(uiRoot, "postcss.config.js"), }, resolve: { alias: { - "@": resolve(__dirname, "./src"), + "@": uiSrc, }, }, server: { port: 3000, }, build: { - outDir: "dist/renderer", + outDir: resolve(__dirname, "dist/renderer"), + rollupOptions: { + input: uiRendererEntry, + }, }, }, }) diff --git a/electron/main/ipc.ts b/packages/electron-app/electron/main/ipc.ts similarity index 100% rename from electron/main/ipc.ts rename to packages/electron-app/electron/main/ipc.ts diff --git a/electron/main/main.ts b/packages/electron-app/electron/main/main.ts similarity index 100% rename from electron/main/main.ts rename to packages/electron-app/electron/main/main.ts diff --git a/electron/main/menu.ts b/packages/electron-app/electron/main/menu.ts similarity index 100% rename from electron/main/menu.ts rename to packages/electron-app/electron/main/menu.ts diff --git a/electron/main/process-manager.ts b/packages/electron-app/electron/main/process-manager.ts similarity index 100% rename from electron/main/process-manager.ts rename to packages/electron-app/electron/main/process-manager.ts diff --git a/electron/main/storage.ts b/packages/electron-app/electron/main/storage.ts similarity index 100% rename from electron/main/storage.ts rename to packages/electron-app/electron/main/storage.ts diff --git a/electron/main/user-shell.ts b/packages/electron-app/electron/main/user-shell.ts similarity index 100% rename from electron/main/user-shell.ts rename to packages/electron-app/electron/main/user-shell.ts diff --git a/electron/preload/index.ts b/packages/electron-app/electron/preload/index.ts similarity index 59% rename from electron/preload/index.ts rename to packages/electron-app/electron/preload/index.ts index 082b1a0a..f430cbd3 100644 --- a/electron/preload/index.ts +++ b/packages/electron-app/electron/preload/index.ts @@ -1,38 +1,5 @@ import { contextBridge, ipcRenderer } from "electron" - -export interface ElectronAPI { - selectFolder: () => Promise - createInstance: ( - id: string, - folder: string, - binaryPath?: string, - environmentVariables?: Record, - ) => Promise<{ id: string; port: number; pid: number; binaryPath: string }> - stopInstance: (pid: number) => Promise - onInstanceStarted: (callback: (data: { id: string; port: number; pid: number; binaryPath: string }) => void) => void - onInstanceError: (callback: (data: { id: string; error: string }) => void) => void - onInstanceStopped: (callback: (data: { id: string }) => void) => void - onInstanceLog: ( - callback: (data: { - id: string - entry: { timestamp: number; level: "info" | "error" | "warn" | "debug"; message: string } - }) => void, - ) => void - onNewInstance: (callback: () => void) => void - scanDirectory: (workspaceFolder: string) => Promise - // OpenCode binary operations - selectOpenCodeBinary: () => Promise - validateOpenCodeBinary: (path: string) => Promise<{ valid: boolean; version?: string; error?: string }> - // Storage operations - getConfigPath: () => Promise - getInstancesDir: () => Promise - readConfigFile: () => Promise - writeConfigFile: (content: string) => Promise - readInstanceFile: (instanceId: string) => Promise - writeInstanceFile: (instanceId: string, content: string) => Promise - deleteInstanceFile: (instanceId: string) => Promise - onConfigChanged: (callback: () => void) => () => void -} +import type { ElectronAPI } from "../../../ui/src/types/electron-api" const electronAPI: ElectronAPI = { selectFolder: () => ipcRenderer.invoke("dialog:selectFolder"), diff --git a/electron/resources/icon.icns b/packages/electron-app/electron/resources/icon.icns similarity index 100% rename from electron/resources/icon.icns rename to packages/electron-app/electron/resources/icon.icns diff --git a/electron/resources/icon.ico b/packages/electron-app/electron/resources/icon.ico similarity index 100% rename from electron/resources/icon.ico rename to packages/electron-app/electron/resources/icon.ico diff --git a/electron/resources/icon.png b/packages/electron-app/electron/resources/icon.png similarity index 100% rename from electron/resources/icon.png rename to packages/electron-app/electron/resources/icon.png diff --git a/electron/tsconfig.json b/packages/electron-app/electron/tsconfig.json similarity index 70% rename from electron/tsconfig.json rename to packages/electron-app/electron/tsconfig.json index 113792c6..aa4873c4 100644 --- a/electron/tsconfig.json +++ b/packages/electron-app/electron/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig.node.json", + "extends": "../tsconfig.json", "compilerOptions": { "noEmit": true }, diff --git a/packages/electron-app/package.json b/packages/electron-app/package.json new file mode 100644 index 00000000..23263821 --- /dev/null +++ b/packages/electron-app/package.json @@ -0,0 +1,124 @@ +{ + "name": "@codenomad/electron-app", + "version": "0.1.2", + "description": "CodeNomad - AI coding assistant", + "author": { + "name": "Shantur Rathore", + "email": "codenomad@shantur.com" + }, + "type": "module", + "main": "dist/main/main.js", + "scripts": { + "dev": "electron-vite dev", + "dev:electron": "NODE_ENV=development electron .", + "build": "electron-vite build", + "typecheck": "tsc --noEmit -p tsconfig.json", + "preview": "electron-vite preview", + "build:binaries": "node scripts/build.js", + "build:mac": "node scripts/build.js mac", + "build:mac-x64": "node scripts/build.js mac-x64", + "build:mac-arm64": "node scripts/build.js mac-arm64", + "build:win": "node scripts/build.js win", + "build:win-arm64": "node scripts/build.js win-arm64", + "build:linux": "node scripts/build.js linux", + "build:linux-arm64": "node scripts/build.js linux-arm64", + "build:linux-rpm": "node scripts/build.js linux-rpm", + "build:all": "node scripts/build.js all", + "package:mac": "electron-builder --mac", + "package:win": "electron-builder --win", + "package:linux": "electron-builder --linux" + }, + "dependencies": { + "@codenomad/ui": "file:../ui", + "ignore": "7.0.5" + }, + "devDependencies": { + "7zip-bin": "^5.2.0", + "app-builder-bin": "^4.2.0", + "electron": "39.0.0", + "electron-builder": "^24.0.0", + "electron-vite": "4.0.1", + "png2icons": "^2.0.1", + "pngjs": "^7.0.0", + "typescript": "^5.3.0", + "vite": "^5.0.0", + "vite-plugin-solid": "^2.10.0" + }, + "build": { + "appId": "ai.opencode.client", + "productName": "CodeNomad", + "directories": { + "output": "release", + "buildResources": "electron/resources" + }, + "files": [ + "dist/**/*", + "package.json" + ], + "mac": { + "category": "public.app-category.developer-tools", + "target": [ + { + "target": "dmg", + "arch": ["x64", "arm64", "universal"] + }, + { + "target": "zip", + "arch": ["x64", "arm64", "universal"] + } + ], + "artifactName": "${productName}-${version}-${os}-${arch}.${ext}", + "icon": "electron/resources/icon.icns" + }, + "dmg": { + "contents": [ + { "x": 130, "y": 220 }, + { "x": 410, "y": 220, "type": "link", "path": "/Applications" } + ] + }, + "win": { + "target": [ + { + "target": "nsis", + "arch": ["x64", "arm64"] + }, + { + "target": "zip", + "arch": ["x64", "arm64"] + } + ], + "artifactName": "${productName}-${version}-${os}-${arch}.${ext}", + "icon": "electron/resources/icon.ico" + }, + "nsis": { + "oneClick": false, + "allowToChangeInstallationDirectory": true, + "createDesktopShortcut": true, + "createStartMenuShortcut": true + }, + "linux": { + "target": [ + { + "target": "AppImage", + "arch": ["x64", "arm64"] + }, + { + "target": "deb", + "arch": ["x64", "arm64"] + }, + { + "target": "rpm", + "arch": ["x64", "arm64"] + }, + { + "target": "tar.gz", + "arch": ["x64", "arm64"] + } + ], + "artifactName": "${productName}-${version}-${os}-${arch}.${ext}", + "category": "Development", + "icon": "electron/resources/icon.png" + } + }, + "private": true +} diff --git a/scripts/build.js b/packages/electron-app/scripts/build.js similarity index 100% rename from scripts/build.js rename to packages/electron-app/scripts/build.js diff --git a/scripts/dev.sh b/packages/electron-app/scripts/dev.sh similarity index 100% rename from scripts/dev.sh rename to packages/electron-app/scripts/dev.sh diff --git a/scripts/generate-icons.js b/packages/electron-app/scripts/generate-icons.js similarity index 100% rename from scripts/generate-icons.js rename to packages/electron-app/scripts/generate-icons.js diff --git a/tsconfig.node.json b/packages/electron-app/tsconfig.json similarity index 100% rename from tsconfig.node.json rename to packages/electron-app/tsconfig.json diff --git a/packages/ui/.gitignore b/packages/ui/.gitignore new file mode 100644 index 00000000..3ff38cc0 --- /dev/null +++ b/packages/ui/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +dist/ +.vite/ diff --git a/packages/ui/package.json b/packages/ui/package.json new file mode 100644 index 00000000..c0b95f6d --- /dev/null +++ b/packages/ui/package.json @@ -0,0 +1,32 @@ +{ + "name": "@codenomad/ui", + "version": "0.1.2", + "private": true, + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "typecheck": "tsc --noEmit -p tsconfig.json" + }, + "dependencies": { + "@git-diff-view/solid": "^0.0.8", + "@kobalte/core": "0.13.11", + "@opencode-ai/sdk": "1.0.68", + "@solidjs/router": "^0.13.0", + "github-markdown-css": "^5.8.1", + "lucide-solid": "^0.300.0", + "marked": "^12.0.0", + "shiki": "^3.13.0", + "solid-js": "^1.8.0", + "solid-toast": "^0.5.0" + }, + "devDependencies": { + "autoprefixer": "10.4.21", + "postcss": "8.5.6", + "tailwindcss": "3", + "typescript": "^5.3.0", + "vite": "^5.0.0", + "vite-plugin-solid": "^2.10.0" + } +} diff --git a/packages/ui/postcss.config.js b/packages/ui/postcss.config.js new file mode 100644 index 00000000..d90d3d0f --- /dev/null +++ b/packages/ui/postcss.config.js @@ -0,0 +1,11 @@ +import { fileURLToPath } from "url" +import { dirname, resolve } from "path" + +const __dirname = dirname(fileURLToPath(import.meta.url)) + +export default { + plugins: { + tailwindcss: { config: resolve(__dirname, "tailwind.config.js") }, + autoprefixer: {}, + }, +} diff --git a/src/App.tsx b/packages/ui/src/App.tsx similarity index 100% rename from src/App.tsx rename to packages/ui/src/App.tsx diff --git a/src/components/advanced-settings-modal.tsx b/packages/ui/src/components/advanced-settings-modal.tsx similarity index 100% rename from src/components/advanced-settings-modal.tsx rename to packages/ui/src/components/advanced-settings-modal.tsx diff --git a/src/components/agent-selector.tsx b/packages/ui/src/components/agent-selector.tsx similarity index 100% rename from src/components/agent-selector.tsx rename to packages/ui/src/components/agent-selector.tsx diff --git a/src/components/attachment-chip.tsx b/packages/ui/src/components/attachment-chip.tsx similarity index 100% rename from src/components/attachment-chip.tsx rename to packages/ui/src/components/attachment-chip.tsx diff --git a/src/components/code-block-inline.tsx b/packages/ui/src/components/code-block-inline.tsx similarity index 100% rename from src/components/code-block-inline.tsx rename to packages/ui/src/components/code-block-inline.tsx diff --git a/src/components/command-palette.tsx b/packages/ui/src/components/command-palette.tsx similarity index 100% rename from src/components/command-palette.tsx rename to packages/ui/src/components/command-palette.tsx diff --git a/src/components/diff-viewer.tsx b/packages/ui/src/components/diff-viewer.tsx similarity index 100% rename from src/components/diff-viewer.tsx rename to packages/ui/src/components/diff-viewer.tsx diff --git a/src/components/empty-state.tsx b/packages/ui/src/components/empty-state.tsx similarity index 94% rename from src/components/empty-state.tsx rename to packages/ui/src/components/empty-state.tsx index e0e690ad..c875eb97 100644 --- a/src/components/empty-state.tsx +++ b/packages/ui/src/components/empty-state.tsx @@ -1,7 +1,7 @@ import { Component } from "solid-js" import { Loader2 } from "lucide-solid" -const codeNomadIcon = new URL("../../images/CodeNomad-Icon.png", import.meta.url).href +const codeNomadIcon = new URL("../images/CodeNomad-Icon.png", import.meta.url).href interface EmptyStateProps { onSelectFolder: () => void diff --git a/src/components/environment-variables-editor.tsx b/packages/ui/src/components/environment-variables-editor.tsx similarity index 100% rename from src/components/environment-variables-editor.tsx rename to packages/ui/src/components/environment-variables-editor.tsx diff --git a/src/components/file-picker.tsx b/packages/ui/src/components/file-picker.tsx similarity index 100% rename from src/components/file-picker.tsx rename to packages/ui/src/components/file-picker.tsx diff --git a/src/components/folder-selection-view.tsx b/packages/ui/src/components/folder-selection-view.tsx similarity index 99% rename from src/components/folder-selection-view.tsx rename to packages/ui/src/components/folder-selection-view.tsx index 18c42c75..685f4b1e 100644 --- a/src/components/folder-selection-view.tsx +++ b/packages/ui/src/components/folder-selection-view.tsx @@ -4,7 +4,7 @@ import { useConfig } from "../stores/preferences" import AdvancedSettingsModal from "./advanced-settings-modal" import Kbd from "./kbd" -const codeNomadLogo = new URL("../../images/CodeNomad-Icon.png", import.meta.url).href +const codeNomadLogo = new URL("../images/CodeNomad-Icon.png", import.meta.url).href interface FolderSelectionViewProps { onSelectFolder: (folder?: string, binaryPath?: string) => void diff --git a/src/components/hint-row.tsx b/packages/ui/src/components/hint-row.tsx similarity index 100% rename from src/components/hint-row.tsx rename to packages/ui/src/components/hint-row.tsx diff --git a/src/components/info-view.tsx b/packages/ui/src/components/info-view.tsx similarity index 100% rename from src/components/info-view.tsx rename to packages/ui/src/components/info-view.tsx diff --git a/src/components/instance-disconnected-modal.tsx b/packages/ui/src/components/instance-disconnected-modal.tsx similarity index 100% rename from src/components/instance-disconnected-modal.tsx rename to packages/ui/src/components/instance-disconnected-modal.tsx diff --git a/src/components/instance-info.tsx b/packages/ui/src/components/instance-info.tsx similarity index 100% rename from src/components/instance-info.tsx rename to packages/ui/src/components/instance-info.tsx diff --git a/src/components/instance-tab.tsx b/packages/ui/src/components/instance-tab.tsx similarity index 100% rename from src/components/instance-tab.tsx rename to packages/ui/src/components/instance-tab.tsx diff --git a/src/components/instance-tabs.tsx b/packages/ui/src/components/instance-tabs.tsx similarity index 100% rename from src/components/instance-tabs.tsx rename to packages/ui/src/components/instance-tabs.tsx diff --git a/src/components/instance-welcome-view.tsx b/packages/ui/src/components/instance-welcome-view.tsx similarity index 100% rename from src/components/instance-welcome-view.tsx rename to packages/ui/src/components/instance-welcome-view.tsx diff --git a/src/components/instance/instance-shell.tsx b/packages/ui/src/components/instance/instance-shell.tsx similarity index 100% rename from src/components/instance/instance-shell.tsx rename to packages/ui/src/components/instance/instance-shell.tsx diff --git a/src/components/kbd.tsx b/packages/ui/src/components/kbd.tsx similarity index 100% rename from src/components/kbd.tsx rename to packages/ui/src/components/kbd.tsx diff --git a/src/components/keyboard-hint.tsx b/packages/ui/src/components/keyboard-hint.tsx similarity index 100% rename from src/components/keyboard-hint.tsx rename to packages/ui/src/components/keyboard-hint.tsx diff --git a/src/components/logs-view.tsx b/packages/ui/src/components/logs-view.tsx similarity index 100% rename from src/components/logs-view.tsx rename to packages/ui/src/components/logs-view.tsx diff --git a/src/components/markdown.tsx b/packages/ui/src/components/markdown.tsx similarity index 100% rename from src/components/markdown.tsx rename to packages/ui/src/components/markdown.tsx diff --git a/src/components/message-item.tsx b/packages/ui/src/components/message-item.tsx similarity index 100% rename from src/components/message-item.tsx rename to packages/ui/src/components/message-item.tsx diff --git a/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx similarity index 100% rename from src/components/message-part.tsx rename to packages/ui/src/components/message-part.tsx diff --git a/src/components/message-stream.tsx b/packages/ui/src/components/message-stream.tsx similarity index 99% rename from src/components/message-stream.tsx rename to packages/ui/src/components/message-stream.tsx index 07394c7c..6d038696 100644 --- a/src/components/message-stream.tsx +++ b/packages/ui/src/components/message-stream.tsx @@ -34,7 +34,7 @@ import { useConfig } from "../stores/preferences" import { getSessionInfo, computeDisplayParts, sessions, setActiveSession, setActiveParentSession } from "../stores/sessions" import { setActiveInstanceId } from "../stores/instances" -const codeNomadLogo = new URL("../../images/CodeNomad-Icon.png", import.meta.url).href +const codeNomadLogo = new URL("../images/CodeNomad-Icon.png", import.meta.url).href const SCROLL_OFFSET = 64 const SCROLL_DIRECTION_THRESHOLD = 10 diff --git a/src/components/model-selector.tsx b/packages/ui/src/components/model-selector.tsx similarity index 100% rename from src/components/model-selector.tsx rename to packages/ui/src/components/model-selector.tsx diff --git a/src/components/opencode-binary-selector.tsx b/packages/ui/src/components/opencode-binary-selector.tsx similarity index 100% rename from src/components/opencode-binary-selector.tsx rename to packages/ui/src/components/opencode-binary-selector.tsx diff --git a/src/components/prompt-input.tsx b/packages/ui/src/components/prompt-input.tsx similarity index 100% rename from src/components/prompt-input.tsx rename to packages/ui/src/components/prompt-input.tsx diff --git a/src/components/session-list.tsx b/packages/ui/src/components/session-list.tsx similarity index 100% rename from src/components/session-list.tsx rename to packages/ui/src/components/session-list.tsx diff --git a/src/components/session-picker.tsx b/packages/ui/src/components/session-picker.tsx similarity index 100% rename from src/components/session-picker.tsx rename to packages/ui/src/components/session-picker.tsx diff --git a/src/components/session/context-usage-panel.tsx b/packages/ui/src/components/session/context-usage-panel.tsx similarity index 100% rename from src/components/session/context-usage-panel.tsx rename to packages/ui/src/components/session/context-usage-panel.tsx diff --git a/src/components/session/session-view.tsx b/packages/ui/src/components/session/session-view.tsx similarity index 100% rename from src/components/session/session-view.tsx rename to packages/ui/src/components/session/session-view.tsx diff --git a/src/components/tool-call.tsx b/packages/ui/src/components/tool-call.tsx similarity index 100% rename from src/components/tool-call.tsx rename to packages/ui/src/components/tool-call.tsx diff --git a/src/components/unified-picker.tsx b/packages/ui/src/components/unified-picker.tsx similarity index 100% rename from src/components/unified-picker.tsx rename to packages/ui/src/components/unified-picker.tsx diff --git a/packages/ui/src/images/CodeNomad-Icon.png b/packages/ui/src/images/CodeNomad-Icon.png new file mode 100644 index 00000000..754b997c Binary files /dev/null and b/packages/ui/src/images/CodeNomad-Icon.png differ diff --git a/src/index.css b/packages/ui/src/index.css similarity index 100% rename from src/index.css rename to packages/ui/src/index.css diff --git a/src/lib/command-utils.ts b/packages/ui/src/lib/command-utils.ts similarity index 100% rename from src/lib/command-utils.ts rename to packages/ui/src/lib/command-utils.ts diff --git a/src/lib/commands.ts b/packages/ui/src/lib/commands.ts similarity index 100% rename from src/lib/commands.ts rename to packages/ui/src/lib/commands.ts diff --git a/src/lib/diff-utils.ts b/packages/ui/src/lib/diff-utils.ts similarity index 100% rename from src/lib/diff-utils.ts rename to packages/ui/src/lib/diff-utils.ts diff --git a/src/lib/formatters.ts b/packages/ui/src/lib/formatters.ts similarity index 100% rename from src/lib/formatters.ts rename to packages/ui/src/lib/formatters.ts diff --git a/src/lib/hooks/use-app-lifecycle.ts b/packages/ui/src/lib/hooks/use-app-lifecycle.ts similarity index 100% rename from src/lib/hooks/use-app-lifecycle.ts rename to packages/ui/src/lib/hooks/use-app-lifecycle.ts diff --git a/src/lib/hooks/use-commands.ts b/packages/ui/src/lib/hooks/use-commands.ts similarity index 100% rename from src/lib/hooks/use-commands.ts rename to packages/ui/src/lib/hooks/use-commands.ts diff --git a/src/lib/keyboard-registry.ts b/packages/ui/src/lib/keyboard-registry.ts similarity index 100% rename from src/lib/keyboard-registry.ts rename to packages/ui/src/lib/keyboard-registry.ts diff --git a/src/lib/keyboard-utils.ts b/packages/ui/src/lib/keyboard-utils.ts similarity index 100% rename from src/lib/keyboard-utils.ts rename to packages/ui/src/lib/keyboard-utils.ts diff --git a/src/lib/keyboard.ts b/packages/ui/src/lib/keyboard.ts similarity index 100% rename from src/lib/keyboard.ts rename to packages/ui/src/lib/keyboard.ts diff --git a/src/lib/markdown.ts b/packages/ui/src/lib/markdown.ts similarity index 100% rename from src/lib/markdown.ts rename to packages/ui/src/lib/markdown.ts diff --git a/src/lib/notifications.tsx b/packages/ui/src/lib/notifications.tsx similarity index 100% rename from src/lib/notifications.tsx rename to packages/ui/src/lib/notifications.tsx diff --git a/src/lib/prompt-placeholders.ts b/packages/ui/src/lib/prompt-placeholders.ts similarity index 100% rename from src/lib/prompt-placeholders.ts rename to packages/ui/src/lib/prompt-placeholders.ts diff --git a/src/lib/sdk-manager.ts b/packages/ui/src/lib/sdk-manager.ts similarity index 100% rename from src/lib/sdk-manager.ts rename to packages/ui/src/lib/sdk-manager.ts diff --git a/src/lib/shortcuts/agent.ts b/packages/ui/src/lib/shortcuts/agent.ts similarity index 100% rename from src/lib/shortcuts/agent.ts rename to packages/ui/src/lib/shortcuts/agent.ts diff --git a/src/lib/shortcuts/escape.ts b/packages/ui/src/lib/shortcuts/escape.ts similarity index 100% rename from src/lib/shortcuts/escape.ts rename to packages/ui/src/lib/shortcuts/escape.ts diff --git a/src/lib/shortcuts/input.ts b/packages/ui/src/lib/shortcuts/input.ts similarity index 100% rename from src/lib/shortcuts/input.ts rename to packages/ui/src/lib/shortcuts/input.ts diff --git a/src/lib/shortcuts/navigation.ts b/packages/ui/src/lib/shortcuts/navigation.ts similarity index 100% rename from src/lib/shortcuts/navigation.ts rename to packages/ui/src/lib/shortcuts/navigation.ts diff --git a/src/lib/sse-manager.ts b/packages/ui/src/lib/sse-manager.ts similarity index 100% rename from src/lib/sse-manager.ts rename to packages/ui/src/lib/sse-manager.ts diff --git a/src/lib/storage.ts b/packages/ui/src/lib/storage.ts similarity index 100% rename from src/lib/storage.ts rename to packages/ui/src/lib/storage.ts diff --git a/src/lib/theme.tsx b/packages/ui/src/lib/theme.tsx similarity index 100% rename from src/lib/theme.tsx rename to packages/ui/src/lib/theme.tsx diff --git a/src/lib/tool-render-cache.ts b/packages/ui/src/lib/tool-render-cache.ts similarity index 100% rename from src/lib/tool-render-cache.ts rename to packages/ui/src/lib/tool-render-cache.ts diff --git a/src/main.tsx b/packages/ui/src/main.tsx similarity index 100% rename from src/main.tsx rename to packages/ui/src/main.tsx diff --git a/src/renderer/index.html b/packages/ui/src/renderer/index.html similarity index 100% rename from src/renderer/index.html rename to packages/ui/src/renderer/index.html diff --git a/src/renderer/main.tsx b/packages/ui/src/renderer/main.tsx similarity index 100% rename from src/renderer/main.tsx rename to packages/ui/src/renderer/main.tsx diff --git a/src/stores/attachments.ts b/packages/ui/src/stores/attachments.ts similarity index 100% rename from src/stores/attachments.ts rename to packages/ui/src/stores/attachments.ts diff --git a/src/stores/command-palette.ts b/packages/ui/src/stores/command-palette.ts similarity index 100% rename from src/stores/command-palette.ts rename to packages/ui/src/stores/command-palette.ts diff --git a/src/stores/commands.ts b/packages/ui/src/stores/commands.ts similarity index 100% rename from src/stores/commands.ts rename to packages/ui/src/stores/commands.ts diff --git a/src/stores/instances.ts b/packages/ui/src/stores/instances.ts similarity index 100% rename from src/stores/instances.ts rename to packages/ui/src/stores/instances.ts diff --git a/src/stores/message-history.ts b/packages/ui/src/stores/message-history.ts similarity index 100% rename from src/stores/message-history.ts rename to packages/ui/src/stores/message-history.ts diff --git a/src/stores/preferences.tsx b/packages/ui/src/stores/preferences.tsx similarity index 100% rename from src/stores/preferences.tsx rename to packages/ui/src/stores/preferences.tsx diff --git a/src/stores/session-actions.ts b/packages/ui/src/stores/session-actions.ts similarity index 100% rename from src/stores/session-actions.ts rename to packages/ui/src/stores/session-actions.ts diff --git a/src/stores/session-api.ts b/packages/ui/src/stores/session-api.ts similarity index 100% rename from src/stores/session-api.ts rename to packages/ui/src/stores/session-api.ts diff --git a/src/stores/session-compaction.ts b/packages/ui/src/stores/session-compaction.ts similarity index 100% rename from src/stores/session-compaction.ts rename to packages/ui/src/stores/session-compaction.ts diff --git a/src/stores/session-events.ts b/packages/ui/src/stores/session-events.ts similarity index 100% rename from src/stores/session-events.ts rename to packages/ui/src/stores/session-events.ts diff --git a/src/stores/session-messages.ts b/packages/ui/src/stores/session-messages.ts similarity index 100% rename from src/stores/session-messages.ts rename to packages/ui/src/stores/session-messages.ts diff --git a/src/stores/session-models.ts b/packages/ui/src/stores/session-models.ts similarity index 100% rename from src/stores/session-models.ts rename to packages/ui/src/stores/session-models.ts diff --git a/src/stores/session-state.ts b/packages/ui/src/stores/session-state.ts similarity index 100% rename from src/stores/session-state.ts rename to packages/ui/src/stores/session-state.ts diff --git a/src/stores/session-status.ts b/packages/ui/src/stores/session-status.ts similarity index 100% rename from src/stores/session-status.ts rename to packages/ui/src/stores/session-status.ts diff --git a/src/stores/sessions.ts b/packages/ui/src/stores/sessions.ts similarity index 100% rename from src/stores/sessions.ts rename to packages/ui/src/stores/sessions.ts diff --git a/src/stores/tool-call-state.ts b/packages/ui/src/stores/tool-call-state.ts similarity index 100% rename from src/stores/tool-call-state.ts rename to packages/ui/src/stores/tool-call-state.ts diff --git a/src/stores/ui.ts b/packages/ui/src/stores/ui.ts similarity index 100% rename from src/stores/ui.ts rename to packages/ui/src/stores/ui.ts diff --git a/src/styles/components/badges.css b/packages/ui/src/styles/components/badges.css similarity index 100% rename from src/styles/components/badges.css rename to packages/ui/src/styles/components/badges.css diff --git a/src/styles/components/buttons.css b/packages/ui/src/styles/components/buttons.css similarity index 100% rename from src/styles/components/buttons.css rename to packages/ui/src/styles/components/buttons.css diff --git a/src/styles/components/dropdown.css b/packages/ui/src/styles/components/dropdown.css similarity index 100% rename from src/styles/components/dropdown.css rename to packages/ui/src/styles/components/dropdown.css diff --git a/src/styles/components/env-vars.css b/packages/ui/src/styles/components/env-vars.css similarity index 100% rename from src/styles/components/env-vars.css rename to packages/ui/src/styles/components/env-vars.css diff --git a/src/styles/components/folder-loading.css b/packages/ui/src/styles/components/folder-loading.css similarity index 100% rename from src/styles/components/folder-loading.css rename to packages/ui/src/styles/components/folder-loading.css diff --git a/src/styles/components/selector.css b/packages/ui/src/styles/components/selector.css similarity index 100% rename from src/styles/components/selector.css rename to packages/ui/src/styles/components/selector.css diff --git a/src/styles/controls.css b/packages/ui/src/styles/controls.css similarity index 100% rename from src/styles/controls.css rename to packages/ui/src/styles/controls.css diff --git a/src/styles/markdown.css b/packages/ui/src/styles/markdown.css similarity index 100% rename from src/styles/markdown.css rename to packages/ui/src/styles/markdown.css diff --git a/src/styles/messaging.css b/packages/ui/src/styles/messaging.css similarity index 100% rename from src/styles/messaging.css rename to packages/ui/src/styles/messaging.css diff --git a/src/styles/messaging/log-view.css b/packages/ui/src/styles/messaging/log-view.css similarity index 100% rename from src/styles/messaging/log-view.css rename to packages/ui/src/styles/messaging/log-view.css diff --git a/src/styles/messaging/message-base.css b/packages/ui/src/styles/messaging/message-base.css similarity index 100% rename from src/styles/messaging/message-base.css rename to packages/ui/src/styles/messaging/message-base.css diff --git a/src/styles/messaging/message-stream.css b/packages/ui/src/styles/messaging/message-stream.css similarity index 100% rename from src/styles/messaging/message-stream.css rename to packages/ui/src/styles/messaging/message-stream.css diff --git a/src/styles/messaging/prompt-input.css b/packages/ui/src/styles/messaging/prompt-input.css similarity index 100% rename from src/styles/messaging/prompt-input.css rename to packages/ui/src/styles/messaging/prompt-input.css diff --git a/src/styles/messaging/tool-call.css b/packages/ui/src/styles/messaging/tool-call.css similarity index 100% rename from src/styles/messaging/tool-call.css rename to packages/ui/src/styles/messaging/tool-call.css diff --git a/src/styles/panels.css b/packages/ui/src/styles/panels.css similarity index 100% rename from src/styles/panels.css rename to packages/ui/src/styles/panels.css diff --git a/src/styles/panels/empty-loading.css b/packages/ui/src/styles/panels/empty-loading.css similarity index 100% rename from src/styles/panels/empty-loading.css rename to packages/ui/src/styles/panels/empty-loading.css diff --git a/src/styles/panels/modal.css b/packages/ui/src/styles/panels/modal.css similarity index 100% rename from src/styles/panels/modal.css rename to packages/ui/src/styles/panels/modal.css diff --git a/src/styles/panels/panel-shell.css b/packages/ui/src/styles/panels/panel-shell.css similarity index 100% rename from src/styles/panels/panel-shell.css rename to packages/ui/src/styles/panels/panel-shell.css diff --git a/src/styles/panels/session-layout.css b/packages/ui/src/styles/panels/session-layout.css similarity index 100% rename from src/styles/panels/session-layout.css rename to packages/ui/src/styles/panels/session-layout.css diff --git a/src/styles/panels/tabs.css b/packages/ui/src/styles/panels/tabs.css similarity index 100% rename from src/styles/panels/tabs.css rename to packages/ui/src/styles/panels/tabs.css diff --git a/src/styles/tokens.css b/packages/ui/src/styles/tokens.css similarity index 100% rename from src/styles/tokens.css rename to packages/ui/src/styles/tokens.css diff --git a/src/styles/utilities.css b/packages/ui/src/styles/utilities.css similarity index 100% rename from src/styles/utilities.css rename to packages/ui/src/styles/utilities.css diff --git a/src/types/attachment.ts b/packages/ui/src/types/attachment.ts similarity index 100% rename from src/types/attachment.ts rename to packages/ui/src/types/attachment.ts diff --git a/packages/ui/src/types/electron-api.ts b/packages/ui/src/types/electron-api.ts new file mode 100644 index 00000000..67bd578f --- /dev/null +++ b/packages/ui/src/types/electron-api.ts @@ -0,0 +1,31 @@ +export interface ElectronAPI { + selectFolder: () => Promise + createInstance: ( + id: string, + folder: string, + binaryPath?: string, + environmentVariables?: Record, + ) => Promise<{ id: string; port: number; pid: number; binaryPath: string }> + stopInstance: (pid: number) => Promise + onInstanceStarted: (callback: (data: { id: string; port: number; pid: number; binaryPath: string }) => void) => void + onInstanceError: (callback: (data: { id: string; error: string }) => void) => void + onInstanceStopped: (callback: (data: { id: string }) => void) => void + onInstanceLog: ( + callback: (data: { + id: string + entry: { timestamp: number; level: "info" | "error" | "warn" | "debug"; message: string } + }) => void, + ) => void + onNewInstance: (callback: () => void) => void + scanDirectory: (workspaceFolder: string) => Promise + selectOpenCodeBinary: () => Promise + validateOpenCodeBinary: (path: string) => Promise<{ valid: boolean; version?: string; error?: string }> + getConfigPath: () => Promise + getInstancesDir: () => Promise + readConfigFile: () => Promise + writeConfigFile: (content: string) => Promise + readInstanceFile: (instanceId: string) => Promise + writeInstanceFile: (instanceId: string, content: string) => Promise + deleteInstanceFile: (instanceId: string) => Promise + onConfigChanged: (callback: () => void) => () => void +} diff --git a/src/types/electron.d.ts b/packages/ui/src/types/electron.d.ts similarity index 57% rename from src/types/electron.d.ts rename to packages/ui/src/types/electron.d.ts index 1b6a6a11..d2f97f0e 100644 --- a/src/types/electron.d.ts +++ b/packages/ui/src/types/electron.d.ts @@ -1,4 +1,4 @@ -import type { ElectronAPI } from "../../electron/preload/index" +import type { ElectronAPI } from "./electron-api" declare global { interface Window { diff --git a/src/types/instance.ts b/packages/ui/src/types/instance.ts similarity index 100% rename from src/types/instance.ts rename to packages/ui/src/types/instance.ts diff --git a/src/types/message.ts b/packages/ui/src/types/message.ts similarity index 100% rename from src/types/message.ts rename to packages/ui/src/types/message.ts diff --git a/src/types/session.ts b/packages/ui/src/types/session.ts similarity index 100% rename from src/types/session.ts rename to packages/ui/src/types/session.ts diff --git a/tailwind.config.js b/packages/ui/tailwind.config.js similarity index 85% rename from tailwind.config.js rename to packages/ui/tailwind.config.js index 6f453bc0..d2c0b97d 100644 --- a/tailwind.config.js +++ b/packages/ui/tailwind.config.js @@ -1,5 +1,13 @@ +import { dirname, resolve } from "path" +import { fileURLToPath } from "url" + +const __dirname = dirname(fileURLToPath(import.meta.url)) + export default { - content: ["./src/**/*.{ts,tsx}", "./src/renderer/**/*.html"], + content: [ + resolve(__dirname, "src/**/*.{ts,tsx}"), + resolve(__dirname, "src/renderer/**/*.html"), + ], darkMode: ["class", '[data-theme="dark"]'], theme: { extend: { diff --git a/tsconfig.json b/packages/ui/tsconfig.json similarity index 100% rename from tsconfig.json rename to packages/ui/tsconfig.json diff --git a/packages/ui/vite.config.ts b/packages/ui/vite.config.ts new file mode 100644 index 00000000..31560708 --- /dev/null +++ b/packages/ui/vite.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from "vite" +import solid from "vite-plugin-solid" +import { resolve } from "path" + +export default defineConfig({ + root: "./src/renderer", + plugins: [solid()], + css: { + postcss: "./postcss.config.js", + }, + resolve: { + alias: { + "@": resolve(__dirname, "./src"), + }, + }, + server: { + port: 3000, + }, + build: { + outDir: "dist", + }, +}) diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index 2e7af2b7..00000000 --- a/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}