{ "name": "frontend", "version": "2.1.0", "private": true, "description": "Local-first workstation for running self-hosted LLMs", "author": "Sybil Solutions", "homepage": "https://localstudio.ai", "repository": "https://github.com/sybil-solutions/local-studio", "scripts": { "predev": "node ../scripts/project.mjs link-services", "dev": "concurrently -k -n NEXT,AGENT -c cyan,green \"next dev\" \"npm --prefix ../services/agent-runtime run dev\"", "build": "node ../scripts/project.mjs prepare-next && npm --prefix ../services/agent-runtime run bundle && next build --webpack && node ../scripts/project.mjs complete-standalone && node ../scripts/project.mjs assert-standalone", "start": "node ../scripts/project.mjs start", "perf:audit": "node ../scripts/project.mjs perf", "perf:browser": "node ../scripts/project.mjs browser-perf", "lint": "eslint", "lint:fix": "eslint --fix", "format": "prettier --write \"src/**/*.{ts,tsx,js,jsx,css,md,json}\"", "format:check": "prettier --check \"src/**/*.{ts,tsx,js,jsx,css,md,json}\"", "depcheck": "depcheck", "prepare": "node ../scripts/project.mjs setup-hooks", "postinstall": "node ../scripts/project.mjs link-services", "check:deadcode": "knip", "check:dupes": "jscpd src", "check:cleanup": "npm run check:deadcode && npm run check:dupes && npm run depcheck", "check:ui-structure": "node ../scripts/project.mjs validate-ui", "check:fix": "knip --fix", "desktop:build:main": "tsc -p desktop/tsconfig.json --noEmit && bun build desktop/main.ts desktop/preload.ts --outdir desktop/dist --target=node --format=cjs --minify --external electron --external @lydell/node-pty", "desktop:start": "electron desktop/dist/main.js", "desktop:start:dev": "LOCAL_STUDIO_DESKTOP_DEV_SERVER_URL=http://127.0.0.1:3000 electron desktop/dist/main.js", "desktop:build": "npm run build && npm run desktop:build:main", "desktop:dev": "npm run desktop:build:main && concurrently -k -n NEXT,ELECTRON -c cyan,magenta \"npm run dev\" \"node -e \\\"setTimeout(() => process.exit(0), 3000)\\\" && npm run desktop:start:dev\"", "desktop:dist": "npm run desktop:build && electron-builder --config desktop/electron-builder.yml", "desktop:dist:dev": "npm run desktop:build && electron-builder --config desktop/electron-builder.yml --config.appId=org.local.studio.desktop.dev --config.productName=\"Local Studio Dev\" --config.extraMetadata.localStudioChannel=dev --config.directories.output=dist-desktop-dev", "desktop:dist:notarized": "npm run desktop:build && electron-builder --config desktop/electron-builder.yml --config.mac.notarize=true", "desktop:pack": "npm run desktop:build && electron-builder --dir --config desktop/electron-builder.yml", "typecheck": "tsc --noEmit", "typecheck:desktop": "tsc -p desktop/tsconfig.json", "check:cycles": "madge --extensions ts,tsx --circular src", "check:static": "npm run lint && npm run typecheck && npm run typecheck:desktop && npm run typecheck:extensions && npm run check:cycles && npm run check:ui-structure", "check:quality": "node ../scripts/project.mjs validate-package && npm run check:static && npm run check:cleanup && npm run build", "precommit": "lint-staged --config .lintstagedrc.json && npm run typecheck", "typecheck:extensions": "tsc -p desktop/resources/pi-extensions/tsconfig.json" }, "dependencies": { "@earendil-works/pi-ai": "0.83.0", "@earendil-works/pi-coding-agent": "0.83.0", "@hono/node-server": "^2.0.12", "@local-studio/agent-runtime": "file:../services/agent-runtime", "@local-studio/contracts": "file:../controller/contracts", "@lydell/node-pty": "1.2.0-beta.12", "@modelcontextprotocol/sdk": "1.30.0", "@xterm/addon-fit": "0.11.0", "@xterm/addon-web-links": "0.13.0-beta.220", "@xterm/xterm": "6.1.0-beta.285", "chromium-bidi": "0.12.0", "effect": "4.0.0-beta.90", "electron-updater": "6.8.9", "highlight.js": "11.11.1", "hono": "4.12.30", "lucide-react": "0.561.0", "mermaid": "^11.16.0", "next": "16.2.12", "playwright-core": "1.61.1", "proper-lockfile": "4.1.2", "qrcode.react": "4.2.0", "react": "19.2.1", "react-dom": "19.2.1", "react-markdown": "10.1.0", "react-virtuoso": "4.18.1", "remark-gfm": "4.0.1", "semver": "7.8.5", "typebox": "1.1.38", "yaml": "2.9.0", "zustand": "4.5.7" }, "devDependencies": { "@tailwindcss/postcss": "4.1.18", "@types/node": "20.19.27", "@types/proper-lockfile": "4.1.4", "@types/react": "19.2.7", "@types/react-dom": "19.2.3", "@types/semver": "7.7.1", "concurrently": "9.2.4", "depcheck": "1.4.7", "electron": "43.1.1", "electron-builder": "26.15.3", "eslint": "9.39.2", "eslint-config-next": "16.2.7", "jscpd": "4.0.7", "knip": "5.82.1", "lint-staged": "15.5.2", "madge": "8.0.0", "prettier": "3.8.0", "tailwindcss": "4.1.18", "typescript": "5.9.3" }, "overrides": { "postcss": "^8.5.23", "fast-uri": "^3.1.4", "sharp": "^0.35.3", "dompurify": "^3.4.12", "protobufjs": "^7.6.5", "tar": "^7.5.21", "minimatch@^10": { "brace-expansion": "5.0.9" } }, "main": "desktop/dist/main.js", "allowScripts": { "electron-winstaller@5.4.0": true, "msgpackr-extract@3.0.4": true, "protobufjs@7.6.5": true, "protobufjs@7.6.4": true, "sharp@0.34.5": true, "unrs-resolver@1.11.1": true, "@google/genai@1.52.0": true, "fsevents@2.3.2": true }}
{
"name": "frontend",
"version": "2.1.0",
"private": true,
"description": "Local-first workstation for running self-hosted LLMs",
"author": "Sybil Solutions",
"homepage": "https://localstudio.ai",
"repository": "https://github.com/sybil-solutions/local-studio",
"scripts": {
"predev": "node ../scripts/project.mjs link-services",
"dev": "concurrently -k -n NEXT,AGENT -c cyan,green \"next dev\" \"npm --prefix ../services/agent-runtime run dev\"",
"build": "node ../scripts/project.mjs prepare-next && npm --prefix ../services/agent-runtime run bundle && next build --webpack && node ../scripts/project.mjs complete-standalone && node ../scripts/project.mjs assert-standalone",
"start": "node ../scripts/project.mjs start",
"perf:audit": "node ../scripts/project.mjs perf",
"perf:browser": "node ../scripts/project.mjs browser-perf",
"lint": "eslint",
"lint:fix": "eslint --fix",
"format": "prettier --write \"src/**/*.{ts,tsx,js,jsx,css,md,json}\"",
"format:check": "prettier --check \"src/**/*.{ts,tsx,js,jsx,css,md,json}\"",
"depcheck": "depcheck",
"prepare": "node ../scripts/project.mjs setup-hooks",
"postinstall": "node ../scripts/project.mjs link-services",
"check:deadcode": "knip",
"check:dupes": "jscpd src",
"check:cleanup": "npm run check:deadcode && npm run check:dupes && npm run depcheck",
"check:ui-structure": "node ../scripts/project.mjs validate-ui",
"check:fix": "knip --fix",
"desktop:build:main": "tsc -p desktop/tsconfig.json --noEmit && bun build desktop/main.ts desktop/preload.ts --outdir desktop/dist --target=node --format=cjs --minify --external electron --external @lydell/node-pty",
"desktop:start": "electron desktop/dist/main.js",
"desktop:start:dev": "LOCAL_STUDIO_DESKTOP_DEV_SERVER_URL=http://127.0.0.1:3000 electron desktop/dist/main.js",
"desktop:build": "npm run build && npm run desktop:build:main",
"desktop:dev": "npm run desktop:build:main && concurrently -k -n NEXT,ELECTRON -c cyan,magenta \"npm run dev\" \"node -e \\\"setTimeout(() => process.exit(0), 3000)\\\" && npm run desktop:start:dev\"",
"desktop:dist": "npm run desktop:build && electron-builder --config desktop/electron-builder.yml",
"desktop:dist:dev": "npm run desktop:build && electron-builder --config desktop/electron-builder.yml --config.appId=org.local.studio.desktop.dev --config.productName=\"Local Studio Dev\" --config.extraMetadata.localStudioChannel=dev --config.directories.output=dist-desktop-dev",
"desktop:dist:notarized": "npm run desktop:build && electron-builder --config desktop/electron-builder.yml --config.mac.notarize=true",
"desktop:pack": "npm run desktop:build && electron-builder --dir --config desktop/electron-builder.yml",
"typecheck": "tsc --noEmit",
"typecheck:desktop": "tsc -p desktop/tsconfig.json",
"check:cycles": "madge --extensions ts,tsx --circular src",
"check:static": "npm run lint && npm run typecheck && npm run typecheck:desktop && npm run typecheck:extensions && npm run check:cycles && npm run check:ui-structure",
"check:quality": "node ../scripts/project.mjs validate-package && npm run check:static && npm run check:cleanup && npm run build",
"precommit": "lint-staged --config .lintstagedrc.json && npm run typecheck",
"typecheck:extensions": "tsc -p desktop/resources/pi-extensions/tsconfig.json"
},
"dependencies": {
"@earendil-works/pi-ai": "0.83.0",
"@earendil-works/pi-coding-agent": "0.83.0",
"@hono/node-server": "^2.0.12",
"@local-studio/agent-runtime": "file:../services/agent-runtime",
"@local-studio/contracts": "file:../controller/contracts",
"@lydell/node-pty": "1.2.0-beta.12",
"@modelcontextprotocol/sdk": "1.30.0",
"@xterm/addon-fit": "0.11.0",
"@xterm/addon-web-links": "0.13.0-beta.220",
"@xterm/xterm": "6.1.0-beta.285",
"chromium-bidi": "0.12.0",
"effect": "4.0.0-beta.90",
"electron-updater": "6.8.9",
"highlight.js": "11.11.1",
"hono": "4.12.30",
"lucide-react": "0.561.0",
"mermaid": "^11.16.0",
"next": "16.2.12",
"playwright-core": "1.61.1",
"proper-lockfile": "4.1.2",
"qrcode.react": "4.2.0",
"react": "19.2.1",
"react-dom": "19.2.1",
"react-markdown": "10.1.0",
"react-virtuoso": "4.18.1",
"remark-gfm": "4.0.1",
"semver": "7.8.5",
"typebox": "1.1.38",
"yaml": "2.9.0",
"zustand": "4.5.7"
},
"devDependencies": {
"@tailwindcss/postcss": "4.1.18",
"@types/node": "20.19.27",
"@types/proper-lockfile": "4.1.4",
"@types/react": "19.2.7",
"@types/react-dom": "19.2.3",
"@types/semver": "7.7.1",
"concurrently": "9.2.4",
"depcheck": "1.4.7",
"electron": "43.1.1",
"electron-builder": "26.15.3",
"eslint": "9.39.2",
"eslint-config-next": "16.2.7",
"jscpd": "4.0.7",
"knip": "5.82.1",
"lint-staged": "15.5.2",
"madge": "8.0.0",
"prettier": "3.8.0",
"tailwindcss": "4.1.18",
"typescript": "5.9.3"
},
"overrides": {
"postcss": "^8.5.23",
"fast-uri": "^3.1.4",
"sharp": "^0.35.3",
"dompurify": "^3.4.12",
"protobufjs": "^7.6.5",
"tar": "^7.5.21",
"minimatch@^10": {
"brace-expansion": "5.0.9"
}
},
"main": "desktop/dist/main.js",
"allowScripts": {
"electron-winstaller@5.4.0": true,
"msgpackr-extract@3.0.4": true,
"protobufjs@7.6.5": true,
"protobufjs@7.6.4": true,
"sharp@0.34.5": true,
"unrs-resolver@1.11.1": true,
"@google/genai@1.52.0": true,
"fsevents@2.3.2": true
}
}