{"_id":"@alloevil/agent-xray","_rev":"7-fc12a44149b4103828e47d417b2f927e","name":"@alloevil/agent-xray","dist-tags":{"latest":"1.17.1"},"versions":{"1.12.2":{"name":"@alloevil/agent-xray","version":"1.12.2","keywords":["agent","logs","viewer","claude-code","codex","openclaw","hermes","jsonl","dashboard"],"license":"MIT","_id":"@alloevil/agent-xray@1.12.2","maintainers":[{"name":"alloevil","email":"alloevil@hotmail.com"}],"homepage":"https://github.com/alloevil/AgentXRay#readme","bugs":{"url":"https://github.com/alloevil/AgentXRay/issues"},"bin":{"agentxray":"bin/agentxray.js","agent-xray":"bin/agentxray.js"},"dist":{"shasum":"9a31c09f3cb56736938f328de40dcbb951a4dc2f","tarball":"https://registry.npmjs.org/@alloevil/agent-xray/-/agent-xray-1.12.2.tgz","fileCount":27,"integrity":"sha512-Pn9dXaZj301SmUEZ1ttScnsyR5pTa+5LKgv0gHcagdbsB7/ZAcE194q+Pm2I7EHCgB2BjQfwEkVVs6xx0qEv9g==","signatures":[{"sig":"MEUCIEJ7QHY9NXpkCJKhFBh5IaUsUpQ0+RP8UjlswjBnxXmsAiEA0UVipfjR1CvMgQEWE0HA3RETNlgt/SSDTL2In04jKVY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alloevil%2fagent-xray@1.12.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1116865},"main":"server.js","engines":{"node":">=18.17"},"gitHead":"b5bc2b50f9fefd635b1286c785b92ea282c69e6d","scripts":{"lint":"biome check .","test":"node --test test/*.test.js","start":"node server.js","format":"biome check --write .","prepare":"node -e \"process.exit(require('fs').existsSync('frontend/dist/index.html') ? 0 : 1)\" || npm run build:ui:full","build:ui":"cd frontend && npm run build","build:ui:full":"cd frontend && npm ci && npm run build","prepublishOnly":"node -e \"if (!require('fs').existsSync('frontend/dist/index.html')) { console.error('frontend/dist missing — run npm run build:ui:full'); process.exit(1); }\""},"_npmUser":{"name":"alloevil","email":"alloevil@hotmail.com"},"repository":{"url":"git+https://github.com/alloevil/AgentXRay.git","type":"git"},"_npmVersion":"10.9.8","description":"Web dashboard for viewing AI agent session logs — supports OpenClaw, Codex, Claude Code, and Hermes","directories":{},"_nodeVersion":"22.23.2","dependencies":{"express":"^4.21.2","better-sqlite3":"^11.8.2"},"_hasShrinkwrap":false,"devDependencies":{"@biomejs/biome":"^2.5.7"},"_npmOperationalInternal":{"tmp":"tmp/agent-xray_1.12.2_1787139488593_0.9886854547875696","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"@alloevil/agent-xray","version":"1.13.0","keywords":["agent","logs","viewer","claude-code","codex","openclaw","hermes","deepseek","deepseek-harness","jsonl","dashboard"],"license":"MIT","_id":"@alloevil/agent-xray@1.13.0","maintainers":[{"name":"alloevil","email":"alloevil@hotmail.com"}],"homepage":"https://github.com/alloevil/AgentXRay#readme","bugs":{"url":"https://github.com/alloevil/AgentXRay/issues"},"bin":{"agentxray":"bin/agentxray.js","agent-xray":"bin/agentxray.js"},"dist":{"shasum":"4c842cb48a7c9ff53f52f11550b0b2d1a0ec5320","tarball":"https://registry.npmjs.org/@alloevil/agent-xray/-/agent-xray-1.13.0.tgz","fileCount":28,"integrity":"sha512-+mmwMZR3KhRQQ7Cej7jE6Lm10jsm1UsFLf/NTwLa3xO4XX85NWzjDvXjndUi09ERjwDBQ4UhpMdQLSZQJAHa8Q==","signatures":[{"sig":"MEUCIQC9vo90XtIySpfMnLDKRPfMqI3qrism7tJfbCHVJIOUhAIgRtmcEvVBbmpbXQ3ip/YgG+gP8+dnYohNpZf722xbfuA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alloevil%2fagent-xray@1.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1150623},"main":"server.js","engines":{"node":">=18.17"},"gitHead":"420a52c77210d7fac18e29a421b11af7977a5280","scripts":{"lint":"biome check .","test":"node --test test/*.test.js","start":"node server.js","format":"biome check --write .","prepare":"node -e \"process.exit(require('fs').existsSync('frontend/dist/index.html') ? 0 : 1)\" || npm run build:ui:full","build:ui":"cd frontend && npm run build","build:ui:full":"cd frontend && npm ci && npm run build","prepublishOnly":"node -e \"if (!require('fs').existsSync('frontend/dist/index.html')) { console.error('frontend/dist missing — run npm run build:ui:full'); process.exit(1); }\""},"_npmUser":{"name":"alloevil","email":"alloevil@hotmail.com"},"repository":{"url":"git+https://github.com/alloevil/AgentXRay.git","type":"git"},"_npmVersion":"10.9.8","description":"Web dashboard for viewing AI agent session logs — supports OpenClaw, Codex, Claude Code, Hermes, OMP, and DeepSeek Harness","directories":{},"_nodeVersion":"22.23.2","dependencies":{"express":"^4.21.2","better-sqlite3":"^11.8.2"},"_hasShrinkwrap":false,"devDependencies":{"@biomejs/biome":"^2.5.7"},"_npmOperationalInternal":{"tmp":"tmp/agent-xray_1.13.0_1787206796471_0.2304145594340008","host":"s3://npm-registry-packages-npm-production"}},"1.14.0":{"name":"@alloevil/agent-xray","version":"1.14.0","keywords":["agent","logs","viewer","claude-code","codex","openclaw","hermes","deepseek","deepseek-harness","gemini","gemini-cli","jsonl","dashboard"],"license":"MIT","_id":"@alloevil/agent-xray@1.14.0","maintainers":[{"name":"alloevil","email":"alloevil@hotmail.com"}],"homepage":"https://github.com/alloevil/AgentXRay#readme","bugs":{"url":"https://github.com/alloevil/AgentXRay/issues"},"bin":{"agentxray":"bin/agentxray.js","agent-xray":"bin/agentxray.js"},"dist":{"shasum":"9b4e1d59c4732cfa967922e5914ec342ed396a9c","tarball":"https://registry.npmjs.org/@alloevil/agent-xray/-/agent-xray-1.14.0.tgz","fileCount":30,"integrity":"sha512-wwctV/XTT3vozBBB9qM427/DX0bZt7eY/Tn1x3qLqQ85MZGPVFmjDPWvzQ5OZCpHQ8uQy5mmAQIgN1tu9hPxjg==","signatures":[{"sig":"MEYCIQCvHf17SHtaEQiJ9USrhOqzPBvyA7cJdqNcfmGptYrIOAIhAMJtQ82GOb0POfNiXx7TOZiuWgU/v00uTOF2q1S8IJTZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alloevil%2fagent-xray@1.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1198716},"main":"server.js","engines":{"node":">=18.17"},"gitHead":"45bb495ffbeeb5b344fb77a415917e8f160fb65f","scripts":{"lint":"biome check .","test":"node --test test/*.test.js","start":"node server.js","format":"biome check --write .","prepare":"node -e \"process.exit(require('fs').existsSync('frontend/dist/index.html') ? 0 : 1)\" || npm run build:ui:full","build:ui":"cd frontend && npm run build","build:ui:full":"cd frontend && npm ci && npm run build","prepublishOnly":"node -e \"if (!require('fs').existsSync('frontend/dist/index.html')) { console.error('frontend/dist missing — run npm run build:ui:full'); process.exit(1); }\""},"_npmUser":{"name":"alloevil","email":"alloevil@hotmail.com"},"repository":{"url":"git+https://github.com/alloevil/AgentXRay.git","type":"git"},"_npmVersion":"10.9.8","description":"Web dashboard for viewing AI agent session logs — supports OpenClaw, Codex, Claude Code, Hermes, OMP, DeepSeek Harness, and Gemini CLI","directories":{},"_nodeVersion":"22.23.2","dependencies":{"express":"^4.21.2","better-sqlite3":"^11.8.2"},"_hasShrinkwrap":false,"devDependencies":{"@biomejs/biome":"^2.5.7"},"_npmOperationalInternal":{"tmp":"tmp/agent-xray_1.14.0_1787214706730_0.6863443365446447","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"@alloevil/agent-xray","version":"1.15.0","keywords":["agent","logs","viewer","claude-code","codex","openclaw","hermes","deepseek","deepseek-harness","gemini","gemini-cli","jsonl","dashboard"],"license":"MIT","_id":"@alloevil/agent-xray@1.15.0","maintainers":[{"name":"alloevil","email":"alloevil@hotmail.com"}],"homepage":"https://github.com/alloevil/AgentXRay#readme","bugs":{"url":"https://github.com/alloevil/AgentXRay/issues"},"bin":{"agentxray":"bin/agentxray.js","agent-xray":"bin/agentxray.js"},"dist":{"shasum":"e737ef4302799a0af3866bf9be631dab6762f11b","tarball":"https://registry.npmjs.org/@alloevil/agent-xray/-/agent-xray-1.15.0.tgz","fileCount":44,"integrity":"sha512-OiE8KSmoLP45hAi4cXUZlueKMPtgXmAnptQ5gc4wH0EldJeRELtvYcTALNbvGHSHG+eyTMb7y7Pk6AE1sw5XSQ==","signatures":[{"sig":"MEUCIQCxa4ho0rw5aDHegf4GJfXy5SMZqLeHea+rJZXzFh6XmQIgJ9uLA3QvNj8jAdXpDu7k1m9MOOi4jIs4bpSQT1Fy1Wc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alloevil%2fagent-xray@1.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1204482},"main":"server.js","engines":{"node":">=18.17"},"gitHead":"00d593a3d31343fe14411466efb497add9a7844e","scripts":{"lint":"biome check .","test":"node --test test/*.test.js","start":"node server.js","format":"biome check --write .","prepare":"node -e \"process.exit(require('fs').existsSync('frontend/dist/index.html') ? 0 : 1)\" || npm run build:ui:full","build:ui":"node scripts/build-legacy-pure.mjs && cd frontend && npm run build","build:ui:full":"cd frontend && npm ci && cd .. && npm run build:ui","prepublishOnly":"node -e \"if (!require('fs').existsSync('frontend/dist/index.html')) { console.error('frontend/dist missing — run npm run build:ui:full'); process.exit(1); }\"","build:legacy-pure":"node scripts/build-legacy-pure.mjs"},"_npmUser":{"name":"alloevil","email":"alloevil@hotmail.com"},"repository":{"url":"git+https://github.com/alloevil/AgentXRay.git","type":"git"},"_npmVersion":"10.9.8","description":"Web dashboard for viewing AI agent session logs — supports OpenClaw, Codex, Claude Code, Hermes, OMP, DeepSeek Harness, and Gemini CLI","directories":{},"_nodeVersion":"22.23.2","dependencies":{"express":"^4.21.2","better-sqlite3":"^11.8.2"},"_hasShrinkwrap":false,"devDependencies":{"@biomejs/biome":"^2.5.7"},"_npmOperationalInternal":{"tmp":"tmp/agent-xray_1.15.0_1787281038487_0.3590360682282774","host":"s3://npm-registry-packages-npm-production"}},"1.16.0":{"name":"@alloevil/agent-xray","version":"1.16.0","keywords":["agent","logs","viewer","claude-code","codex","openclaw","hermes","deepseek","deepseek-harness","gemini","gemini-cli","jsonl","dashboard"],"license":"MIT","_id":"@alloevil/agent-xray@1.16.0","maintainers":[{"name":"alloevil","email":"alloevil@hotmail.com"}],"homepage":"https://github.com/alloevil/AgentXRay#readme","bugs":{"url":"https://github.com/alloevil/AgentXRay/issues"},"bin":{"agentxray":"bin/agentxray.js","agent-xray":"bin/agentxray.js"},"dist":{"shasum":"9fcbf4d070b4323910d240b84b004e56167e27ea","tarball":"https://registry.npmjs.org/@alloevil/agent-xray/-/agent-xray-1.16.0.tgz","fileCount":44,"integrity":"sha512-XN2WrhKE9X57bZfiQ1Ecm1PMxAhZmkXN7CRQx6lx8yrjtU1a8xRYw3+9ZAx/KDZhAF+C4PdvPfB2jJVXDBgC/w==","signatures":[{"sig":"MEQCIFO01j0uj80UsJJtC/kwptZttKIopkkyvnyUlyTHuWQ1AiBKLlBLbP00KkeFS8dxRH/R5vU8B2OSSJ7VLnIm4ZRQYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDo9TadjfRZUolEaMip1l7a7jagjs0wKMOcHFnpC0zARgIhALIo9ST2DhVDbuCPlAu9fjRdhpoiya0qxblnwvfFa0uI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alloevil%2fagent-xray@1.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1264642},"main":"server.js","engines":{"node":">=22.13"},"gitHead":"eb4ebb19a76e83fe40127271f694c08a562cc53d","scripts":{"lint":"biome check .","test":"node --test test/*.test.js","start":"node server.js","format":"biome check --write .","prepare":"node -e \"process.exit(require('fs').existsSync('frontend/dist/index.html') ? 0 : 1)\" || npm run build:ui:full","build:ui":"node scripts/build-legacy-pure.mjs && cd frontend && npm run build","build:ui:full":"cd frontend && npm ci && cd .. && npm run build:ui","prepublishOnly":"node -e \"if (!require('fs').existsSync('frontend/dist/index.html')) { console.error('frontend/dist missing — run npm run build:ui:full'); process.exit(1); }\"","build:legacy-pure":"node scripts/build-legacy-pure.mjs"},"_npmUser":{"name":"alloevil","email":"alloevil@hotmail.com"},"overrides":{"qs":"^6.16.0"},"repository":{"url":"git+https://github.com/alloevil/AgentXRay.git","type":"git"},"_npmVersion":"10.9.8","description":"Web dashboard for viewing AI agent session logs — supports OpenClaw, Codex, Claude Code, Hermes, OMP, DeepSeek Harness, and Gemini CLI","directories":{},"_nodeVersion":"22.23.2","dependencies":{"express":"^4.21.2"},"_hasShrinkwrap":false,"devDependencies":{"@biomejs/biome":"^2.5.7"},"_npmOperationalInternal":{"tmp":"tmp/agent-xray_1.16.0_1788525676426_0.49794120600435043","host":"s3://npm-registry-packages-npm-production"}},"1.17.0":{"name":"@alloevil/agent-xray","version":"1.17.0","keywords":["agent","logs","viewer","claude-code","codex","openclaw","hermes","deepseek","deepseek-harness","gemini","gemini-cli","jsonl","dashboard"],"license":"MIT","_id":"@alloevil/agent-xray@1.17.0","maintainers":[{"name":"alloevil","email":"alloevil@hotmail.com"}],"homepage":"https://github.com/alloevil/AgentXRay#readme","bugs":{"url":"https://github.com/alloevil/AgentXRay/issues"},"bin":{"agentxray":"bin/agentxray.js","agent-xray":"bin/agentxray.js"},"dist":{"shasum":"c9024c5bfece0878d4338ebc41511485e1ac383c","tarball":"https://registry.npmjs.org/@alloevil/agent-xray/-/agent-xray-1.17.0.tgz","fileCount":44,"integrity":"sha512-ZomJn2E5cj0buNS5kCefMXIRowPRRfeiysZcq7Zp0UN3rymh3NYCSkuvdXvtAfytgmg3LCHpfCiWnqaWQQIScw==","signatures":[{"sig":"MEUCIDtl+IJvu9eYpCMOdJMf3cGtm6g5w4mA/1NNkSFV3E/+AiEA+OhkcfRcA3xf0qWcXZmQkApXeCLkaBJkJRJ3cvtd+Nc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBqbOWBlmFD9Py6oLgGbfR8QFwRUX3mNaA8he2MCZ3OIAiAqLKztVcpfUIVnFmVJ5bdiJdNIGcloTGdnIL69wq4AAA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alloevil%2fagent-xray@1.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1273266},"main":"server.js","engines":{"node":">=22.13"},"gitHead":"41399e539ba441cfdf2bae11f1206366f9eede96","scripts":{"lint":"biome check .","test":"node --test test/*.test.js","start":"node server.js","format":"biome check --write .","prepare":"node -e \"process.exit(require('fs').existsSync('frontend/dist/index.html') ? 0 : 1)\" || npm run build:ui:full","build:ui":"node scripts/build-legacy-pure.mjs && cd frontend && npm run build","build:ui:full":"cd frontend && npm ci && cd .. && npm run build:ui","prepublishOnly":"node -e \"if (!require('fs').existsSync('frontend/dist/index.html')) { console.error('frontend/dist missing — run npm run build:ui:full'); process.exit(1); }\"","build:legacy-pure":"node scripts/build-legacy-pure.mjs"},"_npmUser":{"name":"alloevil","email":"alloevil@hotmail.com"},"overrides":{"qs":"^6.16.0"},"repository":{"url":"git+https://github.com/alloevil/AgentXRay.git","type":"git"},"_npmVersion":"10.9.8","description":"Web dashboard for viewing AI agent session logs — supports OpenClaw, Codex, Claude Code, Hermes, OMP, DeepSeek Harness, and Gemini CLI","directories":{},"_nodeVersion":"22.23.2","dependencies":{"express":"^4.21.2"},"_hasShrinkwrap":false,"devDependencies":{"@biomejs/biome":"^2.5.7"},"_npmOperationalInternal":{"tmp":"tmp/agent-xray_1.17.0_1788746429440_0.30786176166439905","host":"s3://npm-registry-packages-npm-production"}},"1.17.1":{"_id":"@alloevil/agent-xray@1.17.1","bin":{"agentxray":"bin/agentxray.js","agent-xray":"bin/agentxray.js"},"bugs":{"url":"https://github.com/alloevil/AgentXRay/issues"},"dist":{"shasum":"1ade3aac9790c70278cd0a1190df661da80a25ea","tarball":"https://registry.npmjs.org/@alloevil/agent-xray/-/agent-xray-1.17.1.tgz","fileCount":45,"integrity":"sha512-TWKgaUZZWtdd/h2hTOiQbfkrzHnjHaPjrarJYlI9eL4hzrWjU98IueScMiy9JFY1BgsSnvtI4fqyaMy+7fGbNA==","signatures":[{"sig":"MEQCIA3nb/hREsU60oC7AroVWDZofIo+ktVZpWEgtAc1W65+AiBp/kS1JllFSTRUjdcYbGiJspWVL87vz6lNlXAS4HxLNA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDmFD6hBX2oqLF5aTJ10Pc57QQP0O6Mz8lIo7CXatAcVAIhAN3LPufGuvuehnrkWDY/2poCFjNd1KP8rNI+aSF2XhuW"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alloevil%2fagent-xray@1.17.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1275322},"main":"server.js","name":"@alloevil/agent-xray","engines":{"node":">=22.13"},"gitHead":"bb5b891bbeb3dd9ab097c70793aa2c42dfaac51c","license":"MIT","scripts":{"lint":"biome check .","test":"node --test test/*.test.js","start":"node server.js","format":"biome check --write .","prepare":"node -e \"process.exit(require('fs').existsSync('frontend/dist/index.html') ? 0 : 1)\" || npm run build:ui:full","build:ui":"node scripts/build-legacy-pure.mjs && cd frontend && npm run build","build:ui:full":"cd frontend && npm ci && cd .. && npm run build:ui","prepublishOnly":"node -e \"if (!require('fs').existsSync('frontend/dist/index.html')) { console.error('frontend/dist missing — run npm run build:ui:full'); process.exit(1); }\"","build:legacy-pure":"node scripts/build-legacy-pure.mjs"},"version":"1.17.1","_npmUser":{"name":"alloevil","email":"alloevil@hotmail.com"},"homepage":"https://github.com/alloevil/AgentXRay#readme","keywords":["agent","logs","viewer","claude-code","codex","openclaw","hermes","deepseek","deepseek-harness","gemini","gemini-cli","jsonl","dashboard"],"overrides":{"qs":"^6.16.0"},"repository":{"url":"git+https://github.com/alloevil/AgentXRay.git","type":"git"},"_npmVersion":"10.9.8","description":"Web dashboard for viewing AI agent session logs — supports OpenClaw, Codex, Claude Code, Hermes, OMP, DeepSeek Harness, and Gemini CLI","directories":{},"maintainers":[{"name":"alloevil","email":"alloevil@hotmail.com"}],"_nodeVersion":"22.23.2","dependencies":{"express":"^4.21.2"},"_hasShrinkwrap":false,"devDependencies":{"@biomejs/biome":"^2.5.7"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/agent-xray_1.17.1_1788769918317_0.05314064928613327"}}},"time":{"created":"2026-08-19T11:38:08.433Z","modified":"2026-09-07T08:31:59.044Z","1.12.2":"2026-08-19T11:38:08.758Z","1.13.0":"2026-08-20T06:19:56.629Z","1.14.0":"2026-08-20T08:31:46.868Z","1.15.0":"2026-08-21T02:57:18.657Z","1.16.0":"2026-09-04T12:41:16.544Z","1.17.0":"2026-09-07T02:00:29.518Z","1.17.1":"2026-09-07T08:31:58.409Z"},"bugs":{"url":"https://github.com/alloevil/AgentXRay/issues"},"license":"MIT","homepage":"https://github.com/alloevil/AgentXRay#readme","keywords":["agent","logs","viewer","claude-code","codex","openclaw","hermes","deepseek","deepseek-harness","gemini","gemini-cli","jsonl","dashboard"],"repository":{"url":"git+https://github.com/alloevil/AgentXRay.git","type":"git"},"description":"Web dashboard for viewing AI agent session logs — supports OpenClaw, Codex, Claude Code, Hermes, OMP, DeepSeek Harness, and Gemini CLI","maintainers":[{"name":"alloevil","email":"alloevil@hotmail.com"}],"readme":"# AgentXRay\n\nAI Agent 会话 X 光透视工具，支持 **OpenClaw**、**Codex**、**Claude Code**、**Hermes**、**OMP**、**DeepSeek Harness** 和 **Gemini CLI** —— 一个界面全搞定。\n\n[English](README.md) | 中文\n\n**[在线 Demo](https://alloevil.github.io/AgentXRay/)**（合成示例数据，非真实用户会话）\n\n## 为什么是 AgentXRay\n\nAgentXRay 是一个 **local-first 的查看器，看的是你已经拥有的 agent 会话**。\n\nLangSmith、Langfuse 这类观测平台面向的是*你自己写的* agent：接入 SDK、埋点插桩，trace 上报到托管后端。做自研 agent 时它们很好用 —— 但 Claude Code、Codex、Gemini CLI 这些现成的 CLI coding agent 不是你的代码，没法插桩。它们本来就把完整会话日志写在你的磁盘上，AgentXRay 直接读这些日志：零接入、零配置，数据不出本机。\n\n相比自己翻原始 JSONL，AgentXRay 把七种日志格式归一化到一个界面里：工具调用与结果自动配对、token 用量按会话汇总、跨平台全文搜索、prompt 提取、trace 时间线 —— 这些从一份 50MB 的会话日志里手工还原起来非常费劲。\n\n如果你在生产环境构建和运营自己的 agent，请用 tracing 平台；如果你想看清 coding agent 到底干了什么，用 AgentXRay。\n\n![Main View](screenshots/main-view.png)\n\n## 功能特性\n\n- **多平台支持** — 一个界面统一查看 OpenClaw、Codex、Claude Code、Hermes、OMP、DeepSeek Harness、Gemini CLI 的会话日志（dsh 的多帧 zstd 压缩日志透明解压；Gemini CLI 的 `/rewind` 回滚记录会先折叠，回滚掉的历史不会重复渲染）\n- **会话浏览** — 浏览 Agent 列表，搜索/过滤会话，查看消息历史\n- **工具调用检查** — 可展开的工具调用详情，包含参数和返回结果\n- **Trace 视图** — 每轮对话的耗时瀑布图：模型推理（蓝）与工具执行（绿，出错为红）一目了然，点击色条跳转到对应消息\n- **Prompt 提取** — 按 session 提取全部真人 prompt（自动过滤工具结果、斜杠命令、系统注入等噪音），按工作目录分组，支持搜索 / JSON 导出 / 复制\n- **Prompt 优化** — 相似 prompt 自动聚类成模板，结合 session 效果归因（轮次、工具调用、错误率），通过本机 `claude` CLI 生成改写建议\n- **Prompt 资产库** — 把值得复用的 prompt 收进 `~/.agentxray/library`，支持标签 / 编辑 / 搜索，一键安装为 Claude Code、Codex、OMP 的原生 slash command（`$ARGUMENTS` 原样保留，在目标 CLI 里 `/名字 参数` 直接可用）\n- **全局搜索** — 一个搜索框同时搜七个平台，多关键词 AND 匹配，每条结果带平台色标 —— 包含从被 Claude Code 清理掉的会话里恢复出来的 prompt\n- **会话洞察** — 聚合分析面板：工具统计、错误聚类、每日趋势\n- **Spawn 追踪** — 检测并导航父子 Agent 之间的调用关系\n- **OMP 子 Agent** — OMP 会话派生的子 Agent 会在摘要区以标签列出，点击即可查看子 Agent 的完整对话\n- **消息时间线** — 可视化对话流程图，不同角色用不同颜色标识\n- **Resume 命令** — 一键复制该会话在原 CLI 中的续跑命令（`codex resume`、`claude --resume`、`omp --resume=`）\n- **摘要可折叠** — 需要更多阅读空间时可折叠会话摘要\n- **自动刷新** — 会话列表和消息实时更新\n- **设置面板** — 在页面上直接配置各平台目录，保存到 localStorage，无需重启\n- **会话备份** — 增量归档会话日志到 `~/.agentxray/archive`，在设置面板一键触发（也会每天自动执行），未变化的文件自动跳过\n- **键盘导航** — 使用方向键在会话之间切换\n\n## 截图预览\n\n### 会话浏览\n\n侧边栏浏览 Agent 和会话列表。每个会话卡片显示按角色分类的消息数（👤 用户、🤖 助手、🔧 工具）和 spawn 标记。主面板展示会话元数据、Token 用量和热门工具概览。\n\n![Main View](screenshots/main-view.png)\n\n### 工具调用检查\n\n展开任意工具调用可查看其参数和返回结果。折叠状态下按工具类型显示调用次数，方便快速扫视。\n\n![Tool Calls](screenshots/tool-calls.png)\n\n### Spawn 追踪\n\n含有子 Agent 的会话会标注 🔗 徽章。点击可导航父子 Agent 调用链。\n\n![Spawn Tracking](screenshots/spawn-tracking.png)\n\n### 多平台支持\n\n一键切换 OpenClaw、Codex、Claude Code、Hermes、OMP、DeepSeek Harness、Gemini CLI。每个平台的会话均从其原生日志格式解析。\n\n![Codex View](screenshots/codex-view.png)\n\n### 设置面板\n\n在页面上配置各平台目录，保存到 localStorage，无需重启服务。\n\n![Settings](screenshots/settings-panel.png)\n\n## 快速开始\n\n**方式一 — 通过 npm 使用 npx**（包发布到 npm 后可用）\n\n```bash\nnpx @alloevil/agent-xray            # 默认 http://localhost:3800\nnpx @alloevil/agent-xray --port 3900 --host 127.0.0.1\n```\n\n全局安装（`npm i -g agent-xray`）后可直接使用 `agentxray` 命令。\n\n**方式二 — 直接从 GitHub 运行 npx**（现在即可用，无需克隆）\n\n```bash\nnpx github:alloevil/AgentXRay\n```\n\n首次运行会在本地构建 Web UI（约一分钟），之后会复用缓存。\n\n**方式三 — 源码运行**\n\n```bash\ngit clone https://github.com/alloevil/AgentXRay.git\ncd AgentXRay\nnpm install               # 首次安装会自动构建 Web UI\nnpm start\n```\n\n打开 http://localhost:3800\n\n## 使用方法\n\n### 基本流程\n\n1. **选择平台** — 点击顶部 `OpenClaw`、`Codex`、`Claude Code`、`Hermes`、`OMP`、`DeepSeek Harness` 或 `Gemini CLI`\n2. **选择 Agent** — OpenClaw 平台下，从下拉菜单选择 Agent（如 `xiaot`、`mimo`）\n3. **浏览会话** — 会话按时间倒序排列，每张卡片显示：\n   - 时间戳和状态（`active` / `archived`）\n   - 消息计数：👤 用户、🤖 助手、🔧 工具调用\n   - 🔗 Spawn 标记（如果该会话产生了子 Agent）\n4. **查看消息** — 点击会话加载完整对话\n5. **检查工具调用** — 点击 `🔧 tool_name` 按钮展开参数/结果\n6. **导航 Spawn** — 点击 🔗 链接跳转到子 Agent 会话\n\n### Prompt 视图\n\n点击顶部 **Prompts** 标签（Sessions / Insights 旁），即可看到所有 session 的真人 prompt，按 session 所属工作目录分组。工具结果、斜杠命令回显、系统提醒、任务通知等噪音会被自动过滤。\n\n- **预览与展开** — 每个 session 行内直接预览首条 prompt，点击展开完整列表（markdown 渲染）\n- **搜索** — 实时过滤 prompt / 目录 / session\n- **Export JSON** — 导出全部提取的 prompt 用于离线处理\n- **分析优化** — 相似 prompt 聚类成模板，结合每个模板的 session 效果归因（平均轮次、工具调用、错误率），由 Claude 生成模板改写建议。需要服务器 PATH 中有 [`claude` CLI](https://claude.com/claude-code)；没有时聚类和归因表格仍可用\n- **优化单条** — 悬停任意 prompt 点击「优化」，内联生成 Claude 改写版本\n\n### 键盘快捷键\n\n| 按键 | 操作 |\n|------|------|\n| `↑` / `↓` | 在会话间切换 |\n| `Enter` | 选中高亮的会话 |\n\n### 过滤与搜索\n\n- **搜索框** — 按 ID 或内容过滤会话\n- **包含已归档** — 切换显示/隐藏已归档（`.reset.*` / `.deleted.*`）会话\n- **自动刷新** — 自动轮询获取新会话和消息\n- **自动滚动** — 新内容到达时自动滚动到最新消息\n\n## 配置\n\n### 默认目录\n\n| 平台        | 默认路径                      |\n|-------------|-------------------------------|\n| OpenClaw    | `~/.openclaw/agents`          |\n| Codex       | `~/.codex/sessions`           |\n| Claude Code | `~/.claude/projects`          |\n| Hermes      | `~/.hermes`                   |\n| OMP         | `~/.omp/agent/sessions`       |\n| DeepSeek Harness | `~/.dsh/sessions`（同时识别 `DSH_HOME`） |\n| Gemini CLI  | `~/.gemini/tmp`               |\n\n### 自定义目录\n\n**通过页面设置：** 点击侧边栏的齿轮图标，为每个平台设置自定义路径。保存到 localStorage，无需重启服务。\n\n**通过环境变量：**\n\n```bash\nOPENCLAW_DIR=/custom/path/openclaw \\\nCODEX_DIR=/custom/path/codex \\\nCLAUDE_CODE_DIR=/custom/path/claude \\\nHERMES_DIR=/custom/path/hermes \\\nOMP_DIR=/custom/path/omp \\\nDSH_DIR=/custom/path/dsh/sessions \\\nGEMINI_DIR=/custom/path/gemini/tmp \\\nnpm start\n```\n\n**通过 API：** 在任意 API 请求后附加 `?dir=/absolute/path` 参数。\n\n## API\n\n| 接口 | 说明 |\n|------|------|\n| `GET /api/agents` | 获取 OpenClaw Agent 列表 |\n| `GET /api/agents/:name/sessions` | 获取指定 Agent 的会话列表 |\n| `GET /api/agents/:name/sessions/:id` | 获取会话消息详情 |\n| `GET /api/codex/sessions` | 获取 Codex 会话列表 |\n| `GET /api/codex/sessions/:id` | 获取 Codex 会话消息详情 |\n| `GET /api/claude-code/sessions` | 获取 Claude Code 会话列表 |\n| `GET /api/claude-code/sessions/:id` | 获取 Claude Code 会话消息详情 |\n| `GET /api/hermes/sessions` | 获取 Hermes 会话列表 |\n| `GET /api/hermes/sessions/:id` | 获取 Hermes 会话消息详情 |\n| `GET /api/omp/sessions` | 获取 OMP（oh-my-pi）会话列表 |\n| `GET /api/omp/sessions/:id` | 获取 OMP 会话消息详情 |\n| `GET /api/dsh/sessions` | 获取 DeepSeek Harness 会话列表 |\n| `GET /api/dsh/sessions/:id` | 获取 DeepSeek Harness 会话消息详情 |\n| `GET /api/gemini/sessions` | 获取 Gemini CLI 会话列表 |\n| `GET /api/gemini/sessions/:id` | 获取 Gemini CLI 会话消息详情 |\n| `GET /api/spawn-map` | 获取 Agent spawn 关系图 |\n| `GET /api/insights` | 聚合分析（工具统计、错误聚类、趋势） |\n| `GET /api/prompts` | 按目录分组的各 session 真人 prompt |\n| `GET /api/prompts/analyze` | 模板聚类 + 效果归因 + Claude 建议（`?refresh=1` 重算，`?skipLlm=1` 仅聚类） |\n| `POST /api/prompts/rewrite` | 通过配置的 LLM 后端改写单条 prompt（`{ \"text\": \"...\" }`；无可用后端时返回 503 及配置指引） |\n| `GET/PUT /api/settings/llm` | LLM 后端配置：OpenAI 兼容 `baseUrl`/`model`/`apiKey`,持久化在 `~/.agentxray/llm.json`（key 不回显） |\n| `GET /api/search` | 会话全文搜索（`?platform=all` 一次搜索全部平台，多关键词 AND） |\n| `GET /api/omp/sessions/:id/children` | 获取该 OMP 会话派生的子 Agent 列表 |\n| `GET /api/omp/sessions/:id/children/:name` | 获取指定子 Agent 的消息详情 |\n| `GET /api/library` | 获取资产库 prompt 列表（含各目标的安装状态） |\n| `POST /api/library` | 新建 prompt（`{ \"name\": \"...\", \"content\": \"...\", \"description\": \"...\", \"tags\": [...] }`） |\n| `PUT /api/library/:name` | 更新 / 重命名 prompt（`newName`、`content`、`description`、`tags`），已安装的副本同步刷新 |\n| `DELETE /api/library/:name` | 删除 prompt 及其已安装的 slash command |\n| `POST /api/library/:name/install` | 安装为 slash command（`{ \"targets\": [\"claude\", \"codex\", \"omp\"] }`） |\n| `POST /api/library/:name/uninstall` | 卸载已安装的 slash command（请求体同上） |\n| `POST /api/library/suggest-name` | 通过配置的 LLM 后端为 prompt 生成库内命名（`{ \"text\": \"...\" }`，无可用后端时返回 `null`） |\n| `POST /api/backup` | 执行一次增量备份到 `~/.agentxray/archive` |\n| `GET /api/backup/status` | 归档统计：文件数、总字节数、最近备份时间 |\n\n所有列表和详情接口均支持 `?dir=` 参数来覆盖默认目录。\n\n## 技术栈\n\n- **后端：** Node.js + Express\n- **前端：** `frontend/` 下的 React + Vite + TypeScript（默认 UI，服务自 `frontend/dist`）\n- **Legacy UI：** `public/` 下的原版 vanilla HTML/CSS/JS 应用，服务于 `/legacy` —— **已冻结，仅接受安全修复**。新功能只进 React 应用；改动 React 渲染器无需触碰 `public/js/`。共享逻辑（格式化、trace 构建、markdown/转义管线）单一源在 `frontend/src/lib/pure.ts` 与 `frontend/src/lib/markdown.ts`,`public/js/pure.js` 由其生成（`npm run build:legacy-pure`,也包含在 `build:ui` 中）。\n- **数据：** 直接从磁盘读取 JSONL 会话文件 / SQLite 数据库\n- **零外部 CDN** — 完全自包含，离线可用\n\n## 支持的日志格式\n\n| 平台 | 格式 | 路径模式 |\n|------|------|----------|\n| OpenClaw | JSONL | `~/.openclaw/agents/{agent}/sessions/{id}.jsonl` |\n| Codex | JSONL | `~/.codex/sessions/{id}.jsonl` |\n| Claude Code | JSONL | `~/.claude/projects/*/sessions/*/session.jsonl` |\n| Hermes | SQLite | `~/.hermes/state.db` |\n| OMP | JSONL | `~/.omp/agent/sessions/*/{timestamp}_{id}.jsonl` |\n| DeepSeek Harness | JSONL / zstd 压缩 JSONL | `~/.dsh/sessions/{project}/{id}/session.jsonl[.zstd]` |\n| Gemini CLI | JSONL | `~/.gemini/tmp/{projectHash}/chats/session-*.jsonl` |\n\ndsh 的 `.jsonl.zstd` 日志是多个独立 Zstandard 帧的串联（每个持久化批次一帧）；AgentXRay 会扫描帧边界并逐帧解压，崩溃残留的尾部不完整帧会被容忍丢弃。读取压缩日志需要 Node.js ≥ 22.15（内置 zstd）；未压缩的 `session.jsonl` 在任何受支持的 Node 上都能读。\n\n启用「包含已归档」后，还会显示 `.jsonl.reset.*` 和 `.jsonl.deleted.*` 的归档会话。\n\n## 开发\n\n测试代码位于 `test/`，使用 Node 内置的测试运行器，无需额外依赖。先执行一次 `npm ci`，然后运行 `npm test`（即 `node --test test/*.test.js`）。测试会在随机端口上启动自己的服务实例，并把 `HOME` 及各平台目录都指向 `test/fixtures/home` 的临时副本，因此不会读取或修改你的真实会话日志。CI 在每次向 `master` 的 push 和 pull request 上以 Node 22 执行同样的两条命令（见 `.github/workflows/test.yml`）。\n\n**新增平台只需两个文件**：在 `lib/platforms/<name>.js` 写一个适配器（针对该日志格式的 list / find / parse / normalize，`lib/platforms/shared.js` 提供元数据缓存、归一化消息工厂和会话排序），再到 `lib/platforms/index.js` 的 `PLATFORMS` 注册表登记一条。通用会话路由、搜索、watch（SSE 实时跟踪）、洞察、Prompt 提取、工具体检、OTLP 与 Markdown/HTML 导出全部通过该注册表解析平台，无需改动其他文件。\n\n## 开源协议\n\nMIT\n","readmeFilename":"README.zh-CN.md"}