{
  "name": "local-operator-ui",
  "version": "0.16.0",
  "productName": "Local Operator",
  "description": "User interface for AI agent assistants that run Python code safely on your device through an intuitive chat interface. Supports local and cloud LLM models with built-in security features.",
  "main": "./out/main/index.js",
  "bin": {
    "local-operator-ui": "./bin/local-operator-ui.js"
  },
  "license": "MIT",
  "author": {
    "name": "Radient Inc.",
    "email": "contact@radienthq.com",
    "url": "https://github.com/radient-ml"
  },
  "contributors": [
    {
      "name": "Damian Tran",
      "email": "damian@radienthq.com",
      "url": "https://github.com/damianvtran"
    }
  ],
  "repository": {
    "type": "git",
    "url": "https://github.com/damianvtran/local-operator-ui.git"
  },
  "homepage": "https://github.com/damianvtran/local-operator-ui#readme",
  "bugs": {
    "url": "https://github.com/damianvtran/local-operator-ui/issues"
  },
  "keywords": [
    "local-operator",
    "radient",
    "agent",
    "ai",
    "python",
    "tool use",
    "ui",
    "electron",
    "react"
  ],
  "files": [
    "out",
    "bin",
    "LICENSE",
    "README.md"
  ],
  "publishConfig": {
    "access": "public"
  },
  "scripts": {
    "start": "electron-vite preview",
    "dev": "npx dotenv-cli -e .env -- bash -c 'export $(grep -v '^#' .env | xargs) && electron-vite dev'",
    "build": "electron-vite build",
    "prebuild:npm": "rm -rf out/main out/preload",
    "build:npm": "LOCAL_OPERATOR_UI_NO_BYTECODE=true electron-vite build",
    "postbuild:npm": "chmod +x ./bin/local-operator-ui.js",
    "postbuild": "chmod +x ./bin/local-operator-ui.js",
    "postinstall": "node ./bin/postinstall.js",
    "lint": "pnpm biome check src bin scripts/linux-sandbox.test.mjs",
    "lint:fix": "pnpm biome check --write src bin scripts/linux-sandbox.test.mjs",
    "format": "pnpm biome format src",
    "format:fix": "pnpm biome format --write src",
    "prepack": "pnpm run build:npm",
    "check-types:main": "tsc --noEmit -p tsconfig.node.json",
    "check-types:renderer": "tsc --noEmit -p tsconfig.app.json",
    "check-types": "pnpm run check-types:main && pnpm run check-types:renderer",
    "test:desktop": "node --test scripts/linux-sandbox.test.mjs scripts/desktop-contract.test.mjs scripts/transcript-reducer.test.mjs scripts/provider-state.test.mjs scripts/stale-agent.test.mjs scripts/desktop-renderer-transport.test.mjs scripts/provider-grid-error-copy.test.mjs scripts/settings-time-to-error.test.mjs scripts/backend-error-surfaces.test.mjs scripts/canonical-chat.test.mjs",
    "check-themes": "node scripts/generate-theme-css.mjs --check && node scripts/contrast-contract.mjs",
    "check-evidence": "node scripts/check-evidence.mjs",
    "check-edit-diffs": "node scripts/check-edit-diffs.mjs",
    "gen-themes": "node scripts/generate-theme-css.mjs",
    "bundle-size": "node scripts/bundle-size.mjs",
    "startup-closure": "node scripts/startup-closure.mjs",
    "pack": "pnpm run build && electron-builder --dir",
    "dist": "pnpm run build && electron-builder",
    "dist:mac": "pnpm run build && electron-builder --mac --publish never",
    "dist:win": "pnpm run build && electron-builder --win --publish never",
    "dist:linux": "pnpm run build && electron-builder --linux --publish never",
    "dist:all": "pnpm run build && electron-builder -mwl --publish never",
    "release": "pnpm run build && electron-builder --publish always",
    "generate-icons": "node scripts/generate-icons.js",
    "setup-python": "./scripts/setup-python-resource.sh",
    "storybook": "storybook dev -p 6006",
    "build-storybook": "storybook build"
  },
  "dependencies": {
    "@codemirror/language": "^6.11.1",
    "@codemirror/search": "^6.5.6",
    "@codemirror/state": "^6.5.2",
    "@codemirror/view": "^6.37.1",
    "@electron-toolkit/utils": "^4.0.0",
    "@emotion/react": "^11.14.0",
    "@emotion/styled": "^11.14.0",
    "@lezer/highlight": "^1.2.1",
    "@mui/material": "^6.4.2",
    "@mui/x-date-pickers": "^8.3.1",
    "@openid/appauth": "1.3.2",
    "@tailwindcss/vite": "4.3.3",
    "@tanstack/react-query": "^5.67.1",
    "@tanstack/react-query-devtools": "^5.67.1",
    "@uiw/codemirror-extensions-langs": "^4.23.10",
    "@uiw/codemirror-theme-basic": "^4.23.10",
    "@uiw/react-codemirror": "^4.23.10",
    "ag-grid-community": "^33.3.2",
    "ag-grid-react": "^33.3.2",
    "class-variance-authority": "0.7.1",
    "clsx": "2.1.1",
    "date-fns": "^4.1.0",
    "dmg-builder": "26.0.12",
    "electron-builder-squirrel-windows": "26.0.12",
    "electron-debug": "^3.2.0",
    "electron-log": "^4.4.8",
    "electron-updater": "^6.6.2",
    "html-react-parser": "^5.2.2",
    "jwt-decode": "^4.0.0",
    "katex": "^0.16.21",
    "keytar": "^7.9.0",
    "lucide-react": "^0.507.0",
    "mermaid": "^11.6.0",
    "posthog-js": "^1.235.0",
    "posthog-node": "^4.11.3",
    "radix-ui": "1.6.7",
    "react": "^18.3.1",
    "react-dom": "^18.3.1",
    "react-error-boundary": "^5.0.0",
    "react-markdown": "^10.1.0",
    "react-router-dom": "^6.16.0",
    "react-shepherd": "^6.1.8",
    "react-syntax-highlighter": "^15.6.1",
    "recharts": "^2.15.3",
    "rehype-katex": "^7.0.1",
    "rehype-parse": "^9.0.1",
    "rehype-remark": "^10.0.1",
    "rehype-source-map": "^1.0.1",
    "rehype-stringify": "^10.0.1",
    "remark-gfm": "^4.0.1",
    "remark-math": "^6.0.0",
    "remark-parse": "^11.0.0",
    "remark-rehype": "^11.1.2",
    "remark-stringify": "^11.0.0",
    "shepherd.js": "^14.5.0",
    "sonner": "^2.0.3",
    "tailwind-merge": "3.6.0",
    "tailwindcss": "4.3.3",
    "tw-animate-css": "1.4.0",
    "unified": "^11.0.5",
    "unist-util-visit": "^5.0.0",
    "uuid": "^11.1.0",
    "xlsx": "^0.18.5",
    "zod": "^3.24.2",
    "zustand": "^5.0.3"
  },
  "//electron-pin": "Two pins, one runtime, and they must move together. optionalDependencies.electron is what the npm/npx channel installs and what bin/local-operator-ui.js checks at launch; build.electronVersion is what electron-builder packages into the installers. electron-builder does NOT read optionalDependencies (findFromPackageMetadata inspects devDependencies then dependencies only), so without the explicit build.electronVersion it silently falls back to whatever electron happens to sit in node_modules, and a bump against a stale tree keeps building the old runtime. Bump both, or scripts/test-publish-workflow.mjs fails.",
  "optionalDependencies": {
    "electron": "35.5.1"
  },
  "devDependencies": {
    "@babel/helpers": "^7.26.10",
    "@babel/runtime": "^7.26.10",
    "@biomejs/biome": "^1.9.4",
    "@chromatic-com/storybook": "^3.2.5",
    "@electron-toolkit/preload": "^3.0.1",
    "@electron-toolkit/tsconfig": "^1.0.1",
    "@electron/notarize": "^2.5.0",
    "@storybook/addon-essentials": "^8.6.4",
    "@storybook/addon-interactions": "^8.6.4",
    "@storybook/blocks": "^8.6.4",
    "@storybook/react": "^8.6.4",
    "@storybook/react-vite": "^8.6.4",
    "@storybook/test": "^8.6.4",
    "@types/hast": "^3.0.4",
    "@types/react": "18.3.18",
    "@types/react-dom": "18.3.5",
    "@types/react-syntax-highlighter": "^15.5.13",
    "@types/xlsx": "^0.0.36",
    "@vitejs/plugin-react": "^4.3.4",
    "dotenv": "^16.5.0",
    "dotenv-cli": "^8.0.0",
    "electron-builder": "^26.0.12",
    "electron-vite": "^3.0.0",
    "esbuild": "^0.25.1",
    "icns-lib": "^1.0.1",
    "jest": "^29.7.0",
    "remark": "^15.0.1",
    "sharp": "^0.33.2",
    "storybook": "^8.6.4",
    "typescript": "^5.8.2",
    "vite": "^6.2.0",
    "vite-tsconfig-paths": "^5.1.4",
    "yaml": "^2.7.0"
  },
  "peerDependencies": {
    "react": ">=18.0.0",
    "react-dom": ">=18.0.0"
  },
  "engines": {
    "node": ">=22.13.1"
  },
  "build": {
    "appId": "com.local-operator",
    "electronVersion": "35.5.1",
    "productName": "Local Operator",
    "copyright": "Copyright © 2025 Radient Inc.",
    "asar": true,
    "files": [
      "out/**/*",
      "bin/**/*",
      "LICENSE",
      "README.md",
      "!node_modules/electron/**/*"
    ],
    "directories": {
      "output": "dist",
      "buildResources": "build"
    },
    "extraResources": [
      {
        "from": "resources/python",
        "to": "python",
        "filter": [
          "**/*"
        ]
      },
      {
        "from": "resources/python_aarch64",
        "to": "python_aarch64",
        "filter": [
          "**/*"
        ]
      }
    ],
    "afterSign": "scripts/notarize.js",
    "mac": {
      "notarize": false,
      "category": "public.app-category.developer-tools",
      "hardenedRuntime": true,
      "gatekeeperAssess": false,
      "entitlements": "build/entitlements.mac.plist",
      "entitlementsInherit": "build/entitlements.mac.plist",
      "x64ArchFiles": "*",
      "target": [
        {
          "target": "dmg",
          "arch": [
            "universal"
          ]
        },
        {
          "target": "zip",
          "arch": [
            "universal"
          ]
        }
      ],
      "artifactName": "${name}-${version}-${arch}.${ext}"
    },
    "dmg": {
      "sign": false,
      "contents": [
        {
          "x": 130,
          "y": 220
        },
        {
          "x": 410,
          "y": 220,
          "type": "link",
          "path": "/Applications"
        }
      ],
      "window": {
        "width": 540,
        "height": 380
      }
    },
    "win": {
      "target": [
        {
          "target": "nsis",
          "arch": [
            "x64",
            "arm64"
          ]
        }
      ],
      "artifactName": "${name}-setup-${version}-${arch}.${ext}",
      "verifyUpdateCodeSignature": false
    },
    "nsis": {
      "createDesktopShortcut": true,
      "createStartMenuShortcut": true,
      "deleteAppDataOnUninstall": true,
      "displayLanguageSelector": true,
      "multiLanguageInstaller": true
    },
    "linux": {
      "category": "ArtificialIntelligence",
      "icon": "build/",
      "target": [
        {
          "target": "deb",
          "arch": "x64"
        },
        {
          "target": "AppImage",
          "arch": "x64"
        },
        {
          "target": "rpm",
          "arch": "x64"
        }
      ],
      "artifactName": "${name}-${version}-${arch}.${ext}",
      "desktop": {
        "entry": {
          "Name": "Local Operator",
          "Comment": "AI Agent Assistants On Your Device",
          "Categories": "ArtificialIntelligence"
        }
      }
    },
    "deb": {
      "depends": [
        "python3.12-full",
        "python3.12-venv"
      ]
    },
    "rpm": {
      "depends": [
        "python3.12-full",
        "python3.12-venv"
      ]
    },
    "publish": [
      {
        "provider": "github",
        "owner": "damianvtran",
        "repo": "local-operator-ui",
        "private": false,
        "releaseType": "release"
      }
    ],
    "generateUpdatesFilesForAllChannels": true
  }
}
