@juspay/neurolink
Version:
Universal AI Development Platform with working MCP integration, multi-provider support, voice (TTS/STT/realtime), and professional CLI. 58+ external MCP servers discoverable, multimodal file processing, RAG pipelines. Build, test, and deploy AI applicatio
524 lines (523 loc) • 21.7 kB
JSON
{
"name": "@juspay/neurolink",
"version": "9.65.0",
"packageManager": "pnpm@10.15.1",
"description": "Universal AI Development Platform with working MCP integration, multi-provider support, voice (TTS/STT/realtime), and professional CLI. 58+ external MCP servers discoverable, multimodal file processing, RAG pipelines. Build, test, and deploy AI applications with 21+ providers: OpenAI, Anthropic, Google AI Studio, Google Vertex, AWS Bedrock, Azure OpenAI, Mistral, LiteLLM, SageMaker, Hugging Face, Ollama, OpenAI-compatible, OpenRouter, DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, plus voice (OpenAI TTS, ElevenLabs, Deepgram, Azure Speech).",
"author": {
"name": "Juspay Technologies",
"email": "support@juspay.in",
"url": "https://juspay.io"
},
"license": "MIT",
"homepage": "https://github.com/juspay/neurolink#readme",
"repository": {
"type": "git",
"url": "git+https://github.com/juspay/neurolink.git"
},
"bugs": {
"url": "https://github.com/juspay/neurolink/issues"
},
"funding": {
"type": "individual",
"url": "https://github.com/sponsors/juspay"
},
"engines": {
"node": ">=20.18.1",
"npm": ">=10.0.0",
"pnpm": ">=8.0.0"
},
"scripts": {
"dev": "vite dev",
"build": "vite build && pnpm run prepack",
"build:browser": "node scripts/build-browser.mjs",
"build:browser:dev": "node scripts/build-browser.mjs --dev",
"build:cli": "echo 'Building CLI...' && svelte-kit sync && tsc --project tsconfig.cli.json",
"build:cli:bundle": "node scripts/bundle-cli.mjs",
"build:cli:bundle:minify": "node scripts/bundle-cli.mjs --minify",
"build:action": "ncc build src/action/index.ts -o action-dist --source-map",
"build:cli:link": "pnpm run build:cli && pnpm link --global",
"check:deps": "tsx scripts/check-banned-deps.ts",
"cli": "node dist/cli/index.js",
"preview": "vite preview",
"prepare": "git rev-parse --git-dir > /dev/null 2>&1 && husky install || echo 'Skipping husky in non-git environment'",
"prepack": "svelte-kit sync && svelte-package && pnpm run build:react-hooks && pnpm run build:cli && pnpm run build:browser && publint",
"build:react-hooks": "npx tsc --jsx react-jsx --module nodenext --moduleResolution nodenext --target esnext --esModuleInterop --skipLibCheck --outDir dist --declaration false src/lib/client/reactHooks.tsx",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json && tsc --noEmit --strict",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"modelServer": "tsx scripts/modelServer.ts",
"lint": "prettier --check . && NODE_OPTIONS='--max-old-space-size=8192' eslint .",
"format": "prettier --write .",
"format:check": "prettier --check .",
"format:staged": "tsx scripts/format-staged.ts",
"changeset": "changeset",
"changeset:version": "changeset version && git add --all",
"format:changelog": "tsx scripts/format-changelog.ts",
"// ===== NEUROLINK DEVELOPER EXPERIENCE ENHANCEMENT 2.0 =====": "",
"// Environment & Setup (pnpm-first)": "",
"setup": "pnpm install && tsx tools/setup.ts",
"setup:complete": "pnpm run setup && pnpm run project:organize && pnpm run env:validate",
"env:setup": "tsx tools/automation/environmentManager.ts",
"env:validate": "tsx tools/automation/environmentManager.ts --validate",
"env:backup": "tsx tools/automation/environmentManager.ts --backup",
"env:list-backups": "tsx tools/automation/environmentManager.ts --list-backups",
"// Project Management & Analysis": "",
"project:organize": "tsx tools/automation/projectOrganizer.ts",
"project:health": "tsx tools/development/healthMonitor.ts",
"// Shell Script Conversion": "",
"convert:shell-scripts": "tsx tools/automation/shellConverter.ts",
"convert:specific": "tsx tools/automation/shellConverter.ts --specific",
"// Testing (Continuous Test Suites)": "",
"test": "npx tsx test/continuous-test-suite.ts",
"test:client": "npx tsx test/continuous-test-suite-client.ts",
"test:context": "npx tsx test/continuous-test-suite-context.ts",
"test:evaluation": "npx tsx test/continuous-test-suite-evaluation.ts",
"test:mcp": "npx tsx test/continuous-test-suite-mcp-infra.ts",
"test:mcp:http": "npx tsx test/continuous-test-suite-mcp-http.ts",
"test:mcp:sdk": "npx tsx test/continuous-test-suite-mcp-sdk.ts",
"test:mcp:cli": "npx tsx test/continuous-test-suite-mcp-cli.ts",
"test:mcp:full": "pnpm run test:mcp:infra && pnpm run test:mcp:bash && pnpm run test:mcp:limits && pnpm run test:mcp:spans && pnpm run test:mcp:sdk && pnpm run test:mcp:cli && pnpm run test:mcp:http",
"test:media": "npx tsx test/continuous-test-suite-media-gen.ts",
"test:memory": "npx tsx test/continuous-test-suite-memory.ts",
"test:middleware": "npx tsx test/continuous-test-suite-middleware.ts",
"test:observability": "npx tsx test/continuous-test-suite-observability.ts",
"test:ppt": "npx tsx test/continuous-test-suite-ppt.ts",
"test:providers": "npx tsx test/continuous-test-suite-providers.ts",
"test:new-providers": "npx tsx test/continuous-test-suite-new-providers.ts",
"test:matrix": "npx tsx test/continuous-test-suite-provider-matrix.ts",
"test:matrix:cli": "npx tsx test/continuous-test-suite-provider-matrix-cli.ts",
"test:mcp:spans": "npx tsx test/continuous-test-suite-mcp-spans.ts",
"test:mcp:bash": "npx tsx test/continuous-test-suite-mcp-bash.ts",
"test:mcp:limits": "npx tsx test/continuous-test-suite-mcp-output-limits.ts",
"test:mcp:infra": "npx tsx test/continuous-test-suite-mcp-infra.ts",
"test:providers-mocked": "npx tsx test/continuous-test-suite-providers-mocked.ts",
"test:rag": "npx tsx test/continuous-test-suite-rag.ts",
"test:servers": "npx tsx test/continuous-test-suite-servers.ts",
"test:tool-reliability": "npx tsx test/continuous-test-suite-tool-reliability.ts",
"test:google-native": "npx tsx test/continuous-test-suite-google-native.ts",
"test:tts": "npx tsx test/continuous-test-suite-tts.ts",
"test:voice": "npx tsx test/continuous-test-suite-voice.ts",
"test:voice-server": "npx tsx test/continuous-test-suite-voice-server.ts",
"test:avatar": "npx tsx test/continuous-test-suite-avatar.ts",
"test:music": "npx tsx test/continuous-test-suite-music.ts",
"test:image-gen": "npx tsx test/continuous-test-suite-image-gen-extras.ts",
"test:ssrf": "npx tsx test/continuous-test-suite-ssrf.ts",
"test:log-sanitize": "npx tsx test/continuous-test-suite-log-sanitize.ts",
"test:stream-span": "npx tsx test/continuous-test-suite-stream-span.ts",
"test:credentials": "npx tsx test/continuous-test-suite-credentials.ts",
"test:dynamic": "npx tsx test/continuous-test-suite-dynamic.ts",
"test:proxy": "npx tsx test/continuous-test-suite-proxy.ts",
"test:bugfixes": "npx tsx test/continuous-test-suite-bugfixes.ts",
"test:workflow": "npx tsx test/continuous-test-suite-workflow.ts",
"test:hitl": "npx tsx test/continuous-test-suite-hitl.ts",
"test:tasks": "npx tsx test/continuous-test-suite-tasks.ts",
"test:auth": "npx tsx test/continuous-test-suite-auth.ts",
"test:autoresearch": "npx tsx test/continuous-test-suite-autoresearch.ts",
"test:autoresearch:redis": "npx tsx test/continuous-test-suite-autoresearch-redis.ts",
"test:envguard": "npx tsx test/helpers/envGuard.test.ts",
"test:ci": "pnpm run test && pnpm run test:client && pnpm run test:hitl",
"// CI tier — fast, no live AI calls, safe for every commit": "",
"test:unit": "pnpm run test:envguard && pnpm run test:bugfixes && pnpm run test:mcp:infra && pnpm run test:mcp:bash && pnpm run test:mcp:limits && pnpm run test:mcp:spans && pnpm run test:autoresearch:redis",
"// CI tier — live providers, runs only when API keys are present (test:credentials and test:dynamic make real provider calls when keys are set, so they live here, not in test:unit)": "",
"test:live": "pnpm run test:providers && pnpm run test:mcp:http && pnpm run test:mcp:sdk && pnpm run test:mcp:cli && pnpm run test:observability && pnpm run test:context && pnpm run test:memory && pnpm run test:tool-reliability && pnpm run test:evaluation && pnpm run test:autoresearch && pnpm run test:credentials && pnpm run test:dynamic",
"// CI tier — product output (image/video/TTS/PPT) — costs $$ per run": "",
"test:product": "pnpm run test:media && pnpm run test:tts && pnpm run test:ppt && pnpm run test:proxy",
"test:performance": "tsx tools/testing/performanceMonitor.ts",
"// Content Generation (Cross-platform JS)": "",
"content:videos": "tsx tools/converted-scripts/generateAllVideos.ts",
"content:cleanup": "tsx tools/converted-scripts/cleanupHashNamedVideos.ts",
"content:all": "pnpm run content:videos",
"// Documentation Automation (Legacy MkDocs)": "",
"docs:api": "typedoc",
"docs:sync": "bash scripts/sync-readme.sh",
"docs:build:mkdocs": "pnpm run docs:api && bash scripts/sync-readme.sh && mkdocs build --strict --clean",
"docs:serve:mkdocs": "bash scripts/sync-readme.sh && mkdocs serve",
"docs:gh-deploy:mkdocs": "bash scripts/sync-readme.sh && mkdocs gh-deploy --force",
"docs:validate": "tsx tools/content/documentationSync.ts --validate",
"docs:generate": "pnpm run docs:validate",
"// Documentation (Docusaurus)": "",
"docs:start": "pnpm --filter ./docs-site start",
"docs:build": "pnpm --filter ./docs-site build",
"docs:serve": "pnpm --filter ./docs-site serve",
"docs:clear": "pnpm --filter ./docs-site clear",
"// Proxy Observability (Local OpenObserve)": "",
"proxy:observability:setup": "bash scripts/observability/manage-local-openobserve.sh setup",
"proxy:observability:up": "bash scripts/observability/manage-local-openobserve.sh up",
"proxy:observability:down": "bash scripts/observability/manage-local-openobserve.sh down",
"proxy:observability:logs": "bash scripts/observability/manage-local-openobserve.sh logs",
"proxy:observability:status": "bash scripts/observability/manage-local-openobserve.sh status",
"proxy:observability:doctor": "node scripts/observability/check-proxy-telemetry.mjs",
"proxy:observability:import-dashboard": "bash scripts/observability/manage-local-openobserve.sh import-dashboard",
"// Development & Monitoring": "",
"dev:health": "tsx tools/development/healthMonitor.ts",
"dev:demo": "concurrently \"pnpm run dev\" \"node neurolink-demo/complete-enhanced-server.js\"",
"demo:voice": "pnpm build && tsx examples/voice-demo/server.ts",
"// Build & Deploy (Complete Pipeline)": "",
"build:complete": "tsx tools/automation/buildSystem.ts",
"// Quality & Maintenance": "",
"quality:all": "pnpm run lint && pnpm run format && pnpm run test:ci",
"clean": "pnpm run content:cleanup && rm -rf dist .svelte-kit node_modules/.cache",
"reset": "pnpm run clean && pnpm install",
"audit": "pnpm audit",
"// Release & Publishing": "",
"release": "pnpm run build:complete && pnpm run test:ci && changeset publish",
"test:semantic-release": "node scripts/test-semantic-release.js",
"release:dry-run": "npx semantic-release --dry-run",
"// Build Rule Enforcement Scripts": "",
"validate": "tsx scripts/build-validations.ts",
"validate:env": "tsx scripts/env-validation.ts",
"validate:security": "tsx scripts/security-check.ts",
"validate:all": "pnpm run validate && pnpm run lint && pnpm run validate:env && pnpm run validate:security",
"validate:commit": "tsx scripts/commit-validation.ts",
"quality:metrics": "tsx scripts/quality-metrics.ts",
"quality:report": "pnpm run quality:metrics && echo 'Quality metrics saved to quality-metrics.json'",
"pre-commit": "lint-staged",
"pre-push": "pnpm run validate:commit && pnpm run validate:env && pnpm run validate && pnpm run test:ci",
"check:all": "pnpm run lint && pnpm run format --check && pnpm run validate && pnpm run validate:commit"
},
"files": [
"dist",
"!dist/**/*.test.*",
"!dist/**/*.spec.*",
"!dist/**/*.map",
"docs/assets/dashboards/*.json",
"docs-site/mcp-server/*.js",
"docs-site/mcp-server/*.d.ts",
"docs-site/static/search-index.json",
"scripts/observability/*",
"README.md",
"CHANGELOG.md",
"LICENSE"
],
"sideEffects": [
"**/*.css"
],
"svelte": "./dist/index.js",
"types": "./dist/index.d.ts",
"type": "module",
"main": "./dist/index.js",
"bin": {
"neurolink": "./dist/cli/index.js"
},
"exports": {
".": {
"types": "./dist/index.d.ts",
"svelte": "./dist/index.js",
"import": "./dist/index.js",
"default": "./dist/index.js"
},
"./client": {
"types": "./dist/client/index.d.ts",
"import": "./dist/client/index.js",
"default": "./dist/client/index.js"
},
"./types": {
"types": "./dist/types/sdk.d.ts",
"import": "./dist/types/sdk.js",
"default": "./dist/types/sdk.js"
},
"./package.json": "./package.json",
"./cli": {
"types": "./dist/cli/index.d.ts",
"import": "./dist/cli/index.js",
"default": "./dist/cli/index.js"
},
"./server": {
"types": "./dist/server/index.d.ts",
"import": "./dist/server/index.js",
"default": "./dist/server/index.js"
},
"./browser": {
"types": "./dist/index.d.ts",
"import": "./dist/browser/neurolink.min.js",
"default": "./dist/browser/neurolink.min.js"
}
},
"dependencies": {
"@ai-sdk/anthropic": "^3.0.50",
"@ai-sdk/azure": "^3.0.38",
"@ai-sdk/mistral": "^3.0.21",
"@ai-sdk/openai": "^3.0.37",
"@ai-sdk/openai-compatible": "^2.0.41",
"@ai-sdk/provider": "^3.0.8",
"@anthropic-ai/vertex-sdk": "^0.16.0",
"@aws-sdk/client-bedrock": "^3.1000.0",
"@aws-sdk/client-bedrock-runtime": "^3.1000.0",
"@aws-sdk/client-sagemaker-runtime": "^3.1000.0",
"@aws-sdk/credential-provider-node": "^3.886.0",
"@aws-sdk/types": "^3.862.0",
"@google-cloud/text-to-speech": "^6.4.0",
"@google-cloud/vertexai": "^1.10.0",
"@google/genai": "^1.43.0",
"@huggingface/inference": "^4.13.14",
"@modelcontextprotocol/sdk": "^1.27.1",
"@openrouter/ai-sdk-provider": "^2.2.3",
"@opentelemetry/api-logs": "^0.214.0",
"@opentelemetry/context-async-hooks": "^2.6.1",
"@opentelemetry/core": "^2.6.0",
"@opentelemetry/exporter-logs-otlp-http": "^0.214.0",
"@opentelemetry/exporter-metrics-otlp-http": "^0.214.0",
"@opentelemetry/exporter-trace-otlp-http": "^0.214.0",
"@opentelemetry/resources": "^2.6.0",
"@opentelemetry/sdk-logs": "^0.214.0",
"@opentelemetry/sdk-metrics": "^2.6.1",
"@opentelemetry/sdk-trace-base": "^2.6.0",
"@opentelemetry/semantic-conventions": "^1.40.0",
"adm-zip": "^0.5.16",
"ai": "^6.0.134",
"chalk": "^5.6.2",
"croner": "^9.1.0",
"csv-parser": "^3.2.0",
"dotenv": "^17.3.1",
"google-auth-library": "^10.6.1",
"hono": "^4.12.3",
"inquirer": "^13.3.0",
"jose": "^6.1.3",
"json-schema-to-zod": "^2.7.0",
"nanoid": "^5.1.5",
"ollama-ai-provider": "^1.2.0",
"open": "^11.0.0",
"ora": "^9.3.0",
"p-limit": "^7.3.0",
"redis": "^5.11.0",
"tar-stream": "^3.1.8",
"undici": ">=7.22.0",
"ws": "^8.19.0",
"yargs": "^18.0.0",
"zod": "^4.3.6",
"zod-to-json-schema": "^3.25.1"
},
"peerDependencies": {
"@juspay/hippocampus": ">=0.1.4",
"@opentelemetry/api": "^1.9.0",
"@opentelemetry/sdk-trace-node": "^2.0.0",
"react": ">=18.0.0",
"react-dom": ">=18.0.0"
},
"peerDependenciesMeta": {
"@juspay/hippocampus": {
"optional": true
},
"react": {
"optional": true
},
"react-dom": {
"optional": true
}
},
"optionalDependencies": {
"@aws-sdk/client-sagemaker": "^3.1000.0",
"@fastify/cors": "^11.2.0",
"@fastify/rate-limit": "^10.3.0",
"@hono/node-server": "^1.19.9",
"@koa/cors": "^5.0.0",
"@koa/router": "^15.3.1",
"@langfuse/otel": "^5.0.1",
"@picovoice/cobra-node": "^3.0.2",
"bullmq": "^5.52.2",
"cors": "^2.8.5",
"exceljs": "^4.4.0",
"express": "^5.1.0",
"express-rate-limit": "^8.2.1",
"fastify": "^5.7.2",
"ffmpeg-static": "^5.3.0",
"fluent-ffmpeg": "^2.1.3",
"koa": "^3.1.1",
"koa-bodyparser": "^4.4.1",
"mammoth": "^1.11.0",
"mediabunny": "^1.40.1",
"music-metadata": "^11.11.2",
"pdf-parse": "^2.4.5",
"pdf-to-img": "^5.0.0",
"pptxgenjs": "^4.0.1",
"sharp": "^0.34.5"
},
"devDependencies": {
"@actions/core": "^3.0.0",
"@actions/exec": "^3.0.0",
"@actions/github": "^9.0.0",
"@biomejs/biome": "^2.4.4",
"@changesets/changelog-github": "^0.6.0",
"@changesets/cli": "^2.29.8",
"@eslint/js": "^10.0.1",
"@opentelemetry/api": "^1.9.0",
"@opentelemetry/sdk-trace-base": "^2.6.0",
"@opentelemetry/sdk-trace-node": "^2.6.0",
"@semantic-release/changelog": "^6.0.3",
"@semantic-release/commit-analyzer": "^13.0.1",
"@semantic-release/git": "^10.0.1",
"@semantic-release/github": "^12.0.6",
"@semantic-release/npm": "^13.1.4",
"@semantic-release/release-notes-generator": "^14.1.0",
"@smithy/types": "^4.13.0",
"@sveltejs/adapter-auto": "^7.0.1",
"@sveltejs/kit": "^2.53.4",
"@sveltejs/package": "^2.5.7",
"@sveltejs/vite-plugin-svelte": "^7.0.0",
"@types/adm-zip": "^0.5.7",
"@types/cors": "^2.8.19",
"@types/express": "^5.0.6",
"@types/fluent-ffmpeg": "^2.1.28",
"@juspay/hippocampus": "^0.1.6",
"@types/inquirer": "^9.0.9",
"@types/js-yaml": "^4.0.9",
"@types/koa": "^3.0.1",
"@types/koa-bodyparser": "^4.3.13",
"@types/koa__cors": "^5.0.1",
"@types/node": "^25.3.3",
"@types/react": "^19.2.10",
"@types/tar-stream": "^3.1.4",
"@types/ws": "^8.18.1",
"@types/yargs": "^17.0.35",
"@typescript-eslint/eslint-plugin": "^8.57.2",
"@typescript-eslint/parser": "^8.57.2",
"@vercel/ncc": "^0.38.4",
"@vitest/coverage-v8": "^4.1.0",
"concurrently": "^9.2.1",
"conventional-changelog-conventionalcommits": "^9.1.0",
"esbuild": "^0.27.4",
"eslint": "^10.0.2",
"husky": "^9.1.7",
"js-yaml": "^4.1.1",
"lint-staged": "^16.3.0",
"playwright": "^1.58.2",
"prettier": "^3.8.1",
"publint": "^0.3.17",
"puppeteer": "^24.37.5",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"semantic-release": "^25.0.3",
"shell-quote": "^1.8.3",
"svelte": "^5.53.6",
"svelte-check": "^4.4.4",
"ts-morph": "^24.0.0",
"tslib": "^2.8.1",
"tsx": "^4.21.0",
"typedoc": "^0.28.17",
"typedoc-plugin-markdown": "^4.10.0",
"typescript": "^5.9.3",
"vite": "^8.0.1",
"vitest": "^4.1.0",
"why-is-node-running": "^3.2.2"
},
"keywords": [
"ai",
"llm",
"mcp",
"model-context-protocol",
"lighthouse",
"tool-orchestration",
"ai-platform",
"openai",
"anthropic",
"google",
"bedrock",
"vertex",
"azure",
"mistral",
"ollama",
"huggingface",
"litellm",
"openrouter",
"deepseek",
"nvidia-nim",
"lm-studio",
"llama-cpp",
"tts",
"stt",
"voice",
"realtime",
"elevenlabs",
"deepgram",
"whisper",
"azure-speech",
"rag",
"streaming",
"tools",
"neurolink",
"juspay",
"svelte",
"chatgpt",
"gpt-4",
"claude",
"gemini",
"gemini-3",
"ai-sdk",
"typescript",
"cli-tool",
"developer-tools",
"automation",
"machine-learning",
"artificial-intelligence",
"multi-provider",
"ai-agents",
"prompt-engineering",
"ai-workflow",
"universal-ai",
"ai-development",
"llm-integration"
],
"pnpm": {
"onlyBuiltDependencies": [
"esbuild",
"protobufjs",
"puppeteer",
"sqlite3",
"ffmpeg-static",
"sharp"
],
"overrides": {
"esbuild@<=0.24.2": ">=0.25.0",
"cookie@<0.7.0": ">=0.7.0",
"@eslint/plugin-kit@<0.3.4": ">=0.3.4",
"tmp@<=0.2.3": ">=0.2.4",
"axios@<1.13.5": ">=1.13.5",
"glob@>=10.3.7 <=11.0.3": ">=11.1.0",
"@semantic-release/npm": "^13.1.4",
"@opentelemetry/sdk-trace-base": "^2.6.0",
"@opentelemetry/sdk-trace-node": "^2.6.0",
"jws@<4.0.1": ">=4.0.1",
"tar@<7.5.8": ">=7.5.8",
"qs@<6.14.2": ">=6.14.2",
"minimatch@>=10.0.0 <10.2.3": ">=10.2.3",
"minimatch@>=9.0.0 <9.0.7": ">=9.0.7",
"typedoc>minimatch": ">=10.2.3",
"minimatch@>=5.0.0 <5.1.8": ">=5.1.8",
"minimatch@>=3.0.0 <3.1.4": ">=3.1.4",
"fast-xml-parser@>=5.0.0 <5.3.8": ">=5.3.8",
"lodash@<4.17.23": ">=4.17.23",
"lodash-es@<4.17.23": ">=4.17.23",
"undici@>=7.0.0 <7.22.0": ">=7.22.0",
"undici@>=6.0.0 <6.23.0": ">=6.23.0",
"undici@<5.29.0": ">=5.29.0",
"js-yaml@>=4.0.0 <4.1.1": ">=4.1.1",
"js-yaml@>=3.0.0 <3.14.2": ">=3.14.2",
"markdown-it@<14.1.1": ">=14.1.1",
"ajv@>=8.0.0 <8.18.0": ">=8.18.0",
"@xmldom/xmldom@<0.8.12": ">=0.8.12",
"rollup@>=4.0.0 <4.59.0": ">=4.59.0"
}
},
"os": [
"darwin",
"linux",
"win32"
],
"prettier": {
"tabWidth": 2,
"useTabs": false,
"proseWrap": "preserve"
},
"lint-staged": {
"src/**/*.{ts,tsx}": [
"eslint --fix --max-warnings=50",
"prettier --write"
],
"test/**/*.{ts,tsx}": [
"eslint --fix --max-warnings=0",
"prettier --write"
],
"*.{json,md}": [
"prettier --write"
]
}
}