{"_id":"@bryxen/pulse","_rev":"8-113ee3fb1d078760797eb5988e41d1b4","name":"@bryxen/pulse","dist-tags":{"latest":"0.1.7"},"versions":{"0.1.0":{"name":"@bryxen/pulse","version":"0.1.0","keywords":["ai","gateway","llm","openai","anthropic","claude","proxy","self-hosted","bun","cli"],"license":"MIT","_id":"@bryxen/pulse@0.1.0","maintainers":[{"name":"kartboop","email":"tsing967@gmail.com"}],"homepage":"https://github.com/Bryxen-ai/pulse#readme","bugs":{"url":"https://github.com/Bryxen-ai/pulse/issues"},"bin":{"pulse":"bin/pulse"},"dist":{"shasum":"7425aa6fd7f4616a75db3b901d4d7cc8d4aecb7d","tarball":"https://registry.npmjs.org/@bryxen/pulse/-/pulse-0.1.0.tgz","fileCount":30,"integrity":"sha512-H9C70bgqfKRRKoCxx9DHYYHtbEArpImT3pkL8OC/MteiKJkpVyX45NHnvJIYuJ3HiaDWNF5fg0veUAiAy8ldlw==","signatures":[{"sig":"MEQCICKuIhLh0o1dyskcyHC1PqHtw2/KZkssspOJ5aj04OCRAiBOQ3c6kCnDdg54cRj2o11NCESXSJrDKuBt9dY+dM5JRg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2472052},"type":"module","engines":{"bun":">=1.2"},"gitHead":"32c348fd08212abc1b9fedba478da7ae858407ac","private":false,"scripts":{"dev":"bun --hot src/index.ts","build":"bun build ./src/index.html --outdir=dist --entry-naming \"[name].[ext]\" --sourcemap --target=browser --minify","start":"NODE_ENV=production bun src/index.ts","dev:watch":"bun --hot src/index.ts","build:release":"bun build ./src/index.html --outdir=dist --entry-naming \"[name].[ext]\" --target=browser --minify","prepublishOnly":"bun run build:release"},"_npmUser":{"name":"kartboop","email":"tsing967@gmail.com"},"repository":{"url":"git+https://github.com/Bryxen-ai/pulse.git","type":"git"},"_npmVersion":"11.12.1","description":"Self-hosted AI gateway — OpenAI- and Anthropic-compatible, with audit logs, live dashboards, and per-token cost tracking. Powered by Bun.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"react":"^19","elysia":"^1.4.29","react-dom":"^19","@elysiajs/jwt":"^1.4.2","@elysiajs/cookie":"^0.8.0","@elysiajs/static":"^1.4.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","@types/react":"^19","@types/react-dom":"^19"},"_npmOperationalInternal":{"tmp":"tmp/pulse_0.1.0_1782530761429_0.3560177955666066","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@bryxen/pulse","version":"0.1.1","keywords":["ai","gateway","llm","openai","anthropic","claude","proxy","self-hosted","bun","cli"],"license":"MIT","_id":"@bryxen/pulse@0.1.1","maintainers":[{"name":"kartboop","email":"tsing967@gmail.com"}],"homepage":"https://github.com/Bryxen-ai/pulse#readme","bugs":{"url":"https://github.com/Bryxen-ai/pulse/issues"},"bin":{"pulse":"bin/pulse"},"dist":{"shasum":"38649683ef703c9501f63138fd08684e108984bb","tarball":"https://registry.npmjs.org/@bryxen/pulse/-/pulse-0.1.1.tgz","fileCount":32,"integrity":"sha512-rgodU9DHk0EU/daT6xwKhcUM+jysDDpYS9hYnpNfrUFnqXnEAlyCM+5+iLwSTAb9zqt0eCb06Di3IqXVQ/5wIQ==","signatures":[{"sig":"MEQCIFs7biN4W7cEi4bJE9djxfLXnwZ7e/riKDl5WNy2bRw6AiA289VHD6qnoUXQ+WLxgdoCkZ9YHCbFrbu6I01/NSXMdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2980531},"type":"module","engines":{"bun":">=1.2"},"gitHead":"b112ab48dcfd7848c6d056757da494676ad9bf02","private":false,"scripts":{"dev":"bun --hot src/index.ts","build":"bun build ./src/index.html --outdir=dist --entry-naming \"[name].[ext]\" --sourcemap --target=browser --minify","start":"NODE_ENV=production bun src/index.ts","dev:watch":"bun --hot src/index.ts","build:release":"bun build ./src/index.html --outdir=dist --entry-naming \"[name].[ext]\" --target=browser --minify","prepublishOnly":"bun run build:release"},"_npmUser":{"name":"kartboop","email":"tsing967@gmail.com"},"repository":{"url":"git+https://github.com/Bryxen-ai/pulse.git","type":"git"},"_npmVersion":"11.12.1","description":"Self-hosted AI gateway — OpenAI- and Anthropic-compatible, with audit logs, live dashboards, and per-token cost tracking. Powered by Bun.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"react":"^19","elysia":"^1.4.29","react-dom":"^19","@elysiajs/jwt":"^1.4.2","@elysiajs/cookie":"^0.8.0","@elysiajs/static":"^1.4.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","@types/react":"^19","@types/react-dom":"^19"},"_npmOperationalInternal":{"tmp":"tmp/pulse_0.1.1_1782550586041_0.4573455671034281","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@bryxen/pulse","version":"0.1.2","keywords":["ai","gateway","llm","openai","anthropic","claude","proxy","self-hosted","bun","cli"],"license":"MIT","_id":"@bryxen/pulse@0.1.2","maintainers":[{"name":"kartboop","email":"tsing967@gmail.com"}],"homepage":"https://github.com/Bryxen-ai/pulse#readme","bugs":{"url":"https://github.com/Bryxen-ai/pulse/issues"},"bin":{"pulse":"bin/pulse"},"dist":{"shasum":"1a2dd1b1ea8371f2c2cd853707d247e735dcd0da","tarball":"https://registry.npmjs.org/@bryxen/pulse/-/pulse-0.1.2.tgz","fileCount":33,"integrity":"sha512-9gzT+ycR0YJboRKUjH7tqUffvArOeCxT4PwQ687cJ5KB17sxB9wUo6rycMoV5sxbFGn0t79auKkhpw3yG8JzRQ==","signatures":[{"sig":"MEYCIQCnj3YlM7WNXZBUjWz2FegLl2bgI1ukI9eQuMNyfaJkEQIhAODDSMjMyrPCzSLXqFxjKD9UOPUZmAfoEP7nb2x4mmZ2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3457588},"type":"module","engines":{"bun":">=1.2"},"gitHead":"0a827be89c841cc7ea9d79d1698252f668d85881","private":false,"scripts":{"dev":"bun --hot src/index.ts","build":"bun build ./src/index.html --outdir=dist --entry-naming \"[name].[ext]\" --sourcemap --target=browser --minify","start":"NODE_ENV=production bun src/index.ts","dev:watch":"bun --hot src/index.ts","build:release":"bun build ./src/index.html --outdir=dist --entry-naming \"[name].[ext]\" --target=browser --minify","prepublishOnly":"bun run build:release"},"_npmUser":{"name":"kartboop","email":"tsing967@gmail.com"},"repository":{"url":"git+https://github.com/Bryxen-ai/pulse.git","type":"git"},"_npmVersion":"11.12.1","description":"Self-hosted AI gateway — OpenAI- and Anthropic-compatible, with audit logs, live dashboards, and per-token cost tracking. Powered by Bun.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"react":"^19","elysia":"^1.4.29","react-dom":"^19","@elysiajs/jwt":"^1.4.2","@elysiajs/cookie":"^0.8.0","@elysiajs/static":"^1.4.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","@types/react":"^19","@types/react-dom":"^19"},"_npmOperationalInternal":{"tmp":"tmp/pulse_0.1.2_1782898212296_0.04884616323749902","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@bryxen/pulse","version":"0.1.3","keywords":["ai","gateway","llm","openai","anthropic","claude","proxy","self-hosted","bun","cli"],"license":"MIT","_id":"@bryxen/pulse@0.1.3","maintainers":[{"name":"kartboop","email":"tsing967@gmail.com"}],"homepage":"https://github.com/Bryxen-ai/pulse#readme","bugs":{"url":"https://github.com/Bryxen-ai/pulse/issues"},"bin":{"pulse":"bin/pulse"},"dist":{"shasum":"3698a21e322fbb608f385051691ee3af6620c192","tarball":"https://registry.npmjs.org/@bryxen/pulse/-/pulse-0.1.3.tgz","fileCount":33,"integrity":"sha512-kmWDYBOeUvKkbGcDiqZU8n2+hwdKWmdRr1UNBmL+SpaEIihaq6NhlvRsnuNEOE9dfnRQPK/vJmff3+KuxNDj1g==","signatures":[{"sig":"MEUCIAPBIxeU/jiPrxKEhQp1UMxh0f7NpcTQoP/QaOTz3GnBAiEAphrin+nr0OHHZlARUTX9Vzx9qG82w2bw8vv9HNcPkqc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3458977},"type":"module","engines":{"bun":">=1.2"},"gitHead":"6d0d30181f20cc91e81d85d39f72aee81669c5ca","private":false,"scripts":{"dev":"bun --hot src/index.ts","build":"bun build ./src/index.html --outdir=dist --entry-naming \"[name].[ext]\" --sourcemap --target=browser --minify","start":"NODE_ENV=production bun src/index.ts","dev:watch":"bun --hot src/index.ts","build:release":"bun build ./src/index.html --outdir=dist --entry-naming \"[name].[ext]\" --target=browser --minify","prepublishOnly":"bun run build:release"},"_npmUser":{"name":"kartboop","email":"tsing967@gmail.com"},"repository":{"url":"git+https://github.com/Bryxen-ai/pulse.git","type":"git"},"_npmVersion":"11.12.1","description":"Self-hosted AI gateway — OpenAI- and Anthropic-compatible, with audit logs, live dashboards, and per-token cost tracking. Powered by Bun.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"react":"^19","elysia":"^1.4.29","react-dom":"^19","@elysiajs/jwt":"^1.4.2","@elysiajs/cookie":"^0.8.0","@elysiajs/static":"^1.4.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","@types/react":"^19","@types/react-dom":"^19"},"_npmOperationalInternal":{"tmp":"tmp/pulse_0.1.3_1782898760610_0.26805754594305053","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@bryxen/pulse","version":"0.1.4","keywords":["ai","gateway","llm","openai","anthropic","claude","proxy","self-hosted","bun","cli"],"license":"MIT","_id":"@bryxen/pulse@0.1.4","maintainers":[{"name":"kartboop","email":"tsing967@gmail.com"}],"homepage":"https://github.com/Bryxen-ai/pulse#readme","bugs":{"url":"https://github.com/Bryxen-ai/pulse/issues"},"bin":{"pulse":"bin/pulse"},"dist":{"shasum":"8fe17a7c93e312062ad9677516fbafad51e79bda","tarball":"https://registry.npmjs.org/@bryxen/pulse/-/pulse-0.1.4.tgz","fileCount":35,"integrity":"sha512-iy7dubOdzI0JXjmLY8Z1h3t48lHsam6kV/ZEf5Ueyem4/DFpxivhgu1Gdis0IA3EpiXqQ7PkJqPTp1u/Ulsl0w==","signatures":[{"sig":"MEQCIHNKCiYkr89Y2i6uO5YpsBB6bB5yxcK7a5pHX8Mug2F/AiBsOPlSQNTR3YBqWthfvHNGXQWV0ITc3XVUbVw4fUMekA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5750021},"type":"module","engines":{"bun":">=1.2"},"gitHead":"cf70350236c50f86d951e4a96e6a8c6d7be07d08","private":false,"scripts":{"dev":"bun --hot src/index.ts","build":"bun build ./src/index.html --outdir=dist --entry-naming \"[name].[ext]\" --sourcemap --target=browser --minify","start":"NODE_ENV=production bun src/index.ts","dev:watch":"bun --hot src/index.ts","build:release":"bun build ./src/index.html --outdir=dist --entry-naming \"[name].[ext]\" --target=browser --minify","prepublishOnly":"bun run build:release"},"_npmUser":{"name":"kartboop","email":"tsing967@gmail.com"},"repository":{"url":"git+https://github.com/Bryxen-ai/pulse.git","type":"git"},"_npmVersion":"11.12.1","description":"Self-hosted AI gateway — OpenAI- and Anthropic-compatible, with audit logs, live dashboards, and per-token cost tracking. Powered by Bun.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"katex":"^0.17.0","react":"^19","elysia":"^1.4.29","marked":"^18.0.5","react-dom":"^19","@elysiajs/jwt":"^1.4.2","@elysiajs/cookie":"^0.8.0","@elysiajs/static":"^1.4.10","marked-katex-extension":"^5.1.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","@types/react":"^19","@types/react-dom":"^19"},"_npmOperationalInternal":{"tmp":"tmp/pulse_0.1.4_1782915887895_0.7625652859319898","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@bryxen/pulse","version":"0.1.5","keywords":["ai","gateway","llm","openai","anthropic","claude","proxy","self-hosted","bun","cli"],"license":"MIT","_id":"@bryxen/pulse@0.1.5","maintainers":[{"name":"kartboop","email":"tsing967@gmail.com"}],"homepage":"https://github.com/Bryxen-ai/pulse#readme","bugs":{"url":"https://github.com/Bryxen-ai/pulse/issues"},"bin":{"pulse":"bin/pulse"},"dist":{"shasum":"fa4ac88cbc0f133910f6afee6a3ba47deaaf1ea8","tarball":"https://registry.npmjs.org/@bryxen/pulse/-/pulse-0.1.5.tgz","fileCount":39,"integrity":"sha512-q45E7j620Tm7fFjlj9CtUlMY9L5p2K7+Pzy47oHzrc4JFC0yM96/lDKN7Wds9DyV/bSlI9HcDVOobkbOLjBEXw==","signatures":[{"sig":"MEQCIBPf5eZGfMg7E2ROUfkZQLUoZOEKmfKzcfrtSzrVNlvcAiAls5gfJdTOYclnQbCypjqkLCbZpPACqlhM0JrNesH/Zw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11207953},"type":"module","engines":{"bun":">=1.2"},"gitHead":"a79e0de633785780710ea4ff3422d5614b9190f7","private":false,"scripts":{"dev":"bun --hot src/index.ts","build":"bun build ./src/index.html --outdir=dist --entry-naming \"[name].[ext]\" --sourcemap --target=browser --minify","start":"NODE_ENV=production bun src/index.ts","dev:watch":"bun --hot src/index.ts","build:release":"bun build ./src/index.html --outdir=dist --entry-naming \"[name].[ext]\" --target=browser --minify","prepublishOnly":"bun run build:release"},"_npmUser":{"name":"kartboop","email":"tsing967@gmail.com"},"repository":{"url":"git+https://github.com/Bryxen-ai/pulse.git","type":"git"},"_npmVersion":"11.12.1","description":"Self-hosted AI gateway — OpenAI- and Anthropic-compatible, with audit logs, live dashboards, and per-token cost tracking. Powered by Bun.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"katex":"^0.17.0","react":"^19","elysia":"^1.4.29","marked":"^18.0.5","react-dom":"^19","@elysiajs/jwt":"^1.4.2","@elysiajs/cookie":"^0.8.0","@elysiajs/static":"^1.4.10","marked-katex-extension":"^5.1.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","@types/react":"^19","@types/react-dom":"^19"},"_npmOperationalInternal":{"tmp":"tmp/pulse_0.1.5_1783050891208_0.34583382383659456","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@bryxen/pulse","version":"0.1.6","keywords":["ai","gateway","llm","openai","anthropic","claude","proxy","self-hosted","bun","cli"],"license":"MIT","_id":"@bryxen/pulse@0.1.6","maintainers":[{"name":"kartboop","email":"tsing967@gmail.com"}],"homepage":"https://github.com/Bryxen-ai/pulse#readme","bugs":{"url":"https://github.com/Bryxen-ai/pulse/issues"},"bin":{"pulse":"bin/pulse"},"dist":{"shasum":"51ceb8933107b2ddde06105d4f65a53b0d420f00","tarball":"https://registry.npmjs.org/@bryxen/pulse/-/pulse-0.1.6.tgz","fileCount":39,"integrity":"sha512-Rc42M34BxoYJYtx9v1wzytH88a0AWjvu01h/QNG3MfB8IfTa3nEAnf5rrAoru2t9lFR4UAC7MKQwcA/zGv1Yig==","signatures":[{"sig":"MEQCIARhglzSOpOsW13XKamBxA/M+4vBVGBS+NSjjF/N/tUtAiBuWhf1/90aQIoxip23l6N5ZZ3EyTODzVyxQkhg9JMoqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11208045},"type":"module","engines":{"bun":">=1.2"},"gitHead":"a79e0de633785780710ea4ff3422d5614b9190f7","private":false,"scripts":{"dev":"bun --hot src/index.ts","build":"bun build ./src/index.html --outdir=dist --entry-naming \"[name].[ext]\" --sourcemap --target=browser --minify","start":"NODE_ENV=production bun src/index.ts","dev:watch":"bun --hot src/index.ts","build:release":"bun build ./src/index.html --outdir=dist --entry-naming \"[name].[ext]\" --target=browser --minify","prepublishOnly":"bun run build:release"},"_npmUser":{"name":"kartboop","email":"tsing967@gmail.com"},"repository":{"url":"git+https://github.com/Bryxen-ai/pulse.git","type":"git"},"_npmVersion":"11.12.1","description":"Self-hosted AI gateway — OpenAI- and Anthropic-compatible, with audit logs, live dashboards, and per-token cost tracking. Powered by Bun.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"katex":"^0.17.0","react":"^19","elysia":"^1.4.29","marked":"^18.0.5","react-dom":"^19","@elysiajs/jwt":"^1.4.2","@elysiajs/cookie":"^0.8.0","@elysiajs/static":"^1.4.10","marked-katex-extension":"^5.1.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","@types/react":"^19","@types/react-dom":"^19"},"_npmOperationalInternal":{"tmp":"tmp/pulse_0.1.6_1783055098260_0.09128739192021618","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@bryxen/pulse","version":"0.1.7","description":"Self-hosted AI gateway — OpenAI- and Anthropic-compatible, with audit logs, live dashboards, and per-token cost tracking. Powered by Bun.","private":false,"type":"module","license":"MIT","homepage":"https://github.com/Bryxen-ai/pulse#readme","repository":{"type":"git","url":"git+https://github.com/Bryxen-ai/pulse.git"},"bugs":{"url":"https://github.com/Bryxen-ai/pulse/issues"},"keywords":["ai","gateway","llm","openai","anthropic","claude","proxy","self-hosted","bun","cli"],"bin":{"pulse":"bin/pulse"},"engines":{"bun":">=1.2"},"publishConfig":{"access":"public"},"scripts":{"dev":"bun --hot src/index.ts","dev:watch":"bun --hot src/index.ts","build":"bun build ./src/index.html --outdir=dist --entry-naming \"[name].[ext]\" --sourcemap --target=browser --minify","build:release":"bun build ./src/index.html --outdir=dist --entry-naming \"[name].[ext]\" --target=browser --minify","start":"NODE_ENV=production bun src/index.ts","prepublishOnly":"bun run build:release"},"dependencies":{"@elysiajs/cookie":"^0.8.0","@elysiajs/jwt":"^1.4.2","@elysiajs/static":"^1.4.10","elysia":"^1.4.29","katex":"^0.17.0","marked":"^18.0.5","marked-katex-extension":"^5.1.10","react":"^19","react-dom":"^19"},"devDependencies":{"@types/react":"^19","@types/react-dom":"^19","@types/bun":"latest"},"gitHead":"35eea2414df5b04ece476da9757f7df28263e388","_id":"@bryxen/pulse@0.1.7","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-4X7qrXNihBeOXpF2hS54Yjwl99nzX5jPwfrqC8EgQ4MvBJgEJ4xAf0dKyJyYZ/As9udWs935Hw5HdWxYbwLlGA==","shasum":"1de4f2b7a94204c84758447fd9bcb3a6ec2a9b75","tarball":"https://registry.npmjs.org/@bryxen/pulse/-/pulse-0.1.7.tgz","fileCount":40,"unpackedSize":11212563,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDsbTiiFstWhceQatBmzSVtTNlnaHwr3uWM02ngeyqX1gIgAi1XFgsR6OtVL8r57LH5dsRHgoQ4t4tWFHLxRA/lMDI="}]},"_npmUser":{"name":"kartboop","email":"tsing967@gmail.com"},"directories":{},"maintainers":[{"name":"kartboop","email":"tsing967@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pulse_0.1.7_1783095932303_0.9928486813894233"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-27T03:26:01.280Z","modified":"2026-07-03T16:25:32.648Z","0.1.0":"2026-06-27T03:26:01.589Z","0.1.1":"2026-06-27T08:56:26.184Z","0.1.2":"2026-07-01T09:30:12.488Z","0.1.3":"2026-07-01T09:39:20.795Z","0.1.4":"2026-07-01T14:24:48.139Z","0.1.5":"2026-07-03T03:54:51.428Z","0.1.6":"2026-07-03T05:04:58.477Z","0.1.7":"2026-07-03T16:25:32.516Z"},"bugs":{"url":"https://github.com/Bryxen-ai/pulse/issues"},"license":"MIT","homepage":"https://github.com/Bryxen-ai/pulse#readme","keywords":["ai","gateway","llm","openai","anthropic","claude","proxy","self-hosted","bun","cli"],"repository":{"type":"git","url":"git+https://github.com/Bryxen-ai/pulse.git"},"description":"Self-hosted AI gateway — OpenAI- and Anthropic-compatible, with audit logs, live dashboards, and per-token cost tracking. Powered by Bun.","maintainers":[{"name":"kartboop","email":"tsing967@gmail.com"}],"readme":"<div align=\"center\">\n\n# ⚡ PULSE\n\n**透视每个 AI Agent。实时会话可视化、调试与可观测性。**\n\n实时观看 Agent 对话展开 — `system` 提示词、`user` 消息、`assistant` 响应、`tool_result` 工具返回 — 在一个优雅的仪表盘中一览无余。基于 Bun 的自托管 AI 网关，兼容 OpenAI & Anthropic，内置费用追踪与审计日志。\n\n[![Powered by Bun](https://img.shields.io/badge/Powered%20by-Bun-black?logo=bun)](https://bun.sh)\n[![Built with Elysia](https://img.shields.io/badge/Built%20with-Elysia-blue)](https://elysiajs.com)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5-blue?logo=typescript)](https://www.typescriptlang.org/)\n[![React 19](https://img.shields.io/badge/React-19-61dafb?logo=react)](https://react.dev)\n\n[English](./README.md) · [演示](#-演示) · [快速开始](#-快速开始) · [API](#-api-参考) · [部署](#-部署)\n\n</div>\n\n---\n\n## 🎬 演示\n\n<div align=\"center\">\n\n![PULSE 演示](./assets/demo.gif)\n\n</div>\n\n---\n\n## ✨ 为什么选择 PULSE\n\n---\n\n## 🚀 快速开始\n\n需要 [Bun](https://bun.sh) **>= 1.2**。\n\n### 从 npm 安装（单用户/本地）\n\n```bash\nbun install -g @bryxen/pulse\npulse run\n```\n\n打开 `http://127.0.0.1:3000`，无需登录 — 数据存储在 `~/.pulse/pulse.db`。使用 `pulse run --help` 查看参数（`--port`、`--host`、`--db-path`、`--auth` 启用登录页）。\n\n随时更新到最新版本：\n\n```bash\npulse update\n```\n\n### 从源码运行（开发模式）\n\n```bash\ngit clone <your-repo-url>\ncd pulse\nbun install\nbun run dev          # http://localhost:3000 (热更新)\n```\n\n使用 **admin / admin123** 登录，然后立即修改密码。\n\n### 生产环境（自托管，多用户）\n\n```bash\nbun run build        # 打包前端 → ./dist\nbun run start        # 提供 dist/ + API，端口 $PORT（默认 3000）\n```\n\n> `bun run start` 需要 `dist/` 目录存在。前端修改后需重新构建 — 生产分支提供的是打包后的静态资源，不是 `src/`。\n\n---\n\n## 🔌 API 参考\n\nPULSE 提供两类接口：**网关代理**（用于上游 LLM 调用）和 **管理 API**（用于仪表盘）。\n\n### 网关代理（对外）\n\nOpenAI 兼容：\n\n```bash\nPOST /v1/chat/completions\nAuthorization: Bearer <gateway_key>\n\n{\n  \"model\": \"gpt-4o\",\n  \"messages\": [{\"role\": \"user\", \"content\": \"你好！\"}],\n  \"stream\": true\n}\n```\n\nAnthropic 兼容：\n\n```bash\nPOST /anthropic/v1/messages\nx-api-key: <gateway_key>\n\n{\n  \"model\": \"claude-sonnet-4-6\",\n  \"messages\": [{\"role\": \"user\", \"content\": \"你好！\"}],\n  \"stream\": true\n}\n```\n\n### 管理 API（内部）\n\n<details>\n<summary><strong>全部端点</strong></summary>\n\n| 方法 | 端点 | 描述 |\n|--------|----------|-------------|\n| POST | `/api/auth/login` · `logout` · `register` · `change-password` | 认证流程 |\n| GET | `/api/auth/me` | 当前用户 |\n| GET / POST / PUT / DELETE | `/api/auth/users[/:id]` | 用户管理（管理员） |\n| GET / POST / PUT / DELETE | `/api/sessions[/:id]` | 会话 CRUD |\n| GET | `/api/sessions/:id/messages` | 会话消息 |\n| GET / POST / PUT / DELETE | `/api/endpoints[/:id]` | 提供商端点 CRUD |\n| POST | `/api/endpoints/test` | 测试端点配置（不保存） |\n| GET | `/api/logs?provider=…&status=…` | 按条件查询审计日志 |\n| GET | `/api/usage/stats` · `by-model` · `trend` | 用量分析 |\n| GET | `/api/health` | 服务健康检查 |\n\n</details>\n\n---\n\n## 🏗️ 技术栈\n\n| 层级 | 技术 |\n|------------|-------------------------------|\n| 运行时 | [Bun](https://bun.sh) 1.2+ |\n| 框架 | [Elysia](https://elysiajs.com) |\n| 数据库 | SQLite (`bun:sqlite`) |\n| 前端 | React 19 + TypeScript |\n| 认证 | bcrypt + JWT |\n\n---\n\n## ⚙️ 配置\n\n| 变量 | 默认值 | 描述 |\n|----------|---------|-------------|\n| `NODE_ENV` | — | 设为 `production` 启用生产模式 |\n| `PORT` | `3000` | 服务器监听端口 |\n| `HOST` | `0.0.0.0` | 绑定地址（`pulse run` 默认为 `127.0.0.1`） |\n| `DB_PATH` | `pulse.db` | SQLite 数据库文件路径 |\n| `PULSE_NO_AUTH` | — | 设为 `1` 禁用登录（单用户/本地安装） |\n\n在仪表盘的**端点**选项卡中配置上游提供商：上游 URL、上游 API Key、网关 Key（客户端发送的密钥）、默认模型以及每百万 Token 的定价。\n\n> ⚠️ **不要在 `bunfig.toml` 的 `[define]` 表中放入 `process.env.NODE_ENV`。** Bun 在运行时和打包时都会应用 `[define]`，所以像 `\"process.env.NODE_ENV\" = \"\\\"development\\\"\"` 这行会在 systemd/shell 设置 `NODE_ENV=production` 时静默覆盖它，导致服务器处于开发模式。如果只需要在打包时强制使用开发模式，请在 `bun build` 命令行中传入 `--define`。\n\n---\n","readmeFilename":"README.zh-CN.md"}