{"_id":"@artshin/rozenite-perf-recorder","_rev":"2-9f608a9d033f68357481248123d1dde3","name":"@artshin/rozenite-perf-recorder","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.1":{"name":"@artshin/rozenite-perf-recorder","version":"0.0.1","keywords":["rozenite","rozenite-plugin","react-native","devtools","profiler","performance"],"license":"MIT","_id":"@artshin/rozenite-perf-recorder@0.0.1","maintainers":[{"name":"artshin","email":"ashnkvch@gmail.com"}],"homepage":"https://github.com/artshin/perf-recorder/tree/main/packages/rozenite-perf-recorder#readme","bugs":{"url":"https://github.com/artshin/perf-recorder/issues"},"dist":{"shasum":"96aec6be11d593bbdfa2e7f402bdb4644bde5158","tarball":"https://registry.npmjs.org/@artshin/rozenite-perf-recorder/-/rozenite-perf-recorder-0.0.1.tgz","fileCount":10,"integrity":"sha512-oht4VFOgNPdKsdEw4/ORuHRS1Jg9BBN5dLAPtZQhR03Z/snlLgsZlIWqCYa0n43GGw4VeSf3g7dKMt+lN5Espw==","signatures":[{"sig":"MEQCIFBY3fBHsmixCDW9STEG7lwuNJeMS5e1YDONXnk3FkdTAiAobzaF/BTUMbAGAiOM6011jW2gq1aT49S+YwDt4HYYXQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288198},"main":"./dist/react-native/index.cjs","type":"module","types":"./dist/react-native/index.d.ts","module":"./dist/react-native/index.js","exports":{".":{"types":"./dist/react-native/index.d.ts","import":"./dist/react-native/index.js","require":"./dist/react-native/index.cjs"},"./package.json":"./package.json"},"gitHead":"724557a293eaee1fd50218f94abf18e916a2b008","scripts":{"dev":"rozenite dev","lint":"eslint src","build":"rozenite build","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"rozenite build"},"_npmUser":{"name":"artshin","email":"ashnkvch@gmail.com"},"repository":{"url":"git+https://github.com/artshin/perf-recorder.git","type":"git","directory":"packages/rozenite-perf-recorder"},"_npmVersion":"11.6.2","description":"Rozenite DevTools panel + agent tools for @artshin/expo-perf-recorder.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@rozenite/agent-bridge":"1.10.0","@rozenite/agent-shared":"1.10.0","@rozenite/plugin-bridge":"1.10.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.5","react":"19.2.0","eslint":"^9.36.0","prettier":"^3.4.2","rozenite":"1.10.0","react-dom":"19.2.0","typescript":"~5.8.3","@types/react":"~19.0.14","react-native":"0.85.3","react-native-web":"^0.20.0","@rozenite/vite-plugin":"1.10.0","eslint-config-universe":"^15.0.3"},"peerDependencies":{"expo":">=52.0.0","react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rozenite-perf-recorder_0.0.1_1779897427486_0.6300371019758821","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@artshin/rozenite-perf-recorder","version":"0.0.2","description":"Rozenite DevTools panel + agent tools for @artshin/expo-perf-recorder.","repository":{"type":"git","url":"git+https://github.com/artshin/perf-recorder.git","directory":"packages/rozenite-perf-recorder"},"homepage":"https://github.com/artshin/perf-recorder/tree/main/packages/rozenite-perf-recorder#readme","bugs":{"url":"https://github.com/artshin/perf-recorder/issues"},"type":"module","main":"./dist/react-native/index.cjs","module":"./dist/react-native/index.js","types":"./dist/react-native/index.d.ts","exports":{".":{"types":"./dist/react-native/index.d.ts","import":"./dist/react-native/index.js","require":"./dist/react-native/index.cjs"},"./package.json":"./package.json"},"scripts":{"build":"rozenite build","dev":"rozenite dev","lint":"eslint src","prepublishOnly":"rozenite build","typecheck":"tsc -p tsconfig.json --noEmit"},"keywords":["rozenite","rozenite-plugin","react-native","devtools","profiler","performance"],"license":"MIT","dependencies":{"@rozenite/agent-bridge":"1.10.0","@rozenite/agent-shared":"1.10.0","@rozenite/plugin-bridge":"1.10.0"},"peerDependencies":{"expo":">=52.0.0","react":">=18.0.0"},"devDependencies":{"@rozenite/vite-plugin":"1.10.0","@types/react":"~19.0.14","eslint":"^9.36.0","eslint-config-universe":"^15.0.3","prettier":"^3.4.2","react":"19.2.0","react-dom":"19.2.0","react-native":"0.85.3","react-native-web":"^0.20.0","rozenite":"1.10.0","typescript":"~5.8.3","vite":"^6.3.5"},"gitHead":"cb2bc81a8b94fbaf5d2ab0375aa8d4febee44e3d","_id":"@artshin/rozenite-perf-recorder@0.0.2","_nodeVersion":"24.15.0","_npmVersion":"11.15.0","dist":{"integrity":"sha512-KWJpgc/prvnFwLcvZ/tE630FArFirFfEUcNlfrQYn+omA4dEm7mI6AH8WnieXRv/QjTS2WtoGidVP62kDQwocQ==","shasum":"6112e80a32c50c62bedd194a1854a6eed4c47707","tarball":"https://registry.npmjs.org/@artshin/rozenite-perf-recorder/-/rozenite-perf-recorder-0.0.2.tgz","fileCount":10,"unpackedSize":288198,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@artshin%2frozenite-perf-recorder@0.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHSkE6JcgYWPlbMPmqWNNXxGl/+452nL3tiZaWc5pHFZAiBDq6TbRP547o796dmtfJ64mKRk1iFFuI/WBnF5eNZ2Yw=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7a612203-3b75-498f-bc8b-cd24e6bc7f95"}},"directories":{},"maintainers":[{"name":"artshin","email":"ashnkvch@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/rozenite-perf-recorder_0.0.2_1779899988606_0.09598127346003293"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-27T15:57:07.318Z","modified":"2026-05-27T16:39:49.002Z","0.0.1":"2026-05-27T15:57:07.663Z","0.0.2":"2026-05-27T16:39:48.752Z"},"bugs":{"url":"https://github.com/artshin/perf-recorder/issues"},"license":"MIT","homepage":"https://github.com/artshin/perf-recorder/tree/main/packages/rozenite-perf-recorder#readme","keywords":["rozenite","rozenite-plugin","react-native","devtools","profiler","performance"],"repository":{"type":"git","url":"git+https://github.com/artshin/perf-recorder.git","directory":"packages/rozenite-perf-recorder"},"description":"Rozenite DevTools panel + agent tools for @artshin/expo-perf-recorder.","maintainers":[{"name":"artshin","email":"ashnkvch@gmail.com"}],"readme":"# @artshin/rozenite-perf-recorder\n\n[![npm](https://img.shields.io/npm/v/@artshin/rozenite-perf-recorder)](https://www.npmjs.com/package/@artshin/rozenite-perf-recorder)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](../../LICENSE)\n\nA [Rozenite](https://rozenite.dev) React Native DevTools panel for the\n`perf-recorder` module. Shows live rolling stats (dumps, commits, React work,\ntop fibers) and a Clear button.\n\nIt is **fully standalone** — it talks to the native module by its registered\nname (`requireNativeModule(\"PerfRecorder\")`), so it imports nothing from the app.\n\n## Architecture\n\n| Side | File | Role |\n|------|------|------|\n| App (RN) | `src/react-native/usePerfRecorderDevTools.ts` | Polls native `getStats()` every 2s, pushes to panel; handles `request-stats` / `clear`. |\n| Panel (web) | `src/ui/perf-recorder.tsx` | Renders stats; sends `request-stats` / `clear`. |\n| Shared | `src/shared/messaging.ts` | Typed event map + stats types. |\n\nRequires the companion native module\n[`@artshin/expo-perf-recorder`](../expo-perf-recorder) installed in the app — the\npanel reaches its native side by name.\n\n## Install\n\n```bash\nnpm install --save-dev @artshin/rozenite-perf-recorder\n# or: yarn add -D @artshin/rozenite-perf-recorder\n```\n\nThe published `dist/` already contains the built panel + app entry; Rozenite\ndiscovers the plugin from the package's `rozenite.config.ts` automatically.\n\n## Wire into the app\n\nIn your app's root layout, alongside the other Rozenite hooks:\n\n```tsx\nimport { usePerfRecorderDevTools } from \"@artshin/rozenite-perf-recorder\";\n// ...\nusePerfRecorderDevTools();\n```\n\n## Run\n\n```bash\nWITH_ROZENITE=true yarn start     # from your app root\n```\n\nOpen React Native DevTools → **Perf Recorder** tab. Requires the perf-recorder\ncapture loop running (the `:8097` sink caveat from the module applies — the\nnative side only has stats once the capture loop ships dumps).\n\n## Query from Claude Code (agent tools)\n\nThe plugin registers Rozenite **agent tools**, so once it's running in the app\nyou can query the live native stats from the CLI / Claude Code — no adb, no\npanel open:\n\n```bash\n# from your app root\nSID=$(npx rozenite agent session create --json | jq -r '.sessionId')   # or note the id it prints\nnpx rozenite agent at-artshin__rozenite-perf-recorder call --tool get-stats --args '{}' --session \"$SID\"\nnpx rozenite agent at-artshin__rozenite-perf-recorder call --tool clear    --args '{}' --session \"$SID\"\nnpx rozenite agent session stop \"$SID\"\n```\n\nTools:\n- `get-stats` → `PerfStats` (dumpCount, totalCommits, totalReactCommitMs, topFibers, lastDump) from the live in-memory native counters.\n- `clear` → `{ cleared: boolean }` — reset ring buffer + rolling stats.\n- `list-dumps` → `PerfDumpListEntry[]` (newest first): `{ name, sizeBytes, ingestedAt }`.\n- `get-dump` ← `{ name }` → `PerfDumpSummary | null` — re-analyses one persisted dump off-thread (roots, commits, fiberRecords, reactCommitMs, wallSec, topFibers).\n\n```bash\nnpx rozenite agent at-artshin__rozenite-perf-recorder call --tool list-dumps --args '{}' --session \"$SID\"\nnpx rozenite agent at-artshin__rozenite-perf-recorder call --tool get-dump --args '{\"name\":\"dump-1779830426509.json\"}' --session \"$SID\"\n```\n\nThe domain token is the pluginId with `/`→`__` and `@`/dots normalized:\n`at-artshin__rozenite-perf-recorder`. Confirm with\n`npx rozenite agent domains --session \"$SID\"`.\n\n## Dev (panel hot reload)\n\n```bash\nyarn workspace @artshin/rozenite-perf-recorder dev\n```\n","readmeFilename":"README.md"}