{ "name": "blogging-desktop-server", "productName": "Blogging Desktop Server", "version": "1.0.0", "description": "A desktop blogging application with offline-first capabilities and cloud sync", "main": "dist/main/main.js", "scripts": { "dev": "concurrently --kill-others \"npm run dev:main\" \"npm run dev:renderer\" \"npm run dev:electron\"", "dev:main": "node ./node_modules/typescript/bin/tsc -p tsconfig.main.json --watch", "dev:renderer": "node ./node_modules/vite/bin/vite.js", "dev:electron": "wait-on http://localhost:5173 && cross-env NODE_ENV=development node ./node_modules/electron/cli.js .", "start": "concurrently --kill-others \"npm run dev:renderer\" \"npm run start:electron\"", "start:electron": "wait-on http://localhost:5173 && cross-env NODE_ENV=development node ./node_modules/electron/cli.js .", "build": "npm run lint && npm run db:generate && npm run build:main && npm run build:cli && npm run build:renderer", "icons:generate": "node scripts/regenerate-icons.mjs", "package": "npm run icons:generate && npm run build && electron-builder --dir", "dist": "npm run icons:generate && npm run build && electron-builder", "dist:mac": "npm run icons:generate && npm run build && electron-builder --mac", "dist:win": "npm run icons:generate && npm run build && electron-builder --win", "dist:linux": "npm run icons:generate && npm run build && electron-builder --linux", "build:main": "node ./node_modules/typescript/bin/tsc -p tsconfig.main.json", "build:cli": "node ./node_modules/vite/bin/vite.js build --config vite.config.cli.ts", "build:renderer": "node ./node_modules/vite/bin/vite.js build", "start:prod": "node ./node_modules/electron/cli.js .", "start:dev": "cross-env NODE_ENV=development node ./node_modules/electron/cli.js .", "test": "vitest run", "test:watch": "vitest", "test:coverage": "vitest run --coverage", "test:ui": "vitest --ui", "bench:python-runtime": "node ./node_modules/tsx/dist/cli.mjs scripts/python-runtime-benchmark.ts", "docs:api": "node ./node_modules/tsx/dist/cli.mjs scripts/generate-api-docs.ts", "lint": "eslint \"src/renderer/**/*.{ts,tsx}\" --max-warnings 0", "lint:i18n": "eslint \"src/renderer/**/*.{ts,tsx}\" --max-warnings 0", "db:generate": "node ./node_modules/drizzle-kit/bin.cjs generate", "db:migrate": "node ./node_modules/tsx/dist/cli.mjs src/main/database/migrate.ts", "db:studio": "node ./node_modules/drizzle-kit/bin.cjs studio" }, "author": "", "license": "MIT", "devDependencies": { "@electron/notarize": "^3.1.0", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@testing-library/user-event": "^14.6.1", "@types/chokidar": "^1.7.5", "@types/dagre": "^0.7.54", "@types/node": "^25.2.3", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@types/turndown": "^5.0.6", "@typescript-eslint/eslint-plugin": "^8.56.0", "@typescript-eslint/parser": "^8.56.0", "@vitejs/plugin-react": "^5.1.4", "@vitest/coverage-v8": "^4.0.18", "@vitest/ui": "^4.0.18", "concurrently": "^9.2.1", "cross-env": "^10.1.0", "drizzle-kit": "^0.31.9", "electron": "^40.4.0", "electron-builder": "^26.7.0", "electron-store": "^11.0.2", "eslint": "^9.39.3", "eslint-plugin-i18next": "^6.1.3", "jsdom": "^28.0.0", "memfs": "^4.6.0", "png-to-ico": "^3.0.1", "tsx": "^4.6.0", "typescript": "^5.3.0", "vite": "^7.3.1", "vitest": "^4.0.18", "wait-on": "^9.0.3" }, "dependencies": { "@ai-sdk/anthropic": "^3.0.50", "@ai-sdk/mistral": "^3.0.21", "@ai-sdk/openai": "^3.0.37", "@braintree/sanitize-url": "^7.1.2", "@dagrejs/dagre": "^2.0.4", "@floating-ui/dom": "^1.7.5", "@highlightjs/cdn-assets": "^11.11.1", "@huggingface/transformers": "^3.8.1", "@libsql/client": "^0.17.0", "@milkdown/kit": "^7.18.0", "@milkdown/plugin-block": "^7.18.0", "@milkdown/plugin-clipboard": "^7.18.0", "@milkdown/plugin-cursor": "^7.18.0", "@milkdown/plugin-history": "^7.18.0", "@milkdown/plugin-indent": "^7.18.0", "@milkdown/plugin-listener": "^7.18.0", "@milkdown/plugin-trailing": "^7.18.0", "@milkdown/react": "^7.18.0", "@milkdown/theme-nord": "^7.18.0", "@modelcontextprotocol/ext-apps": "^1.1.2", "@modelcontextprotocol/sdk": "^1.27.1", "@monaco-editor/react": "^4.7.0", "@picocss/pico": "^2.1.1", "@xmldom/xmldom": "^0.8.11", "ai": "^6.0.105", "chokidar": "^5.0.0", "d3-cloud": "^1.2.8", "date-fns": "^4.1.0", "drizzle-orm": "^0.45.1", "dropbox": "^10.34.0", "fast-xml-parser": "^5.3.8", "gray-matter": "^4.0.3", "lightbox2": "^2.11.5", "liquidjs": "^10.24.0", "marked-react": "^3.0.2", "monaco-editor": "^0.55.1", "node-scp": "^0.0.25", "pyodide": "^0.29.3", "react": "^19.2.4", "react-arborist": "^3.4.3", "react-dom": "^19.2.4", "react-hot-toast": "^2.6.0", "rsyncwrapper": "^3.1.0", "sharp": "^0.34.5", "simple-git": "^3.31.1", "smol-toml": "^1.6.0", "snowball-stemmers": "^0.6.0", "transliteration": "^2.6.1", "turndown": "^7.2.2", "usearch": "^2.21.4", "uuid": "^13.0.0", "vanilla-calendar-pro": "^3.1.0", "zod": "^4.3.6", "zustand": "^5.0.11" }, "overrides": { "@esbuild-kit/core-utils": { "esbuild": "0.27.3" }, "dompurify": ">=3.3.2" }, "build": { "appId": "com.bds.blogging-desktop-server", "productName": "Blogging Desktop Server", "asar": true, "afterSign": "scripts/notarize.mjs", "directories": { "output": "release" }, "files": [ "dist/**/*", "drizzle/**/*", "node_modules/**/*", "!**/.DS_Store", "!**/__MACOSX/**", "!**/._*" ], "extraResources": [ { "from": "dist/cli/bds-mcp.cjs", "to": "bds-mcp.cjs" }, { "from": "drizzle", "to": "drizzle" }, { "from": "API.md", "to": "docs/API.md" }, { "from": "DOCUMENTATION.md", "to": "docs/DOCUMENTATION.md" }, { "from": "src/main/engine/templates", "to": "templates" }, { "from": "src/main/engine/assets", "to": "assets", "filter": [ "*.css" ] } ], "protocols": [ { "name": "bDS Blogmark Links", "schemes": [ "bds" ] } ], "win": { "icon": "assets/icon.ico", "target": [ { "target": "nsis", "arch": [ "x64", "arm64" ] } ] }, "mac": { "icon": "assets/icon.icns", "target": [ "dmg", "zip" ], "category": "public.app-category.productivity", "hardenedRuntime": true, "gatekeeperAssess": false, "entitlements": "build/entitlements.mac.plist", "entitlementsInherit": "build/entitlements.mac.inherit.plist" }, "linux": { "icon": "assets/icon.png", "target": [ "AppImage", "deb", "rpm" ], "category": "Utility" } } }