{"_id":"@demo-0416/pi-trace","_rev":"5-c9495bb60c16a6777c46c45b4583b046","name":"@demo-0416/pi-trace","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.0":{"name":"@demo-0416/pi-trace","version":"0.1.0","keywords":["pi-package","pi-extension","trace","trajectory","observability","deepseek-harness"],"author":{"name":"Demo-0416"},"license":"MIT","_id":"@demo-0416/pi-trace@0.1.0","maintainers":[{"name":"demo-0416","email":"3114147163@qq.com"}],"homepage":"https://github.com/Demo-0416/my-pi-extensions#readme","bugs":{"url":"https://github.com/Demo-0416/my-pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"164d66c626fd83c4b6d3e8c24883fc8aafb5d5c2","tarball":"https://registry.npmjs.org/@demo-0416/pi-trace/-/pi-trace-0.1.0.tgz","fileCount":103,"integrity":"sha512-aeiPqKFVkBl1ccta7ThNJ6ji+e9WEWtbcYHIS6skTU1Bosbfz0iiIdOZBywAhxh7nMYJQrOXxJMRlpIPLoaHJw==","signatures":[{"sig":"MEUCIF2LBB2K+dTu2q2Ytb+ftjJ2uGTV1netxRHfpuoRzt+WAiEApNmJA9DBDNlX6akJa+Y8OkRvavoacvlJwFQX2pLGxmM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5150588},"main":"src/index.ts","type":"module","gitHead":"90d0b8f83a7f53cfaeee322afac15a14f8fe0116","scripts":{"test":"node scripts/smoke-m8.mjs","test:e2e":"cd src/web && node smoke-e2e.mjs","build:web":"cd src/web && npm install && npm run build","prepublishOnly":"npm run build:web"},"_npmUser":{"name":"demo-0416","email":"3114147163@qq.com"},"repository":{"url":"git+https://github.com/Demo-0416/my-pi-extensions.git","type":"git","directory":"pi-trace"},"_npmVersion":"11.6.3","description":"pi extension: deepseek-harness-style trajectory view — timeline gantt, turn-grouped ledger, rich detail panel, live SSE streaming","directories":{},"_nodeVersion":"24.10.0","_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-trace_0.1.0_1787133262604_0.862260342575172","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@demo-0416/pi-trace","version":"0.1.1","keywords":["pi-package","pi-extension","trace","trajectory","observability","deepseek-harness"],"author":{"name":"Demo-0416"},"license":"MIT","_id":"@demo-0416/pi-trace@0.1.1","maintainers":[{"name":"demo-0416","email":"3114147163@qq.com"}],"homepage":"https://github.com/Demo-0416/my-pi-extensions#readme","bugs":{"url":"https://github.com/Demo-0416/my-pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"34ff1a3fe9672e3e15f91a0141d35e3d0d16300a","tarball":"https://registry.npmjs.org/@demo-0416/pi-trace/-/pi-trace-0.1.1.tgz","fileCount":103,"integrity":"sha512-jYb7ZxMSGHyxiWDwf0tIJNxchcE+sb0/f8JAEvtSXDDmaGkKP6gHsKXXz3m4eUXIMsVZ7oSlO8FC6KX88oL7Mg==","signatures":[{"sig":"MEQCID/TruEhRYvR/MjneddkGD4ZvIphvM/KRMTuWtfIbuadAiAnUrUSMjrOOvCLkJUeYuGIjo/ODO2r+UFjS/9g3e3S/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5150650},"main":"src/index.ts","type":"module","gitHead":"90d0b8f83a7f53cfaeee322afac15a14f8fe0116","scripts":{"test":"node scripts/smoke-m8.mjs","test:e2e":"cd src/web && node smoke-e2e.mjs","build:web":"cd src/web && npm install && npm run build","prepublishOnly":"npm run build:web"},"_npmUser":{"name":"demo-0416","email":"3114147163@qq.com"},"repository":{"url":"git+https://github.com/Demo-0416/my-pi-extensions.git","type":"git","directory":"pi-trace"},"_npmVersion":"11.6.3","description":"pi extension: deepseek-harness-style trajectory view — timeline gantt, turn-grouped ledger, rich detail panel, live SSE streaming","directories":{},"_nodeVersion":"24.10.0","_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-trace_0.1.1_1787133376168_0.2196287265410488","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@demo-0416/pi-trace","version":"0.1.2","keywords":["pi-package","pi-extension","trace","trajectory","observability","deepseek-harness"],"author":{"name":"Demo-0416"},"license":"MIT","_id":"@demo-0416/pi-trace@0.1.2","maintainers":[{"name":"demo-0416","email":"3114147163@qq.com"}],"homepage":"https://github.com/Demo-0416/my-pi-extensions#readme","bugs":{"url":"https://github.com/Demo-0416/my-pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"a8e035bb76233d22d6f394f76e80b6655282d7e3","tarball":"https://registry.npmjs.org/@demo-0416/pi-trace/-/pi-trace-0.1.2.tgz","fileCount":105,"integrity":"sha512-mDKBlRNl0ArAJ3EWoSYoVwrl5s3sKwdeSzyUHa1dFtUPKYw+C1mJNIsQzBdnHIM6ifERzmpGMOaEil+7Ioxm4w==","signatures":[{"sig":"MEUCIQD3k8cbQPu4Q0aHzaidgmC+SjYLz99tFfBgAPxGglrEKwIgXPb3acAygPxf9A2lDkQdSrO51eEp9Qd9KVn4iZ82I0w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDynD1ltOYjsg/0blNVQ3JQzXAGPoMNIreuxZZ8HRIY3wIhAKquYdKZZ8M75+63GJrax1ZBFIl7m40G3QzqQbFNXnfX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5171523},"main":"src/index.ts","type":"module","gitHead":"cd8e903b0a6b25f30aacc699b2dfa6b8a3fcfbde","scripts":{"test":"node --test scripts/test-stats.mjs && node scripts/smoke-m8.mjs","test:e2e":"cd src/web && node smoke-e2e.mjs","build:web":"cd src/web && npm ci --include=dev && npm run build","prepublishOnly":"npm run build:web && npm test"},"_npmUser":{"name":"demo-0416","email":"3114147163@qq.com"},"repository":{"url":"git+https://github.com/Demo-0416/my-pi-extensions.git","type":"git","directory":"pi-trace"},"_npmVersion":"11.6.3","description":"pi extension: deepseek-harness-style trajectory view — timeline gantt, turn-grouped ledger, rich detail panel, live SSE streaming","directories":{},"_nodeVersion":"24.10.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-trace_0.1.2_1789803028096_0.2802212192612099","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@demo-0416/pi-trace","version":"0.1.3","keywords":["pi-package","pi-extension","trace","trajectory","observability","deepseek-harness"],"author":{"name":"Demo-0416"},"license":"MIT","_id":"@demo-0416/pi-trace@0.1.3","maintainers":[{"name":"demo-0416","email":"3114147163@qq.com"}],"homepage":"https://github.com/Demo-0416/my-pi-extensions#readme","bugs":{"url":"https://github.com/Demo-0416/my-pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"7b31d8df2b1256f96a0144640e6dc401808a2569","tarball":"https://registry.npmjs.org/@demo-0416/pi-trace/-/pi-trace-0.1.3.tgz","fileCount":105,"integrity":"sha512-ipyGLS0l1+jRIOjz9BB6PWHxb38jSlx60XHdJTK/BBnm8ciJT4NKNbWyp5nWdNw4V8tZ1D1YG5SqeUQi6+p38Q==","signatures":[{"sig":"MEUCIDsslmyKYEczJfM3kcXt5MxM7A+htNbFVKHpti/8TwwPAiEAyyn5PmR01rdCe0JR+mWJkODKCiaavuuhiU+7Hbto6M0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCY43iJwLbMxfM6QjYBmA9CdFfKQBToY8/TiD70Tl4azwIgTkFnk9Y6WI1Mu/sOEF2PYOdbCePHVmdZOpLdW+DU/yo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5176609},"main":"src/index.ts","type":"module","gitHead":"5e8af68192a565319ccf8df2a9509883ea58a963","scripts":{"test":"node --test scripts/test-stats.mjs && node scripts/smoke-m8.mjs","test:e2e":"cd src/web && node smoke-e2e.mjs","build:web":"cd src/web && npm ci --include=dev && npm run build","prepublishOnly":"npm run build:web && npm test"},"_npmUser":{"name":"demo-0416","email":"3114147163@qq.com"},"repository":{"url":"git+https://github.com/Demo-0416/my-pi-extensions.git","type":"git","directory":"pi-trace"},"_npmVersion":"11.6.3","description":"pi extension: deepseek-harness-style trajectory view — timeline gantt, turn-grouped ledger, rich detail panel, live SSE streaming","directories":{},"_nodeVersion":"24.10.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-trace_0.1.3_1790083156181_0.19782334108774635","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"pi":{"extensions":["./src/index.ts"]},"_id":"@demo-0416/pi-trace@0.1.4","bugs":{"url":"https://github.com/Demo-0416/my-pi-extensions/issues"},"dist":{"shasum":"0acf8a675621abc92716e64e78bee135afe01ab3","tarball":"https://registry.npmjs.org/@demo-0416/pi-trace/-/pi-trace-0.1.4.tgz","fileCount":105,"integrity":"sha512-EBrw7SctyEWhtoMLAbeIWtSTuI5s33vdeey3+ZIaWpUbiU1Gi4Wbj00OX5VCMQk7aA7xh4sRKeqEjwXI2pRNfw==","signatures":[{"sig":"MEUCIQDtOB3WhQf77FISoZLuno0Po+5rbgHah94mDI/O2nkJjwIgISPr/1T7+r8eR+A4IJNeeMx0U3O3459YigRo15BJs8Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIE8IjADjdWlFJzbPyp1wYXBtDk0LgPTcAB7mUH5ND1G2AiADhjQO4kavfAQ0ngD1+OSGis3a7KVrWJlJuJhu7k1MiQ=="}],"unpackedSize":5181087},"main":"src/index.ts","name":"@demo-0416/pi-trace","type":"module","author":{"name":"Demo-0416"},"gitHead":"f0a91904fa5c7a0b89535d62375e2e5ee711260a","license":"MIT","scripts":{"test":"node --test scripts/test-stats.mjs && node scripts/smoke-m8.mjs","test:e2e":"cd src/web && node smoke-e2e.mjs","build:web":"cd src/web && npm ci --include=dev && npm run build","prepublishOnly":"npm run build:web && npm test"},"version":"0.1.4","_npmUser":{"name":"demo-0416","email":"3114147163@qq.com"},"homepage":"https://github.com/Demo-0416/my-pi-extensions#readme","keywords":["pi-package","pi-extension","trace","trajectory","observability","deepseek-harness"],"repository":{"url":"git+https://github.com/Demo-0416/my-pi-extensions.git","type":"git","directory":"pi-trace"},"_npmVersion":"11.6.3","description":"pi extension: deepseek-harness-style trajectory view — timeline gantt, turn-grouped ledger, rich detail panel, live SSE streaming","directories":{},"maintainers":[{"name":"demo-0416","email":"3114147163@qq.com"}],"_nodeVersion":"24.10.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-trace_0.1.4_1790084952608_0.15893711473064975"}}},"time":{"created":"2026-08-19T09:54:22.463Z","modified":"2026-09-22T13:49:12.903Z","0.1.0":"2026-08-19T09:54:22.808Z","0.1.1":"2026-08-19T09:56:16.366Z","0.1.2":"2026-09-19T07:30:28.194Z","0.1.3":"2026-09-22T13:19:16.330Z","0.1.4":"2026-09-22T13:49:12.738Z"},"bugs":{"url":"https://github.com/Demo-0416/my-pi-extensions/issues"},"author":{"name":"Demo-0416"},"license":"MIT","homepage":"https://github.com/Demo-0416/my-pi-extensions#readme","keywords":["pi-package","pi-extension","trace","trajectory","observability","deepseek-harness"],"repository":{"url":"git+https://github.com/Demo-0416/my-pi-extensions.git","type":"git","directory":"pi-trace"},"description":"pi extension: deepseek-harness-style trajectory view — timeline gantt, turn-grouped ledger, rich detail panel, live SSE streaming","maintainers":[{"name":"demo-0416","email":"3114147163@qq.com"}],"readme":"# pi-trace\n\nPi extension that renders a [deepseek-harness](https://github.com/deepseek-ai/deepseek-harness)-style trajectory view for every pi session — timeline gantt chart, turn-grouped ledger, rich detail panel, live SSE streaming.\n\n## Install\n\n```bash\npi install npm:@demo-0416/pi-trace\n```\n\nOr try without installing:\n\n```bash\npi -e npm:@demo-0416/pi-trace\n```\n\n## Usage\n\nOnce installed, the extension auto-activates on every pi session:\n\n- **TUI widget** — a stats line appears below the editor: `✻ 3 轮 · LLM 21.7s · 42.9 tok/s · 缓存 96.6% · $0.03`\n- **`/trace`** — open the current session's trajectory in the browser\n- **`/trace pick`** — pick a historical session from a list\n\nThe web UI runs on `http://127.0.0.1:<port>` (port auto-increments from 43110; written to `~/.pi/agent/traces/.port`).\n\n## Features\n\n### Timeline (Gantt)\n\n- 3 lanes: Input / Model / Tools, with 4 projection modes (sequence, duration, time, actual)\n- Scroll to zoom (cursor-anchored), right-drag to pan, drag-select to focus\n- TTFT gradient ticks on model spans, turn boundary markers\n- Hover crosshair + tooltip, click to focus record\n\n### Ledger (Table)\n\n- Turn → group (Message / Step N) → cell hierarchy\n- Colored kind tags (USER / ASSISTANT / TOOL / SYSTEM)\n- Inline tool result previews, LLM request boundaries with cumulative usage\n- Turn + assistant folding, live full-text search\n\n### Detail Panel\n\n- **User / Assistant**: Summary / Preview / Raw / Source tabs — markdown rendering with syntax highlighting, token breakdown, TTFT/generation/throughput timing\n- **Tool**: Summary / Payload / Result / Schema / Timing tabs — JSON tree, tool schema from request\n- **System**: System Prompt / Tools tabs — full prompt snapshot, tool catalog\n\n### Data\n\n- Rich collection: thinking blocks, tool calls, request config (temperature/thinking/stop), prompt snapshots, tool schemas, call IDs, input source, reasoning tokens\n- Read-only session data: live timing stays in memory; only the server port is written to `~/.pi/agent/traces/.port`\n- Historical session reconstruction from pi's own session JSONL\n- SSE live streaming (partial assistant messages + running tool calls)\n\n## Architecture\n\n```\nsrc/\n├── index.ts           # extension entry (activate, widget, /trace commands)\n├── collector.ts       # pi event stream → TraceRecord\n├── server.ts          # node:http + SSE, serves web UI\n├── store.ts           # paths and field truncation\n├── model.ts           # TraceSession / TraceRecord types\n├── stats.ts           # stats computation\n├── session-loader.ts  # historical session reconstruction\n└── web/\n    ├── dist/          # pre-built React bundle (self-contained)\n    ├── vendor/        # dsh ui-trajectory source (MIT, vendored)\n    ├── primitives/    # dsh ui-primitives subset (MIT, vendored)\n    ├── adapter.ts     # pi session JSON → dsh layout input\n    ├── host.tsx       # React app: state, SSE, session picker\n    ├── build.mjs      # esbuild + CSS modules plugin\n    └── theme.css      # dsh design tokens (light theme)\n```\n\nThe frontend vendors deepseek-harness's `ui-trajectory` package (MIT) — the same layout engine, timeline, table, and detail panel components, adapted to pi's data model via a thin adapter layer. The backend is pure TypeScript with zero runtime dependencies (pi bundles `@earendil-works/pi-tui`).\n\n## Development\n\n```bash\n# Backend smoke test (collector, store, server, stats)\nnpm test\n\n# Frontend e2e test (install Chromium once)\n(cd src/web && npm ci && npx playwright install chromium)\nnpm run test:e2e\n\n# Rebuild frontend after modifying vendor/ or host.tsx\nnpm run build:web\n```\n\n## Release\n\n`master` is the release source of truth. Bump `pi-trace/package.json`, update\n[CHANGELOG.md](CHANGELOG.md), rebuild the browser bundle, and merge the tested PR\nbefore publishing `@demo-0416/pi-trace`. Do not publish from an unmerged branch.\n`npm publish` rebuilds and runs the isolated regression/smoke tests. Run the browser\ne2e tests separately before release. For a custom Chromium installation, set\n`PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH`.\n\n## License\n\nMIT. See [LICENSE](LICENSE). Vendored dsh code retains its original MIT license — see [src/web/NOTICE.md](src/web/NOTICE.md).\n","readmeFilename":"README.md"}