{"_id":"@ai4paper/ipaper","_rev":"7-0b14df3a665f09e89a25fa907733fbeb","name":"@ai4paper/ipaper","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@ai4paper/ipaper","version":"0.1.0","_id":"@ai4paper/ipaper@0.1.0","maintainers":[{"name":"isomoes","email":"jiahaoxiang2000@gmail.com"}],"bin":{"ipaper":"bin/cli.js"},"dist":{"shasum":"49fbe12fdd4da6227598d5cb4802c7f23cf71f83","tarball":"https://registry.npmjs.org/@ai4paper/ipaper/-/ipaper-0.1.0.tgz","fileCount":165,"integrity":"sha512-MDO9EhuNd1O2ptguXXcWdZ3qhB9wTyYwZkbVZIFWQUyJKPYRu6yyRQgNHLT5d0UcBVf44+qoiuBiDCF2yZyp4A==","signatures":[{"sig":"MEQCIH2ckf88VwBqlXDVJ7VczanoM/vviMqriLC8/tmIOUihAiBgh+GdtnH0fLLEyaiEKqHnfqUxjEfkHj+p+qtJKVUP/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23642364},"main":"./server/index.js","type":"module","types":"./server/index.d.ts","gitHead":"e4a259155bedb98c8194a6a9ada7790861abb9a6","private":false,"scripts":{"dev":"bun run build:watch","lint":"eslint \"./src/**/*.{ts,tsx}\" --config ../../eslint.config.js","build":"vite build","start":"node bin/cli.js serve","dev:server":"bun server/index.js --port ${IPAPER_PORT:-3001}","type-check":"tsc --noEmit","build:watch":"vite build --watch","dev:server:watch":"nodemon --watch server --ext js --exec \"bun server/index.js --port ${IPAPER_PORT:-3001}\""},"_npmUser":{"name":"isomoes","email":"jiahaoxiang2000@gmail.com"},"_npmVersion":"11.6.2","description":"[![GitHub stars](https://img.shields.io/github/stars/ai4paper/ipaper?style=flat&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YxZWNlYyIgdmlld0JveD0iMCAwIDI1NiAyNTYiPj","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ws":"^8.18.3","clsx":"^2.1.1","cmdk":"^1.1.1","jose":"^6.1.3","yaml":"^2.8.1","luxon":"^3.5.0","react":"^19.1.1","openai":"^4.79.0","sonner":"^2.0.7","adm-zip":"^0.5.16","bun-pty":"^0.4.5","express":"^5.1.0","zustand":"^5.0.8","node-pty":"1.2.0-beta.12","web-push":"^3.6.7","@ibm/plex":"^6.4.1","react-dom":"^19.1.1","remark-gfm":"^4.0.1","simple-git":"^3.28.0","cron-parser":"^4.9.0","ghostty-web":"0.3.0","next-themes":"^0.4.6","jsonc-parser":"^3.3.1","@octokit/rest":"^22.0.1","@clack/prompts":"^1.1.0","react-markdown":"^10.1.0","tailwind-merge":"^3.3.1","qrcode-terminal":"^0.12.0","@opencode-ai/sdk":"^1.4.6","@remixicon/react":"^4.7.0","reflect-metadata":"^0.2.2","@codemirror/lang-go":"^6.0.1","strip-json-comments":"^5.0.3","@codemirror/lang-cpp":"^6.0.3","@radix-ui/react-slot":"^1.2.3","http-proxy-middleware":"^3.0.5","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-toggle":"^1.1.10","@simplewebauthn/server":"13.3.0","@radix-ui/react-tooltip":"^1.2.8","@simplewebauthn/browser":"13.3.0","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^15.6.6","@fontsource/ibm-plex-mono":"^5.2.7","@fontsource/ibm-plex-sans":"^5.1.1","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.1.16","@types/react-syntax-highlighter":"^15.5.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","cors":"^2.8.5","vite":"^7.1.2","eslint":"^9.33.0","globals":"^16.3.0","nodemon":"^3.1.7","cross-env":"^7.0.3","@eslint/js":"^9.33.0","typescript":"~5.8.3","@types/node":"^24.3.1","tailwindcss":"^4.0.0","@types/react":"^19.1.10","autoprefixer":"^10.4.21","concurrently":"^9.2.1","@types/adm-zip":"^0.5.7","tw-animate-css":"^1.3.8","workbox-window":"^7.4.0","vite-plugin-pwa":"^1.0.3","@types/react-dom":"^19.1.7","typescript-eslint":"^8.39.1","@tailwindcss/postcss":"^4.0.0","@vitejs/plugin-react":"^5.0.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"_npmOperationalInternal":{"tmp":"tmp/ipaper_0.1.0_1776476640780_0.11350064681865168","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@ai4paper/ipaper","version":"0.1.2","license":"MIT","_id":"@ai4paper/ipaper@0.1.2","maintainers":[{"name":"isomoes","email":"jiahaoxiang2000@gmail.com"}],"homepage":"https://github.com/ai4paper/ipaper","bugs":{"url":"https://github.com/ai4paper/ipaper/issues"},"bin":{"ipaper":"bin/cli.js"},"dist":{"shasum":"53d00e4313b27e540a1ba1ed1afbfbca11c3f04b","tarball":"https://registry.npmjs.org/@ai4paper/ipaper/-/ipaper-0.1.2.tgz","fileCount":165,"integrity":"sha512-9Y7QBwXbVWTVT2mUt80NYB09jDEZr1LuQDE/zZjv5S5L9I5+GaGILFDK8X5sUd60aOb+b2aKjJMq1kLhgGfaEg==","signatures":[{"sig":"MEUCIQC/kMcye/SJ9a5Nbwn8aM2r2zkzyiUmgRuDGmZgoefBigIgJaF0znSxdhFbjMw67Ui3TUwZ05OzRtCRO0KUWkcK73Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai4paper%2fipaper@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":23642612},"main":"./server/index.js","type":"module","_from":"file:dist/ai4paper-ipaper-0.1.2.tgz","types":"./server/index.d.ts","private":false,"scripts":{"dev":"bun run build:watch","lint":"eslint \"./src/**/*.{ts,tsx}\" --config ../../eslint.config.js","build":"vite build","start":"node bin/cli.js serve","dev:server":"bun server/index.js --port ${IPAPER_PORT:-3001}","type-check":"tsc --noEmit","build:watch":"vite build --watch","dev:server:watch":"nodemon --watch server --ext js --exec \"bun server/index.js --port ${IPAPER_PORT:-3001}\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bb6961f7-992d-4d2f-8b5c-9324aadf7e28"}},"_resolved":"/home/runner/work/ipaper/ipaper/dist/ai4paper-ipaper-0.1.2.tgz","_integrity":"sha512-9Y7QBwXbVWTVT2mUt80NYB09jDEZr1LuQDE/zZjv5S5L9I5+GaGILFDK8X5sUd60aOb+b2aKjJMq1kLhgGfaEg==","repository":{"url":"git+https://github.com/ai4paper/ipaper.git","type":"git","directory":"packages/web"},"_npmVersion":"11.11.0","description":"IPaper web app and CLI package","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ws":"^8.18.3","clsx":"^2.1.1","cmdk":"^1.1.1","jose":"^6.1.3","yaml":"^2.8.1","luxon":"^3.5.0","react":"^19.1.1","openai":"^4.79.0","sonner":"^2.0.7","adm-zip":"^0.5.16","bun-pty":"^0.4.5","express":"^5.1.0","zustand":"^5.0.8","node-pty":"1.2.0-beta.12","web-push":"^3.6.7","@ibm/plex":"^6.4.1","react-dom":"^19.1.1","remark-gfm":"^4.0.1","simple-git":"^3.28.0","cron-parser":"^4.9.0","ghostty-web":"0.3.0","next-themes":"^0.4.6","jsonc-parser":"^3.3.1","@octokit/rest":"^22.0.1","@clack/prompts":"^1.1.0","react-markdown":"^10.1.0","tailwind-merge":"^3.3.1","qrcode-terminal":"^0.12.0","@opencode-ai/sdk":"^1.4.6","@remixicon/react":"^4.7.0","reflect-metadata":"^0.2.2","@codemirror/lang-go":"^6.0.1","strip-json-comments":"^5.0.3","@codemirror/lang-cpp":"^6.0.3","@radix-ui/react-slot":"^1.2.3","http-proxy-middleware":"^3.0.5","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-toggle":"^1.1.10","@simplewebauthn/server":"13.3.0","@radix-ui/react-tooltip":"^1.2.8","@simplewebauthn/browser":"13.3.0","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^15.6.6","@fontsource/ibm-plex-mono":"^5.2.7","@fontsource/ibm-plex-sans":"^5.1.1","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.1.16","@types/react-syntax-highlighter":"^15.5.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","cors":"^2.8.5","vite":"^7.1.2","eslint":"^9.33.0","globals":"^16.3.0","nodemon":"^3.1.7","cross-env":"^7.0.3","@eslint/js":"^9.33.0","typescript":"~5.8.3","@types/node":"^24.3.1","tailwindcss":"^4.0.0","@types/react":"^19.1.10","autoprefixer":"^10.4.21","concurrently":"^9.2.1","@types/adm-zip":"^0.5.7","tw-animate-css":"^1.3.8","workbox-window":"^7.4.0","vite-plugin-pwa":"^1.0.3","@types/react-dom":"^19.1.7","typescript-eslint":"^8.39.1","@tailwindcss/postcss":"^4.0.0","@vitejs/plugin-react":"^5.0.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"_npmOperationalInternal":{"tmp":"tmp/ipaper_0.1.2_1776483886212_0.6390470304571696","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@ai4paper/ipaper","version":"0.1.3","license":"MIT","_id":"@ai4paper/ipaper@0.1.3","maintainers":[{"name":"isomoes","email":"jiahaoxiang2000@gmail.com"}],"homepage":"https://github.com/ai4paper/ipaper","bugs":{"url":"https://github.com/ai4paper/ipaper/issues"},"bin":{"ipaper":"bin/cli.js"},"dist":{"shasum":"7060a1b24c3e40cebbcedc7cf447f93c90a0d7f6","tarball":"https://registry.npmjs.org/@ai4paper/ipaper/-/ipaper-0.1.3.tgz","fileCount":165,"integrity":"sha512-lS45k/l32/00yNRN/Bi6bAcX6P1Q+A3xafTLtSU66Dp0sA5p+mpD5n3qpTzxzXFhzmG4L51rYLiKgzYGXR4QAA==","signatures":[{"sig":"MEUCICwJqF3zYKedIGnIjMlzjpJEzP+1ish6ebq070tuam5YAiEAxng0nDIha8IFACZ7zdecafHqMscgb56Sxe3szfE4sik=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai4paper%2fipaper@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":23632540},"main":"./server/index.js","type":"module","_from":"file:dist/ai4paper-ipaper-0.1.3.tgz","types":"./server/index.d.ts","private":false,"scripts":{"dev":"bun run build:watch","lint":"eslint \"./src/**/*.{ts,tsx}\" --config ../../eslint.config.js","build":"vite build","start":"node bin/cli.js serve","dev:server":"bun server/index.js --port ${IPAPER_PORT:-3001}","type-check":"tsc --noEmit","build:watch":"vite build --watch","dev:server:watch":"nodemon --watch server --ext js --exec \"bun server/index.js --port ${IPAPER_PORT:-3001}\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bb6961f7-992d-4d2f-8b5c-9324aadf7e28"}},"_resolved":"/home/runner/work/ipaper/ipaper/dist/ai4paper-ipaper-0.1.3.tgz","_integrity":"sha512-lS45k/l32/00yNRN/Bi6bAcX6P1Q+A3xafTLtSU66Dp0sA5p+mpD5n3qpTzxzXFhzmG4L51rYLiKgzYGXR4QAA==","repository":{"url":"git+https://github.com/ai4paper/ipaper.git","type":"git","directory":"packages/web"},"_npmVersion":"11.11.0","description":"IPaper web app and CLI package","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ws":"^8.18.3","clsx":"^2.1.1","cmdk":"^1.1.1","jose":"^6.1.3","yaml":"^2.8.1","luxon":"^3.5.0","react":"^19.1.1","openai":"^4.79.0","sonner":"^2.0.7","adm-zip":"^0.5.16","bun-pty":"^0.4.5","express":"^5.1.0","zustand":"^5.0.8","node-pty":"1.2.0-beta.12","web-push":"^3.6.7","@ibm/plex":"^6.4.1","react-dom":"^19.1.1","remark-gfm":"^4.0.1","simple-git":"^3.28.0","cron-parser":"^4.9.0","ghostty-web":"0.3.0","next-themes":"^0.4.6","jsonc-parser":"^3.3.1","@octokit/rest":"^22.0.1","@clack/prompts":"^1.1.0","react-markdown":"^10.1.0","tailwind-merge":"^3.3.1","qrcode-terminal":"^0.12.0","@opencode-ai/sdk":"^1.4.6","@remixicon/react":"^4.7.0","reflect-metadata":"^0.2.2","@codemirror/lang-go":"^6.0.1","strip-json-comments":"^5.0.3","@codemirror/lang-cpp":"^6.0.3","@radix-ui/react-slot":"^1.2.3","http-proxy-middleware":"^3.0.5","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-toggle":"^1.1.10","@simplewebauthn/server":"13.3.0","@radix-ui/react-tooltip":"^1.2.8","@simplewebauthn/browser":"13.3.0","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^15.6.6","@fontsource/ibm-plex-mono":"^5.2.7","@fontsource/ibm-plex-sans":"^5.1.1","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.1.16","@types/react-syntax-highlighter":"^15.5.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","cors":"^2.8.5","vite":"^7.1.2","eslint":"^9.33.0","globals":"^16.3.0","nodemon":"^3.1.7","cross-env":"^7.0.3","@eslint/js":"^9.33.0","typescript":"~5.8.3","@types/node":"^24.3.1","tailwindcss":"^4.0.0","@types/react":"^19.1.10","autoprefixer":"^10.4.21","concurrently":"^9.2.1","@types/adm-zip":"^0.5.7","tw-animate-css":"^1.3.8","workbox-window":"^7.4.0","vite-plugin-pwa":"^1.0.3","@types/react-dom":"^19.1.7","typescript-eslint":"^8.39.1","@tailwindcss/postcss":"^4.0.0","@vitejs/plugin-react":"^5.0.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"_npmOperationalInternal":{"tmp":"tmp/ipaper_0.1.3_1776679359520_0.3671178363481633","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@ai4paper/ipaper","version":"0.1.4","license":"MIT","_id":"@ai4paper/ipaper@0.1.4","maintainers":[{"name":"isomoes","email":"jiahaoxiang2000@gmail.com"}],"homepage":"https://github.com/ai4paper/ipaper","bugs":{"url":"https://github.com/ai4paper/ipaper/issues"},"bin":{"ipaper":"bin/cli.js"},"dist":{"shasum":"9729c99744df6a5f92e1e41a5edbdcf76ee3982f","tarball":"https://registry.npmjs.org/@ai4paper/ipaper/-/ipaper-0.1.4.tgz","fileCount":147,"integrity":"sha512-x5zKkf8zvUlMGzfrZOEjhpvDQZEcfDCQB5enHG9pz767skFiZRznopOT+Y6IopZljzN1FNhnq12Snr7ChBP/7w==","signatures":[{"sig":"MEYCIQDlUgJyLT/dWHUZCUMb386LaMQcvFr0kKphoRvbxwqLzQIhAL6V7XTRkw8fVixeTw0uaL6DZzJRfSit5WaHH/5B2eYX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai4paper%2fipaper@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":23265566},"main":"./server/index.js","type":"module","_from":"file:dist/ai4paper-ipaper-0.1.4.tgz","types":"./server/index.d.ts","private":false,"scripts":{"dev":"bun run build:watch","lint":"eslint \"./src/**/*.{ts,tsx}\" --config ../../eslint.config.js","build":"vite build","start":"node bin/cli.js serve","dev:server":"bun server/index.js --port ${IPAPER_PORT:-3001}","type-check":"tsc --noEmit","build:watch":"vite build --watch","dev:server:watch":"nodemon --watch server --ext js --exec \"bun server/index.js --port ${IPAPER_PORT:-3001}\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bb6961f7-992d-4d2f-8b5c-9324aadf7e28"}},"_resolved":"/home/runner/work/ipaper/ipaper/dist/ai4paper-ipaper-0.1.4.tgz","_integrity":"sha512-x5zKkf8zvUlMGzfrZOEjhpvDQZEcfDCQB5enHG9pz767skFiZRznopOT+Y6IopZljzN1FNhnq12Snr7ChBP/7w==","repository":{"url":"git+https://github.com/ai4paper/ipaper.git","type":"git","directory":"packages/web"},"_npmVersion":"11.11.0","description":"IPaper web app and CLI package","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ws":"^8.18.3","clsx":"^2.1.1","cmdk":"^1.1.1","jose":"^6.1.3","yaml":"^2.8.1","luxon":"^3.5.0","react":"^19.1.1","openai":"^4.79.0","sonner":"^2.0.7","adm-zip":"^0.5.16","bun-pty":"^0.4.5","express":"^5.1.0","zustand":"^5.0.8","node-pty":"1.2.0-beta.12","web-push":"^3.6.7","@ibm/plex":"^6.4.1","react-dom":"^19.1.1","remark-gfm":"^4.0.1","simple-git":"^3.28.0","cron-parser":"^4.9.0","ghostty-web":"0.3.0","next-themes":"^0.4.6","jsonc-parser":"^3.3.1","@octokit/rest":"^22.0.1","@clack/prompts":"^1.1.0","react-markdown":"^10.1.0","tailwind-merge":"^3.3.1","qrcode-terminal":"^0.12.0","@opencode-ai/sdk":"^1.4.6","@remixicon/react":"^4.7.0","reflect-metadata":"^0.2.2","@codemirror/lang-go":"^6.0.1","strip-json-comments":"^5.0.3","@codemirror/lang-cpp":"^6.0.3","@radix-ui/react-slot":"^1.2.3","http-proxy-middleware":"^3.0.5","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-toggle":"^1.1.10","@simplewebauthn/server":"13.3.0","@radix-ui/react-tooltip":"^1.2.8","@simplewebauthn/browser":"13.3.0","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^15.6.6","@fontsource/ibm-plex-mono":"^5.2.7","@fontsource/ibm-plex-sans":"^5.1.1","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.1.16","@types/react-syntax-highlighter":"^15.5.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","cors":"^2.8.5","vite":"^7.1.2","eslint":"^9.33.0","globals":"^16.3.0","nodemon":"^3.1.7","cross-env":"^7.0.3","@eslint/js":"^9.33.0","typescript":"~5.8.3","@types/node":"^24.3.1","tailwindcss":"^4.0.0","@types/react":"^19.1.10","autoprefixer":"^10.4.21","concurrently":"^9.2.1","@types/adm-zip":"^0.5.7","tw-animate-css":"^1.3.8","workbox-window":"^7.4.0","vite-plugin-pwa":"^1.0.3","@types/react-dom":"^19.1.7","typescript-eslint":"^8.39.1","@tailwindcss/postcss":"^4.0.0","@vitejs/plugin-react":"^5.0.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"_npmOperationalInternal":{"tmp":"tmp/ipaper_0.1.4_1777195428384_0.20085276168201083","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@ai4paper/ipaper","version":"0.1.5","license":"MIT","_id":"@ai4paper/ipaper@0.1.5","maintainers":[{"name":"isomoes","email":"jiahaoxiang2000@gmail.com"}],"homepage":"https://github.com/ai4paper/ipaper","bugs":{"url":"https://github.com/ai4paper/ipaper/issues"},"bin":{"ipaper":"bin/cli.js"},"dist":{"shasum":"c292e6b8d44b2a3ffd987028b7b199550a819a3b","tarball":"https://registry.npmjs.org/@ai4paper/ipaper/-/ipaper-0.1.5.tgz","fileCount":147,"integrity":"sha512-pIhXZt0P8YS7u9HRTmzXkC35Ik8Iib6emkiqhLoneepGVcbHFtozOWw4kOnb4r6S4fjwRwMP9Te23JqLwj45QA==","signatures":[{"sig":"MEUCIB9EnULyaWw1RTlDFJfWhXwJGjV5P8vKAvd8OsAis2jFAiEAiFGCiL8BOfCvtigPxiPQs+bKQU5qCHpbqlIhPAeSw5k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai4paper%2fipaper@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":23265910},"main":"./server/index.js","type":"module","_from":"file:dist/ai4paper-ipaper-0.1.5.tgz","types":"./server/index.d.ts","private":false,"scripts":{"dev":"bun run build:watch","lint":"eslint \"./src/**/*.{ts,tsx}\" --config ../../eslint.config.js","build":"vite build","start":"node bin/cli.js serve","dev:server":"bun server/index.js --port ${IPAPER_PORT:-3001}","type-check":"tsc --noEmit","build:watch":"vite build --watch","dev:server:watch":"nodemon --watch server --ext js --exec \"bun server/index.js --port ${IPAPER_PORT:-3001}\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bb6961f7-992d-4d2f-8b5c-9324aadf7e28"}},"_resolved":"/home/runner/work/ipaper/ipaper/dist/ai4paper-ipaper-0.1.5.tgz","_integrity":"sha512-pIhXZt0P8YS7u9HRTmzXkC35Ik8Iib6emkiqhLoneepGVcbHFtozOWw4kOnb4r6S4fjwRwMP9Te23JqLwj45QA==","repository":{"url":"git+https://github.com/ai4paper/ipaper.git","type":"git","directory":"packages/web"},"_npmVersion":"11.11.0","description":"IPaper web app and CLI package","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ws":"^8.18.3","clsx":"^2.1.1","cmdk":"^1.1.1","jose":"^6.1.3","yaml":"^2.8.1","luxon":"^3.5.0","react":"^19.1.1","openai":"^4.79.0","sonner":"^2.0.7","adm-zip":"^0.5.16","bun-pty":"^0.4.5","express":"^5.1.0","zustand":"^5.0.8","node-pty":"1.2.0-beta.12","web-push":"^3.6.7","@ibm/plex":"^6.4.1","react-dom":"^19.1.1","remark-gfm":"^4.0.1","simple-git":"^3.28.0","cron-parser":"^4.9.0","ghostty-web":"0.3.0","next-themes":"^0.4.6","jsonc-parser":"^3.3.1","@octokit/rest":"^22.0.1","@clack/prompts":"^1.1.0","react-markdown":"^10.1.0","tailwind-merge":"^3.3.1","qrcode-terminal":"^0.12.0","@opencode-ai/sdk":"^1.4.6","@remixicon/react":"^4.7.0","reflect-metadata":"^0.2.2","@codemirror/lang-go":"^6.0.1","strip-json-comments":"^5.0.3","@codemirror/lang-cpp":"^6.0.3","@radix-ui/react-slot":"^1.2.3","http-proxy-middleware":"^3.0.5","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-toggle":"^1.1.10","@simplewebauthn/server":"13.3.0","@radix-ui/react-tooltip":"^1.2.8","@simplewebauthn/browser":"13.3.0","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^15.6.6","@fontsource/ibm-plex-mono":"^5.2.7","@fontsource/ibm-plex-sans":"^5.1.1","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.1.16","@types/react-syntax-highlighter":"^15.5.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","cors":"^2.8.5","vite":"^7.1.2","eslint":"^9.33.0","globals":"^16.3.0","nodemon":"^3.1.7","cross-env":"^7.0.3","@eslint/js":"^9.33.0","typescript":"~5.8.3","@types/node":"^24.3.1","tailwindcss":"^4.0.0","@types/react":"^19.1.10","autoprefixer":"^10.4.21","concurrently":"^9.2.1","@types/adm-zip":"^0.5.7","tw-animate-css":"^1.3.8","workbox-window":"^7.4.0","vite-plugin-pwa":"^1.0.3","@types/react-dom":"^19.1.7","typescript-eslint":"^8.39.1","@tailwindcss/postcss":"^4.0.0","@vitejs/plugin-react":"^5.0.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"_npmOperationalInternal":{"tmp":"tmp/ipaper_0.1.5_1777381558121_0.14488117545528612","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@ai4paper/ipaper","version":"0.1.6","license":"MIT","_id":"@ai4paper/ipaper@0.1.6","maintainers":[{"name":"isomoes","email":"jiahaoxiang2000@gmail.com"}],"homepage":"https://github.com/ai4paper/ipaper","bugs":{"url":"https://github.com/ai4paper/ipaper/issues"},"bin":{"ipaper":"bin/cli.js"},"dist":{"shasum":"9276c94dfd4266d063400b5ba7da9a4bfe7ba097","tarball":"https://registry.npmjs.org/@ai4paper/ipaper/-/ipaper-0.1.6.tgz","fileCount":147,"integrity":"sha512-e07VCKoI9XnptZho1O74Zw6BgvHyrl8v4mI7OnxFfOjW/5VINSojf3fJ4aS61fQmfoU+OwqD/gjBYlk+eJn4iA==","signatures":[{"sig":"MEQCICpJDuK8yp7Qc9PgdiM94ZTSxH65HYA6xIRAENWaSl8ZAiBR01XNHvVet6CXdl1vp0FnomAOJnll6mx0OG4c5mHEFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai4paper%2fipaper@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":23266368},"main":"./server/index.js","type":"module","_from":"file:dist/ai4paper-ipaper-0.1.6.tgz","types":"./server/index.d.ts","private":false,"scripts":{"dev":"bun run build:watch","lint":"eslint \"./src/**/*.{ts,tsx}\" --config ../../eslint.config.js","build":"vite build","start":"node bin/cli.js serve","dev:server":"bun server/index.js --port ${IPAPER_PORT:-3001}","type-check":"tsc --noEmit","build:watch":"vite build --watch","dev:server:watch":"nodemon --watch server --ext js --exec \"bun server/index.js --port ${IPAPER_PORT:-3001}\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bb6961f7-992d-4d2f-8b5c-9324aadf7e28"}},"_resolved":"/home/runner/work/ipaper/ipaper/dist/ai4paper-ipaper-0.1.6.tgz","_integrity":"sha512-e07VCKoI9XnptZho1O74Zw6BgvHyrl8v4mI7OnxFfOjW/5VINSojf3fJ4aS61fQmfoU+OwqD/gjBYlk+eJn4iA==","repository":{"url":"git+https://github.com/ai4paper/ipaper.git","type":"git","directory":"packages/web"},"_npmVersion":"11.11.0","description":"IPaper web app and CLI package","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ws":"^8.18.3","clsx":"^2.1.1","cmdk":"^1.1.1","jose":"^6.1.3","yaml":"^2.8.1","luxon":"^3.5.0","react":"^19.1.1","openai":"^4.79.0","sonner":"^2.0.7","adm-zip":"^0.5.16","bun-pty":"^0.4.5","express":"^5.1.0","zustand":"^5.0.8","node-pty":"1.2.0-beta.12","web-push":"^3.6.7","@ibm/plex":"^6.4.1","react-dom":"^19.1.1","remark-gfm":"^4.0.1","simple-git":"^3.28.0","cron-parser":"^4.9.0","ghostty-web":"0.3.0","next-themes":"^0.4.6","jsonc-parser":"^3.3.1","@octokit/rest":"^22.0.1","@clack/prompts":"^1.1.0","react-markdown":"^10.1.0","tailwind-merge":"^3.3.1","qrcode-terminal":"^0.12.0","@opencode-ai/sdk":"^1.4.6","@remixicon/react":"^4.7.0","reflect-metadata":"^0.2.2","@codemirror/lang-go":"^6.0.1","strip-json-comments":"^5.0.3","@codemirror/lang-cpp":"^6.0.3","@radix-ui/react-slot":"^1.2.3","http-proxy-middleware":"^3.0.5","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-toggle":"^1.1.10","@simplewebauthn/server":"13.3.0","@radix-ui/react-tooltip":"^1.2.8","@simplewebauthn/browser":"13.3.0","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^15.6.6","@fontsource/ibm-plex-mono":"^5.2.7","@fontsource/ibm-plex-sans":"^5.1.1","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-dropdown-menu":"^2.1.16","@types/react-syntax-highlighter":"^15.5.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","cors":"^2.8.5","vite":"^7.1.2","eslint":"^9.33.0","globals":"^16.3.0","nodemon":"^3.1.7","cross-env":"^7.0.3","@eslint/js":"^9.33.0","typescript":"~5.8.3","@types/node":"^24.3.1","tailwindcss":"^4.0.0","@types/react":"^19.1.10","autoprefixer":"^10.4.21","concurrently":"^9.2.1","@types/adm-zip":"^0.5.7","tw-animate-css":"^1.3.8","workbox-window":"^7.4.0","vite-plugin-pwa":"^1.0.3","@types/react-dom":"^19.1.7","typescript-eslint":"^8.39.1","@tailwindcss/postcss":"^4.0.0","@vitejs/plugin-react":"^5.0.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"_npmOperationalInternal":{"tmp":"tmp/ipaper_0.1.6_1777471318880_0.29820139045552296","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ai4paper/ipaper","version":"0.2.0","description":"IPaper web app and CLI package","private":false,"type":"module","repository":{"type":"git","url":"git+https://github.com/ai4paper/ipaper.git","directory":"packages/web"},"homepage":"https://github.com/ai4paper/ipaper","bugs":{"url":"https://github.com/ai4paper/ipaper/issues"},"main":"./server/index.js","types":"./server/index.d.ts","bin":{"ipaper":"bin/cli.js"},"publishConfig":{"access":"public"},"license":"MIT","scripts":{"dev":"bun run build:watch","dev:server":"bun server/index.js --port ${IPAPER_PORT:-3001}","dev:server:watch":"nodemon --watch server --ext js --exec \"bun server/index.js --port ${IPAPER_PORT:-3001}\"","build":"vite build","build:watch":"vite build --watch","type-check":"tsc --noEmit","lint":"eslint \"./src/**/*.{ts,tsx}\" --config ../../eslint.config.js","start":"node bin/cli.js serve"},"dependencies":{"@clack/prompts":"^1.1.0","@codemirror/lang-cpp":"^6.0.3","@codemirror/lang-go":"^6.0.1","@fontsource/ibm-plex-mono":"^5.2.7","@fontsource/ibm-plex-sans":"^5.1.1","@ibm/plex":"^6.4.1","@octokit/rest":"^22.0.1","@opencode-ai/sdk":"^1.4.6","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-toggle":"^1.1.10","@radix-ui/react-tooltip":"^1.2.8","@remixicon/react":"^4.7.0","@simplewebauthn/browser":"13.3.0","@simplewebauthn/server":"13.3.0","@types/react-syntax-highlighter":"^15.5.13","adm-zip":"^0.5.16","bun-pty":"^0.4.5","class-variance-authority":"^0.7.1","clsx":"^2.1.1","cmdk":"^1.1.1","cron-parser":"^4.9.0","express":"^5.1.0","ghostty-web":"0.3.0","http-proxy-middleware":"^3.0.5","jose":"^6.1.3","jsonc-parser":"^3.3.1","luxon":"^3.5.0","next-themes":"^0.4.6","node-pty":"1.2.0-beta.12","openai":"^4.79.0","qrcode-terminal":"^0.12.0","react":"^19.1.1","react-dom":"^19.1.1","react-markdown":"^10.1.0","react-syntax-highlighter":"^15.6.6","reflect-metadata":"^0.2.2","remark-gfm":"^4.0.1","simple-git":"^3.28.0","sonner":"^2.0.7","strip-json-comments":"^5.0.3","tailwind-merge":"^3.3.1","web-push":"^3.6.7","ws":"^8.18.3","yaml":"^2.8.1","zustand":"^5.0.8"},"devDependencies":{"@eslint/js":"^9.33.0","@tailwindcss/postcss":"^4.0.0","@types/adm-zip":"^0.5.7","@types/node":"^24.3.1","@types/react":"^19.1.10","@types/react-dom":"^19.1.7","@vitejs/plugin-react":"^5.0.0","autoprefixer":"^10.4.21","concurrently":"^9.2.1","cors":"^2.8.5","cross-env":"^7.0.3","eslint":"^9.33.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20","globals":"^16.3.0","nodemon":"^3.1.7","tailwindcss":"^4.0.0","tsx":"^4.20.6","tw-animate-css":"^1.3.8","typescript":"~5.8.3","typescript-eslint":"^8.39.1","vite":"^7.1.2","vite-plugin-pwa":"^1.0.3","workbox-window":"^7.4.0"},"_id":"@ai4paper/ipaper@0.2.0","_integrity":"sha512-h9Goh0IDoUbNuw4lpFjIcRRzdtQPwtM6Ghyx8ZNDqtTEpBBorDyOFoM3Vkvo2Bht6Y1iCCjsEL3NnLUxCCM/Fg==","_resolved":"/home/runner/work/ipaper/ipaper/dist/ai4paper-ipaper-0.2.0.tgz","_from":"file:dist/ai4paper-ipaper-0.2.0.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-h9Goh0IDoUbNuw4lpFjIcRRzdtQPwtM6Ghyx8ZNDqtTEpBBorDyOFoM3Vkvo2Bht6Y1iCCjsEL3NnLUxCCM/Fg==","shasum":"0ebf972ed47b8efccccc5fc597fd5e00b24f34cb","tarball":"https://registry.npmjs.org/@ai4paper/ipaper/-/ipaper-0.2.0.tgz","fileCount":149,"unpackedSize":26423309,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai4paper%2fipaper@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDwKT0ELreD88GwMpRza1Jgqnsa8lNIrKUBciEhR36H8gIhAJ8GR8zeA9wueBNFOqeM6jLRiph0h6gZutyi7loXEGhx"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bb6961f7-992d-4d2f-8b5c-9324aadf7e28"}},"directories":{},"maintainers":[{"name":"isomoes","email":"jiahaoxiang2000@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ipaper_0.2.0_1777713719141_0.6607685900233111"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-18T01:44:00.705Z","modified":"2026-05-02T09:21:59.808Z","0.1.0":"2026-04-18T01:44:01.167Z","0.1.2":"2026-04-18T03:44:46.613Z","0.1.3":"2026-04-20T10:02:40.241Z","0.1.4":"2026-04-26T09:23:48.697Z","0.1.5":"2026-04-28T13:05:58.440Z","0.1.6":"2026-04-29T14:01:59.216Z","0.2.0":"2026-05-02T09:21:59.467Z"},"bugs":{"url":"https://github.com/ai4paper/ipaper/issues"},"license":"MIT","homepage":"https://github.com/ai4paper/ipaper","repository":{"type":"git","url":"git+https://github.com/ai4paper/ipaper.git","directory":"packages/web"},"description":"IPaper web app and CLI package","maintainers":[{"name":"isomoes","email":"jiahaoxiang2000@gmail.com"}],"readme":"# @ai4paper/ipaper\n\nRun [OpenCode](https://opencode.ai) in your browser. Install the CLI, open `localhost:3000`, done. Works on desktop browsers, tablets, and phones as a PWA.\n\nFull project overview, screenshots, and all features: [github.com/ai4paper/ipaper](https://github.com/ai4paper/ipaper)\n\n## Install\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/ai4paper/ipaper/main/scripts/install.sh | bash\n```\n\nOr install manually: `bun add -g @ai4paper/ipaper` (or npm, pnpm, yarn).\n\n> **Prerequisites:** [OpenCode CLI](https://opencode.ai) installed, Node.js 20+.\n\n## Usage\n\n```bash\nipaper                          # Start on port 3000\nipaper --port 8080              # Custom port\nipaper --ui-password secret     # Password-protect UI\nipaper logs                     # Follow latest instance logs\nOPENCODE_PORT=4096 OPENCODE_SKIP_START=true ipaper                    # Connect to external OpenCode server\nOPENCODE_HOST=https://myhost:4096 OPENCODE_SKIP_START=true ipaper  # Connect via custom host/HTTPS\nipaper stop                     # Stop server\nipaper update                   # Update to latest version\n```\n\n<details>\n<summary>Connect to external OpenCode server</summary>\n\n```bash\nOPENCODE_PORT=4096 OPENCODE_SKIP_START=true ipaper\nOPENCODE_HOST=https://myhost:4096 OPENCODE_SKIP_START=true ipaper\n```\n\n| Variable | Description |\n|----------|-------------|\n| `OPENCODE_HOST` | Full base URL of external server (overrides `OPENCODE_PORT`) |\n| `OPENCODE_PORT` | Port of external server |\n| `OPENCODE_SKIP_START` | Skip starting embedded OpenCode server |\n| `IPAPER_OPENCODE_HOSTNAME` | Bind hostname for managed OpenCode server (default: `127.0.0.1`, use `0.0.0.0` for LAN/remote access — trusted networks only) |\n\n</details>\n\n<details>\n<summary>Bind managed OpenCode to LAN / Tailscale</summary>\n\n```bash\nIPAPER_OPENCODE_HOSTNAME=0.0.0.0 ipaper --port 3000\n```\n\n**Security note:** binding to `0.0.0.0` exposes the server on all network interfaces — use only on trusted networks and protect with firewall rules or `--ui-password`.\n\n</details>\n\n**Optional env vars:**\n```yaml\nenvironment:\n  UI_PASSWORD: your_secure_password\n  IPAPER_TUNNEL_MODE: quick # quick | managed-remote | managed-local\n  IPAPER_TUNNEL_PROVIDER: cloudflare\n```\n\nFor `managed-remote` mode, also set:\n\n```yaml\nenvironment:\n  IPAPER_TUNNEL_MODE: managed-remote\n  IPAPER_TUNNEL_HOSTNAME: app.example.com\n  IPAPER_TUNNEL_TOKEN: <token>\n```\n\nFor `managed-local` mode, you can set:\n\n```yaml\nenvironment:\n  IPAPER_TUNNEL_MODE: managed-local\n  IPAPER_TUNNEL_CONFIG: /home/ipaper/.cloudflared/config.yml\n```\n\nManaged-local path note: `IPAPER_TUNNEL_CONFIG` must use a container path under `/home/ipaper/...`. If the config file references `credentials-file`, ensure that JSON path is also mounted and reachable inside the container.\n\n**Data directory:** mount `data/` for persistent storage. Ensure permissions:\n```bash\nmkdir -p data/ipaper data/opencode/share data/opencode/config data/ssh\nchown -R 1000:1000 data/\n```\n\n</details>\n\n<details>\n<summary>Background & daemon mode</summary>\n\n```bash\nipaper             # Runs in background by default\nipaper stop        # Stop background server\n```\n\n</details>\n\n<details>\n<summary>systemd service (VPN / LAN access)</summary>\n\nUse `--foreground` to keep the CLI process alive so systemd (or any other process manager) can track and restart it. Combine with `OPENCODE_HOST` to connect to an OpenCode instance running as a separate service.\n\n**`~/.config/systemd/user/opencode.service`**\n```ini\n[Unit]\nDescription=OpenCode Server\n\n[Service]\nType=simple\nExecStart=opencode serve --port 4095\nEnvironment=\"PATH=/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/YOU/.local/bin:/home/YOU/.npm-global/bin:/usr/local/bin:/usr/bin:/bin\"\nEnvironment=SSH_AUTH_SOCK=%t/ssh-agent.socket\nRestart=on-failure\nRestartSec=5\n\n[Install]\nWantedBy=default.target\n```\n\n> **Why set `PATH` and `SSH_AUTH_SOCK`?**\n> systemd user services start with a minimal environment — no shell profile is sourced.\n> Without an explicit `PATH`, OpenCode won't find tools installed via Homebrew, npm, or `~/.local/bin`.\n> Without `SSH_AUTH_SOCK`, git operations over SSH (push, pull, clone) will fail.\n> `%t` expands to `$XDG_RUNTIME_DIR` (e.g. `/run/user/1000`), where most SSH agents write their socket.\n\n**`~/.config/systemd/user/ipaper.service`**\n```ini\n[Unit]\nDescription=IPaper Web Server\nAfter=opencode.service\n\n[Service]\nType=simple\nExecStart=ipaper serve --port 3000 --host 0.0.0.0 --ui-password your-password --foreground\nEnvironment=\"OPENCODE_HOST=http://localhost:4095\"\nEnvironment=\"OPENCODE_SKIP_START=true\"\nRestart=on-failure\nRestartSec=5\n\n[Install]\nWantedBy=default.target\n```\n\n```bash\nsystemctl --user daemon-reload\nsystemctl --user enable --now opencode ipaper\n```\n\n`--host 0.0.0.0` is required to listen on all interfaces (the default is `127.0.0.1`). Use `--host <ip>` or `IPAPER_HOST=<ip>` to bind to a specific interface instead.\n\n</details>\n\n## What makes the web version special\n\n- **Mobile-first PWA** - optimized chat controls, keyboard-safe layouts, drag-to-reorder projects\n- **Background notifications** - know when your agent finishes, even from another tab\n- **Self-update** - update and restart from the UI, server settings stay intact\n- **Cross-tab tracking** - session activity stays in sync across browser tabs\n\n- Mobile-first experience: optimized chat controls, keyboard-safe layouts, and attachment-friendly UI\n- Background notifications plus reliable cross-tab session activity tracking\n- Built-in self-update + restart flow that keeps your server settings intact\n\n## License\n\nMIT\n","readmeFilename":"README.md"}