{ "name": "agent-ui", "version": "1.0.0", "description": "Dynamic canvas for Claude Code interaction", "scripts": { "kill-ports": "node -e \"const {execSync} = require('child_process'); [4101,4102,4103,4105].forEach(p => { try { const pid = execSync('netstat -ano | findstr :' + p + ' | findstr LISTENING', {encoding:'utf8'}).split(/\\s+/).pop().trim(); if(pid) execSync('taskkill /PID ' + pid + ' /F', {stdio:'ignore'}); } catch(e){} }); console.log('Ports cleared (4104/whisper preserved)');\"", "start": "bun run kill-ports && concurrently -n api,terminal,frontend -c blue,yellow,green \"cd server && bun --watch run index.ts\" \"cd server && bun run terminal.ts\" \"cd frontend && bun run dev --host\"", "start:api": "cd server && bun --watch run index.ts", "start:terminal": "cd server && bun run terminal.ts", "start:frontend": "cd frontend && bun run dev --host", "tauri": "npx --prefix frontend tauri", "tauri:dev": "npx --prefix frontend tauri dev", "tauri:build": "npx --prefix frontend tauri build", "tauri:android:init": "npx --prefix frontend tauri android init", "tauri:android:build": "npx --prefix frontend tauri android build", "build:android:tauri": "cd src-tauri/gen/android && ./gradlew assembleRelease -x rustBuildArm64Release -x rustBuildArmRelease -x rustBuildX86Release -x rustBuildX86_64Release", "build:tauri:android": "cd src-tauri/gen/android && ./gradlew assembleRelease -x rustBuildArm64Release -x rustBuildArmRelease -x rustBuildX86Release -x rustBuildX86_64Release", "start:tauri": "frontend/node_modules/.bin/tauri dev" }, "devDependencies": { "concurrently": "^9.2.1" } }