{
  "name": "@twofive/snail-pi-web",
  "version": "0.9.19",
  "description": "Snail Pi Web (蜗牛派) workspace for the pi coding agent",
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/twofive1203/pi-agnet-web.git"
  },
  "bugs": {
    "url": "https://github.com/twofive1203/pi-agnet-web/issues"
  },
  "homepage": "https://github.com/twofive1203/pi-agnet-web#readme",
  "keywords": [
    "pi",
    "coding-agent",
    "webchat",
    "agent",
    "nextjs"
  ],
  "bin": {
    "spi": "bin/pi-web.js"
  },
  "files": [
    "bin",
    ".next",
    "!.next/cache",
    "!.next/dev",
    "!.next/diagnostics",
    "!.next/types",
    "!.next/trace",
    "!.next/trace-build",
    "!.next/**/*.js.map",
    "!.next/**/*.nft.json",
    "lib",
    "public",
    "scripts",
    "!scripts/smoke-*",
    "extensions/chrome-tab-debug",
    "ecosystem.config.cjs",
    "proxy.ts",
    "instrumentation.ts",
    "next.config.ts",
    "package.json"
  ],
  "scripts": {
    "postinstall": "node scripts/patch-pi-subagents-stale-ctx.mjs",
    "dev": "node bin/pi-web.js --dev",
    "build": "node scripts/build-next.js",
    "start": "node bin/pi-web.js",
    "lint": "eslint .",
    "test:server-auth": "npx --yes tsx@4.23.1 scripts/smoke-server-access-auth.ts && npx --yes tsx@4.23.1 scripts/smoke-server-access-proxy.ts",
    "test:server-auth:e2e": "node scripts/e2e-server-access-auth.mjs",
    "test:ui-theme": "npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts",
    "generate:browser-extension": "tsx scripts/generate-browser-extension-shared.ts",
    "test:browser": "npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts",
    "test:snflow": "npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts",
    "test:runtime": "npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts",
    "test:npm-package": "node scripts/check-npm-package-size.mjs",
    "test:open-folder": "npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts",
    "test:cwd-browse": "npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts",
    "test:subagent-observability": "npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts",
    "test:agent-stream": "node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs && npx --yes tsx@4.23.1 scripts/smoke-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-pi-session-lifecycle.ts",
    "test:chat-errors": "npx --yes tsx@4.23.1 scripts/smoke-chat-provider-errors.ts",
    "test:model-primary-candidates": "npx --yes tsx@4.23.1 scripts/smoke-model-primary-candidates.ts",
    "test:model-default": "npx --yes tsx@4.23.1 scripts/smoke-model-default.ts",
    "test:auth-oauth-packages": "node --import tsx scripts/smoke-auth-oauth-packages.mjs",
    "test:oauth-accounts-export": "node --import tsx scripts/smoke-oauth-accounts-export.mjs",
    "test:antigravity-usage": "node --import tsx scripts/smoke-antigravity-usage.mjs",
    "test:chat-draft": "npx --yes tsx@4.23.1 scripts/smoke-chat-draft.ts",
    "test:session-changes": "node --import tsx scripts/smoke-session-file-changes.mjs",
    "test:session-index": "npx --yes tsx@4.23.1 scripts/smoke-session-index.ts",
    "test:session-search": "npx --yes tsx@4.23.1 scripts/smoke-session-search.ts",
    "test:session-stats": "npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts",
    "test:session-transcript": "npx --yes tsx@4.23.1 scripts/smoke-session-transcript.ts",
    "test:session-performance": "npx --yes tsx@4.23.1 scripts/smoke-session-performance.ts",
    "test:task-observer": "npx --yes tsx@4.23.1 scripts/smoke-task-observer.ts",
    "test:desktop-observer-api": "npx --yes tsx@4.23.1 scripts/smoke-desktop-observer-api.ts",
    "test:desktop-deep-links": "npx --yes tsx@4.23.1 scripts/smoke-desktop-deep-links.ts",
    "test:desktop-connection": "npx --yes tsx@4.23.1 scripts/smoke-desktop-connection.ts",
    "test:desktop-contract": "npx --yes tsx@4.23.1 scripts/smoke-desktop-contract.ts",
    "test:desktop-package": "node scripts/smoke-desktop-package.mjs",
    "test:desktop-quick-session": "npx --yes tsx@4.23.1 scripts/smoke-desktop-quick-session.ts",
    "test:desktop-tauri-view-parity": "npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts",
    "test:desktop-tauri-package": "node scripts/smoke-desktop-tauri-package.mjs",
    "test:desktop-tauri-contract": "npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-contract.ts && npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts && node scripts/smoke-desktop-tauri-package.mjs && cargo test --manifest-path desktop-tauri/src-tauri/Cargo.toml",
    "desktop:tauri:build-ui": "node scripts/build-desktop-tauri.mjs",
    "desktop:tauri:dev": "npm --prefix desktop-tauri run dev",
    "desktop:tauri:build": "npm --prefix desktop-tauri run build",
    "desktop:build": "node scripts/build-desktop-pet.mjs",
    "desktop:preview": "node scripts/preview-desktop-pet-states.mjs",
    "desktop:dev": "node scripts/run-desktop-pet.mjs",
    "desktop:package": "node scripts/run-desktop-forge.mjs package",
    "desktop:make": "node scripts/run-desktop-forge.mjs make",
    "desktop:dev:rebuild": "node scripts/run-desktop-pet.mjs --rebuild",
    "test:scale-baseline": "npx --yes tsx@4.23.1 scripts/smoke-scale-baseline.ts",
    "test:usage": "npx --yes tsx@4.23.1 scripts/smoke-usage-timeline.ts && npx --yes tsx@4.23.1 scripts/smoke-usage-subagents.ts",
    "test:session-tabs": "npx --yes tsx@4.23.1 scripts/smoke-session-tab-coordination.ts",
    "test:git-diff": "npx --yes tsx@4.23.1 scripts/smoke-git-diff.ts",
    "test:git-workbench": "npx --yes tsx@4.23.1 scripts/smoke-git-workbench.ts",
    "test:git-stash": "npx --yes tsx@4.23.1 scripts/smoke-git-stash.ts",
    "test:git-repositories": "npx --yes tsx@4.23.1 scripts/smoke-git-repositories.ts",
    "test:file-search": "npx --yes tsx@4.23.1 scripts/smoke-workspace-file-search.ts",
    "test:file-upload": "npx --yes tsx@4.23.1 scripts/smoke-file-upload.ts",
    "test:file-editor-state": "npx --yes tsx@4.23.1 scripts/smoke-file-editor-state.ts",
    "test:file-preview-diff": "npx --yes tsx@4.23.1 scripts/smoke-file-preview-diff.ts",
    "test:git-client-lifecycle": "npx --yes tsx@4.23.1 scripts/smoke-git-client-lifecycle.ts",
    "test:git-read-performance": "npx --yes tsx@4.23.1 scripts/smoke-git-read-performance.ts",
    "test:quick-commands": "npx --yes tsx@4.23.1 scripts/smoke-quick-commands.ts",
    "test:project-knowledge": "npx --yes tsx@4.23.1 scripts/smoke-project-knowledge.ts",
    "test:api-protection": "node --import tsx scripts/smoke-grok-usage.mjs",
    "prepublishOnly": "npm run lint && tsc --noEmit && npm run test:server-auth && npm run test:runtime && npm run build && npm run test:bundled-extensions:production && npm run test:npm-package && npm run test:server-auth:e2e",
    "release:patch": "npm version patch && npm publish --access public",
    "release": "npm run release:patch",
    "test:automation": "node scripts/run-automation-smokes.cjs",
    "test:mcp": "npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts",
    "test:bundled-extensions": "npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts",
    "test:bundled-extensions:production": "node scripts/e2e-bundled-pi-extensions-production.mjs",
    "test:web-tools-config": "npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts",
    "test:vision": "npx --yes tsx@4.23.1 scripts/smoke-vision-resolver.ts",
    "test:i18n": "npx --yes tsx@4.23.1 scripts/check-i18n-keys.ts",
    "test:package-update-check": "npx --yes tsx@4.23.1 scripts/smoke-package-update-check.ts",
    "test:desktop-observer": "npm run test:task-observer && npm run test:desktop-observer-api && npm run test:desktop-deep-links && npm run test:desktop-connection && npm run test:desktop-contract && npm run test:desktop-package && npm run test:desktop-quick-session"
  },
  "dependencies": {
    "@earendil-works/pi-ai": "0.85.1",
    "@earendil-works/pi-coding-agent": "0.85.1",
    "@juicesharp/rpiv-web-tools": "2.3.1",
    "@lobehub/icons": "^5.6.0",
    "@lydell/node-pty": "^1.2.0-beta.12",
    "@monaco-editor/react": "^4.7.0",
    "@types/react-syntax-highlighter": "^15.5.13",
    "@xterm/addon-fit": "^0.11.0",
    "@xterm/xterm": "^6.0.0",
    "cron-parser": "^4.9.0",
    "diff": "^8.0.4",
    "jsonc-parser": "^3.3.1",
    "katex": "^0.16.47",
    "mammoth": "^1.12.0",
    "mermaid": "^11.14.0",
    "monaco-editor": "^0.55.1",
    "next": "16.2.12",
    "pi-ask-user": "0.13.1",
    "pi-manage-todo-list": "0.4.0",
    "pi-subagents": "0.40.0",
    "react": "^19.2.4",
    "react-dom": "^19.2.4",
    "react-markdown": "^10.1.0",
    "react-syntax-highlighter": "^16.1.1",
    "rehype-katex": "^7.0.1",
    "rehype-raw": "^7.0.0",
    "rehype-sanitize": "^6.0.0",
    "remark-gfm": "^4.0.1",
    "remark-math": "^6.0.0",
    "typebox": "1.3.7",
    "ws": "^8.18.3"
  },
  "devDependencies": {
    "@electron-forge/cli": "^7.11.2",
    "@electron-forge/maker-squirrel": "^7.11.2",
    "@tailwindcss/postcss": "^4.2.2",
    "@types/node": "^25",
    "@types/react": "^19",
    "@types/react-dom": "^19",
    "@types/ws": "^8.18.1",
    "electron": "^43.4.0",
    "esbuild": "^0.25.12",
    "eslint": "^9",
    "eslint-config-next": "16.2.12",
    "postcss": "^8",
    "tailwindcss": "^4.2.2",
    "tsx": "^4.23.12",
    "typescript": "^5.9.3"
  },
  "engines": {
    "node": ">=22.19.0"
  },
  "overrides": {
    "@earendil-works/pi-tui": "0.85.1",
    "@earendil-works/pi-agent-core": "0.85.1",
    "@earendil-works/pi-ai": "0.85.1"
  }
}
