{"_id":"@bulolo/hermes-link","_rev":"18-3d6aaecec5c269fda7bfb5fbcd7973f9","name":"@bulolo/hermes-link","dist-tags":{"latest":"0.3.8"},"versions":{"0.1.0":{"name":"@bulolo/hermes-link","version":"0.1.0","keywords":["hermes","hermes-agent","relay","link","cli"],"license":"MIT","_id":"@bulolo/hermes-link@0.1.0","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"721e4e51c8112a1770969f9bd2bb4f9790f4ec4e","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.1.0.tgz","fileCount":8,"integrity":"sha512-375du8eAQfIaLAQtdOdE6V0fTOHfaV9bh4mHHOpjDHYFsp1OBBLFXnpJpFx7ILkrWyrMNkLgIYmiqJCQBF+iFw==","signatures":[{"sig":"MEQCIEpeyYCBxnFfc+bkpJTPLboE+g0yTQ5nCfJ0Y4QxRYidAiBlSxrc2jEKqTeqJ/xHOQSDUr1u8zK4MJZvWJ+lnoYGcA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89887},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"cc0b269d9a4dbab72a5aebc6f739b3108e117bc0","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","prepack":"npm run build","preinstall":"node ./scripts/check-node-version.mjs","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"_npmVersion":"10.9.3","description":"Hermes Link companion service and CLI for connecting hermes-agent through zhiji","directories":{},"_nodeVersion":"22.18.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.1.0_1778083346220_0.0030758508613499824","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bulolo/hermes-link","version":"0.2.0","keywords":["hermes","hermes-agent","relay","link","cli"],"license":"MIT","_id":"@bulolo/hermes-link@0.2.0","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"29365833af47fc5cda9ecc5d95ab1321e8db0a23","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.2.0.tgz","fileCount":10,"integrity":"sha512-8T1tJlGJ1dCNJQFWJqM7LzA6oelBqm5ezIQ+eQrMJHUVr6NHAC9LBDbYKX3OqkAL2tHDlR/cGc4/6ntCfjFxqA==","signatures":[{"sig":"MEUCIQDOYUGIjGUyVvDhUoYmG8/O7moCiLPP09PqqtTumyxn3wIgHlErNawfc1JC9Xus3UEUndl+eb8gVobShBNRS5s0wNA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167390},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"d66ab24c04efbf707bbc04878350b7e1ce293104","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","prepack":"npm run build","preinstall":"node ./scripts/check-node-version.mjs","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"_npmVersion":"10.9.3","description":"Hermes Link companion service and CLI for connecting hermes-agent through zhiji","directories":{},"_nodeVersion":"22.18.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.2.0_1778086461032_0.5638544993118115","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@bulolo/hermes-link","version":"0.2.1","keywords":["hermes","hermes-agent","relay","link","cli"],"license":"MIT","_id":"@bulolo/hermes-link@0.2.1","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"3343686a62c8f44b2a1ee14199775dd8173dda29","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.2.1.tgz","fileCount":10,"integrity":"sha512-WMc9uBH4zuv2SYMJ6fqpfeWUe3iZ3axBFQMHQDDtX8AJ4XtBgtyOFmvScHvEWEv390D+clLG2vrOlFAQzgEQiw==","signatures":[{"sig":"MEUCIGgZuCjTkON/VAd/PhaRp005Bj23ok9XnHgcxiXvS74OAiEAtLYQT925jnhg9x6XagF2inbU5oQ5vGmSSyXp1gHxH7s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167522},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"356591e88320177f0cedd517304c9f8d2a1adaf1","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","prepack":"npm run build","preinstall":"node ./scripts/check-node-version.mjs","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"_npmVersion":"10.9.3","description":"Hermes Link companion service and CLI for connecting hermes-agent through zhiji","directories":{},"_nodeVersion":"22.18.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.2.1_1778086969821_0.5510234109747976","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@bulolo/hermes-link","version":"0.2.2","keywords":["hermes","hermes-agent","relay","link","cli"],"license":"MIT","_id":"@bulolo/hermes-link@0.2.2","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"db14963fdb049585691b523c37f0ae99ecdd44a8","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.2.2.tgz","fileCount":10,"integrity":"sha512-8rQ0NoodK94k9xNHArBJmhFLPsOS8nntiKCGnoicvK1xKR7G1hps3VQfmGS/ZEUzvdjBVgxgnJ8dK8qEPd0phQ==","signatures":[{"sig":"MEQCIGmm2DydJ/XIbWFsOoJRWvb0AyqWu9r9yhlgfG8bmiPcAiAXfMuRwwtb1NpayTt98AX9sNOrHoYRb15OAplA6E5mdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164471},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"46b137b9fd11cd22baceb1dd226d4013c5c4c0f6","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","prepack":"npm run build","preinstall":"node ./scripts/check-node-version.mjs","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"_npmVersion":"10.9.3","description":"Hermes Link companion service and CLI for connecting hermes-agent through zhiji","directories":{},"_nodeVersion":"22.18.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.2.2_1778088033691_0.6357986100344926","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@bulolo/hermes-link","version":"0.2.3","keywords":["hermes","hermes-agent","relay","link","cli"],"license":"MIT","_id":"@bulolo/hermes-link@0.2.3","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"7764e8c057e8779795ee39ad30a96e849596ce50","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.2.3.tgz","fileCount":10,"integrity":"sha512-0sT2NWrtYJ5FE6xbR9z3Tmo81uokdNqxSioubmr7yh11SF29XcBYZMQMeb0OzZ2SZwg3NzjCZG/5rW1DF3lMYw==","signatures":[{"sig":"MEYCIQDKXgIy++6Hea2ZXuxwwjg4Le9abmhwt6+0unytegbC4QIhAKc5HdM+/kj0rlNLUzIZreBucC5vA/Hr7aNSKsNfAxmb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":165191},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"122ef8c17b746fc76de28b223f3105e1bea508ff","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","prepack":"npm run build","preinstall":"node ./scripts/check-node-version.mjs","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"_npmVersion":"10.9.3","description":"Hermes Link companion service and CLI for connecting hermes-agent through zhiji","directories":{},"_nodeVersion":"22.18.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.2.3_1778088272832_0.11869080499709317","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@bulolo/hermes-link","version":"0.2.6","keywords":["hermes","hermes-agent","relay","link","cli"],"license":"MIT","_id":"@bulolo/hermes-link@0.2.6","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"08589be1b03b2cc5a9a6763c9b62033877c2df35","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.2.6.tgz","fileCount":10,"integrity":"sha512-CAbYVkA5HwaBu9jAwgEF6N+cPO1LuFpnJDlfqCMzghGU5NvXTuvPPlBJFdA8MAmXNRLuZc/PkseVkG7MPAGG5w==","signatures":[{"sig":"MEUCIF3bDVcKmfR4BxDHWUfVR3yEhWgLMqKRJ0pNiccW0cxkAiEA7k/jmDJgKxccTt/UO2kWzzBSxiw1E7agt2ULpQ9De4Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":165751},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"0dfecc71ac96f5c6c522a0d71a8836038f103ddb","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","prepack":"npm run build","preinstall":"node ./scripts/check-node-version.mjs","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"_npmVersion":"10.9.3","description":"Hermes Link companion service and CLI for connecting hermes-agent through zhiji","directories":{},"_nodeVersion":"22.18.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.2.6_1778088727922_0.4098319245961999","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@bulolo/hermes-link","version":"0.2.7","keywords":["hermes","hermes-agent","relay","link","cli"],"license":"MIT","_id":"@bulolo/hermes-link@0.2.7","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"440f6a6319433dffce83e4b8c3db198bbc8c881f","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.2.7.tgz","fileCount":10,"integrity":"sha512-Fh4FujIsXfHwcx58FQcePXIjSxbPigqXmnhN2nR/7rWFe8D4GwS3YOZ7SIk/Rf0asVklH4DIBL4v3P0fGu5knA==","signatures":[{"sig":"MEUCIGMF27HEzS4+ktYhuksRYrFOSD0EcEAolblg6TzaidxWAiEA8AXJta63XPabsbTJ4nCy5d2KmFciBNoiCwdCHR6jmts=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":166387},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"74a125ac279558ae0066b693a39f12fb5f71b868","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","prepack":"npm run build","preinstall":"node ./scripts/check-node-version.mjs","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public --registry https://registry.npmjs.org"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"_npmVersion":"10.9.3","description":"Hermes Link companion service and CLI for connecting hermes-agent through zhiji","directories":{},"_nodeVersion":"22.18.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.2.7_1778089128323_0.7347233263798421","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@bulolo/hermes-link","version":"0.2.8","keywords":["hermes","hermes-agent","relay","link","cli"],"license":"MIT","_id":"@bulolo/hermes-link@0.2.8","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"4d22d29b090d99ae201c2eed34fad61553c795e4","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.2.8.tgz","fileCount":10,"integrity":"sha512-7hk5/PzxeHkc8Jl4r8BcjxdfGyP5PboPnd2fBQzhwZcoIx5EwDU85lDX6kRPrX73s24qa6p2uUNwn14RgDpMbA==","signatures":[{"sig":"MEUCIQDHakVh3I5u4Dq/gBpqWmG3gGcaYuSwhXgDPcw+JuSDzAIgD271o+OKW3RgD0srS0IUhf7eCFWea+A+XjowaLw5juc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":166197},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"d42f14b2d40ad4b72b4e0d346e1c21caa69da677","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","prepack":"npm run build","preinstall":"node ./scripts/check-node-version.mjs","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public --registry https://registry.npmjs.org"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"_npmVersion":"10.9.3","description":"Hermes Link companion service and CLI for connecting hermes-agent through zhiji","directories":{},"_nodeVersion":"22.18.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.2.8_1778089295591_0.05477297185418606","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@bulolo/hermes-link","version":"0.2.9","keywords":["hermes","hermes-agent","relay","link","cli"],"license":"MIT","_id":"@bulolo/hermes-link@0.2.9","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"d09cc6ecd9f81e83ddd4b48c553008ae97343acf","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.2.9.tgz","fileCount":10,"integrity":"sha512-R01sfOQ6TE1wRFxTLZ0QDqsMIBT4B2Q/mbmqgQVPyKeTPsOjFGjHDWyqwV5rh2GDGpBKN5siM2rXq3hcenbIsQ==","signatures":[{"sig":"MEUCIQD/LMASV6gwZz1YXjBLvxtGCTK6K/uRlWaXUXF4mBX3/wIgBMygdnGaO5zg0dnuEnQQvZoFHjzVskKXpfkirtbJXXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167068},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"d42f14b2d40ad4b72b4e0d346e1c21caa69da677","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","prepack":"npm run build","preinstall":"node ./scripts/check-node-version.mjs","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public --registry https://registry.npmjs.org"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"_npmVersion":"10.9.3","description":"Hermes Link companion service and CLI for connecting hermes-agent through zhiji","directories":{},"_nodeVersion":"22.18.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.2.9_1778089854048_0.7201437417263972","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bulolo/hermes-link","version":"0.3.0","keywords":["hermes","hermes-agent","link","cli","local","lan"],"license":"MIT","_id":"@bulolo/hermes-link@0.3.0","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"82e7c37fb41e4c941a57e3609167a07007094356","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.3.0.tgz","fileCount":12,"integrity":"sha512-PJ1WUxouGKH+oQQFe5KnFhDiNe0UVPD9gzjlk7Pq9ZvhHqFiRnQI2UmmqQ1XVg7ztj902BvmSMmDfkHWURKGfQ==","signatures":[{"sig":"MEQCIGP4DKzOgVbtug5ONRU2eiWpRa/6+Nur76SFpq84E1F8AiBvL/Y/AeFx8l4h0ICes1mtuzYpYo6RzL/VvjBzPfbnrQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":378543},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"f5d00c331c7221d975485b58aa6321ab81459ef4","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest run","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","dev:run":"npm run build && node ./dist/cli/index.js daemon --foreground","prepack":"npm run build","test:e2e":"vitest run tests/e2e","dev:watch":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --watch","preinstall":"node ./scripts/check-node-version.mjs","test:watch":"vitest","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public --registry https://registry.npmjs.org"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"overrides":{"generator-function":"1.x"},"_npmVersion":"10.9.3","description":"Local companion service and CLI for Hermes Agent, enabling mobile and LAN access","directories":{},"_nodeVersion":"22.18.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.3.0_1778254068241_0.19066529142603295","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@bulolo/hermes-link","version":"0.3.1","keywords":["hermes","hermes-agent","link","cli","local","lan"],"license":"MIT","_id":"@bulolo/hermes-link@0.3.1","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"eb42ff89f16ee26bfedbfc96656b10a37896ad4f","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.3.1.tgz","fileCount":13,"integrity":"sha512-NDHRbkksUGH0EX5iRfWX5Xi289Pq6DSrIrCKptiTAsYfHKyCnyngkMK7pF4ZbBOniJ/G9hTFDBtX/cv3qiKloA==","signatures":[{"sig":"MEUCIQDzT41C/xZfzTPaJVDsFoFZNASurZymoYECDZR27+5opQIgNcgmKPDQoVom6pIdnVdDyPDW9Ht3e7gj7YXlWHn2vf8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":401872},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"60df95d8af821913957c128c40cb8c2017eb7e14","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest run","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","dev:run":"npm run build && node ./dist/cli/index.js daemon --foreground","prepack":"npm run build","test:e2e":"vitest run tests/e2e","dev:watch":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --watch","preinstall":"node ./scripts/check-node-version.mjs","test:watch":"vitest","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public --registry https://registry.npmjs.org"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"overrides":{"generator-function":"1.x"},"_npmVersion":"10.9.3","description":"Local companion service and CLI for Hermes Agent, enabling mobile and LAN access","directories":{},"_nodeVersion":"22.18.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.3.1_1778255005784_0.27713131715871286","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@bulolo/hermes-link","version":"0.3.2","keywords":["hermes","hermes-agent","link","cli","local","lan"],"author":{"name":"Bulolo"},"license":"MIT","_id":"@bulolo/hermes-link@0.3.2","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"332fb6741c309e767aa3633a3268d47bf6ded885","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.3.2.tgz","fileCount":13,"integrity":"sha512-jvan3w8D0lFaolGDZAk2CnjfWuGSjmsUfKzOY0+DOzoKouw5yJT3k3l+spM+11CBf6NZWSrCmqE5z4qSsy3v4Q==","signatures":[{"sig":"MEYCIQDVnHDGrvN3B1aM4Cjr3REf76uInlHyjOxkQjcCbxr/gwIhAJTMN8P60ls8t7OBzlbWi/tkC2PCfqRLqOzISIhHsxkl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":420778},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"9a0fd81cebb49be199880d8a721ec6ec0844ef7b","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest run","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","dev:run":"npm run build && node ./dist/cli/index.js daemon --foreground","prepack":"npm run build","test:e2e":"vitest run tests/e2e","dev:watch":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --watch","preinstall":"node ./scripts/check-node-version.mjs","test:watch":"vitest","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public --registry https://registry.npmjs.org"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"overrides":{"generator-function":"1.x"},"_npmVersion":"10.9.2","description":"Provides full client API, multi-device auth and conversation management for Hermes Agent, with LAN and internet connectivity.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.3.2_1778301986095_0.45159730052477576","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@bulolo/hermes-link","version":"0.3.3","keywords":["hermes","hermes-agent","link","cli","local","lan"],"author":{"name":"Bulolo"},"license":"MIT","_id":"@bulolo/hermes-link@0.3.3","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"13e71a26cf3fd41ce56d3f7e86f3295c98af3385","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.3.3.tgz","fileCount":13,"integrity":"sha512-lQzM/xWyaHo3qRjp+e/v4EktJ3HsUUVzKWSE8SQOOzyKUz3JdJbI2GoDyul52NRIYYwNHIqyVED7RH6Xyod7Tw==","signatures":[{"sig":"MEYCIQCuSGhCM1HE9OJc97dQa7CO0iK9RgYduZeyooYq/NJeQwIhAOGvvP0+FYINcsH4GkzYJC/UUFUuS4ieVi755p5WygSk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":420809},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"8ff289ee7c7e7519473ee8c7863be6862b58f077","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest run","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","dev:run":"npm run build && node ./dist/cli/index.js daemon --foreground","prepack":"npm run build","test:e2e":"vitest run tests/e2e","dev:watch":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --watch","preinstall":"node ./scripts/check-node-version.mjs","test:watch":"vitest","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public --registry https://registry.npmjs.org"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"overrides":{"generator-function":"1.x"},"_npmVersion":"10.9.2","description":"Provides full client API, multi-device auth and conversation management for Hermes Agent, with LAN and internet connectivity.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.3.3_1778302461281_0.18675468545776375","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@bulolo/hermes-link","version":"0.3.4","keywords":["hermes","hermes-agent","link","cli","local","lan"],"author":{"name":"Bulolo"},"license":"MIT","_id":"@bulolo/hermes-link@0.3.4","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"0f04db3e128a7433ea797ac379175bf724e0d2fb","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.3.4.tgz","fileCount":13,"integrity":"sha512-Y6iNAs+kZpjCKRsmu5T7MGraCPmehlO4MLv5mW2qwBQyE+FW0HCP8GLS0iJ9sFIzIg8RT54D+JWHExi9XZnlCg==","signatures":[{"sig":"MEUCIDxOfYs7cM2YzCidddxNtC0yv+AVbcZQnzgWigLRo4fOAiEA9iuen0A5lsoF5cCp9kmRltU6DR+w0wf09ytqW/0+ErA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":420810},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"109bd2105499d3762f846e1195e3a59e0fcfccf1","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest run","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","dev:run":"npm run build && node ./dist/cli/index.js daemon --foreground","prepack":"npm run build","test:e2e":"vitest run tests/e2e","dev:watch":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --watch","preinstall":"node ./scripts/check-node-version.mjs","test:watch":"vitest","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public --registry https://registry.npmjs.org"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"overrides":{"generator-function":"1.x"},"_npmVersion":"10.9.2","description":"Provides full client API, multi-device auth and conversation management for Hermes Agent, with LAN and internet connectivity.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.3.4_1778302581500_0.7736737041466366","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@bulolo/hermes-link","version":"0.3.5","keywords":["hermes","hermes-agent","link","cli","local","lan"],"author":{"name":"Bulolo"},"license":"MIT","_id":"@bulolo/hermes-link@0.3.5","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"e5e9f3c5c4ac8418c9141f90c818364c2b238b79","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.3.5.tgz","fileCount":13,"integrity":"sha512-HCCAv/FfGT9pmWysiZhL/HmYHCOolNujmFxPr95h8+AGMm0K4WECEZmdiMvBGi+gvDH6jJyCBXJyZMocx4rjkA==","signatures":[{"sig":"MEYCIQCVeJ9xxc2Dx9C9D0m2JLO6UbVFiSWd0t9FUn6LnXCzjQIhALtAU0vwLghKt5C93nrb39DO2hdDpcO53eZNr8sb/lR6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":427102},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"109bd2105499d3762f846e1195e3a59e0fcfccf1","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest run","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","dev:run":"npm run build && node ./dist/cli/index.js daemon --foreground","prepack":"npm run build","test:e2e":"vitest run tests/e2e","dev:watch":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --watch","preinstall":"node ./scripts/check-node-version.mjs","test:watch":"vitest","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public --registry https://registry.npmjs.org"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"overrides":{"generator-function":"1.x"},"_npmVersion":"10.9.2","description":"Provides full client API, multi-device auth and conversation management for Hermes Agent, with LAN and internet connectivity.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.3.5_1778303361250_0.963443171684035","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@bulolo/hermes-link","version":"0.3.6","keywords":["hermes","hermes-agent","link","cli","local","lan"],"author":{"name":"Bulolo"},"license":"MIT","_id":"@bulolo/hermes-link@0.3.6","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"25bfda9e6aa71cb4640b0eef7596e02fd590ea10","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.3.6.tgz","fileCount":13,"integrity":"sha512-pu3q+siL+p9FLkR1xwfrrWl6SUiRn0SvtYWM8ibpo4RhQctXWCSMz/ZLuiSSuElQV1L//3+9HfiIb78UrxOhMw==","signatures":[{"sig":"MEYCIQDSmv5o8T8bVticXHt8WLFMdomuqoRmfsXUzA2GZKK6UAIhAPWPytZcWHQxgBDelPMW9GoKIkydyK3rYVfN/dZL0oYB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":432672},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"2460e32f4efb954c6641754a108840008a34f7e5","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest run","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","dev:run":"npm run build && node ./dist/cli/index.js daemon --foreground","prepack":"npm run build","test:e2e":"vitest run tests/e2e","dev:watch":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --watch","preinstall":"node ./scripts/check-node-version.mjs","test:watch":"vitest","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public --registry https://registry.npmjs.org"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"overrides":{"generator-function":"1.x"},"_npmVersion":"10.9.2","description":"Provides full client API, multi-device auth and conversation management for Hermes Agent, with LAN and internet connectivity.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.3.6_1778306025745_0.1121356476259947","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"@bulolo/hermes-link","version":"0.3.7","keywords":["hermes","hermes-agent","link","cli","local","lan"],"author":{"name":"Bulolo"},"license":"MIT","_id":"@bulolo/hermes-link@0.3.7","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"bin":{"hermeslink":"dist/cli/index.js"},"dist":{"shasum":"64d4338385ecf52190230a1f74b5ce09beee3ecf","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.3.7.tgz","fileCount":13,"integrity":"sha512-cxgGX3jUSBC564Uk5U03221+znbYxg2IS1YdGT6pBfdnuQcfGydn03ITwGFOAclwJfZRVKU2FrZSpkuj8peutw==","signatures":[{"sig":"MEYCIQDHm/uRgrACiq6TwotoXuYwT0vK8/4QktjrNSQl5bgAVgIhAIkkls09a6B0e9gYKHvWaTf34oCrtWxJVIsf4Tqp0nM5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":432510},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"3da8d7ed2711eb3b36f48a7f28f2af1cccebd334","scripts":{"dev":"tsx src/cli/index.ts","test":"vitest run","build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","start":"node ./dist/cli/index.js","dev:run":"npm run build && node ./dist/cli/index.js daemon --foreground","prepack":"npm run build","test:e2e":"vitest run tests/e2e","dev:watch":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --watch","preinstall":"node ./scripts/check-node-version.mjs","test:watch":"vitest","postinstall":"node ./scripts/postinstall.mjs","publish:npm":"npm publish --access public --registry https://registry.npmjs.org"},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"overrides":{"generator-function":"1.x"},"_npmVersion":"10.9.2","description":"Provides full client API, multi-device auth and conversation management for Hermes Agent, with LAN and internet connectivity.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"ws":"^8.18.0","koa":"^2.15.3","zod":"^3.24.1","pino":"^9.0.0","yaml":"^2.6.1","qrcode":"^1.5.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa-bodyparser":"^4.4.1","qrcode-terminal":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","vitest":"^2.1.8","@types/ws":"^8.5.13","@types/koa":"^2.15.0","typescript":"^5.7.2","@types/node":"^20.19.39","pino-pretty":"^13.0.0","@types/qrcode":"^1.5.6","@types/koa__cors":"^5.0.1","@types/better-sqlite3":"^7.6.13","@types/koa-bodyparser":"^4.3.12","@types/qrcode-terminal":"^0.12.2"},"_npmOperationalInternal":{"tmp":"tmp/hermes-link_0.3.7_1778307157336_0.4718079856218813","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"@bulolo/hermes-link","version":"0.3.8","description":"Provides full client API, multi-device auth and conversation management for Hermes Agent, with LAN and internet connectivity.","author":{"name":"Bulolo"},"license":"MIT","type":"module","bin":{"hermeslink":"dist/cli/index.js"},"keywords":["hermes","hermes-agent","link","cli","local","lan"],"publishConfig":{"access":"public"},"engines":{"node":">=20.0.0"},"scripts":{"build":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --dts --clean","check":"tsc --noEmit","dev":"tsup src/cli/index.ts src/http/app.ts --format esm --target node20 --watch --onSuccess \"node ./dist/cli/index.js daemon --foreground\"","preinstall":"node ./scripts/check-node-version.mjs","postinstall":"node ./scripts/postinstall.mjs","prepack":"npm run build","start":"node ./dist/cli/index.js","test":"vitest run","test:watch":"vitest","test:e2e":"vitest run tests/e2e","publish:npm":"npm publish --access public --registry https://registry.npmjs.org"},"overrides":{"generator-function":"1.x"},"dependencies":{"@asteasolutions/zod-to-openapi":"^7.3.4","@koa/cors":"^5.0.0","@koa/router":"^15.4.0","better-sqlite3":"^12.9.0","koa":"^2.15.3","koa-bodyparser":"^4.4.1","pino":"^9.0.0","qrcode":"^1.5.4","qrcode-terminal":"^0.12.0","ws":"^8.18.0","yaml":"^2.6.1","zod":"^3.24.1"},"devDependencies":{"@types/better-sqlite3":"^7.6.13","@types/koa":"^2.15.0","@types/koa__cors":"^5.0.1","@types/koa-bodyparser":"^4.3.12","@types/node":"^20.19.39","@types/qrcode":"^1.5.6","@types/qrcode-terminal":"^0.12.2","@types/ws":"^8.5.13","pino-pretty":"^13.0.0","tsup":"^8.3.5","tsx":"^4.19.2","typescript":"^5.7.2","vitest":"^2.1.8"},"_id":"@bulolo/hermes-link@0.3.8","gitHead":"e2d07712424b076b39563f5dd6a318d915c5e447","_nodeVersion":"22.17.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-e8r/HReq+nGPAB7Olv7CGAI3M7KYeGTO+DITntTFq8/xW0Touos5Nz9vQoeAgto0GnhcoE+bxV41doqV1Dm7xA==","shasum":"8171573bc0e452593b8add2bbbe6644811ca6bcf","tarball":"https://registry.npmjs.org/@bulolo/hermes-link/-/hermes-link-0.3.8.tgz","fileCount":13,"unpackedSize":491418,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDshO0/CTG4k4QkP14NIbitRZJZpV0nEZWtxAYTLzytwAiEAkQjcBeF1oqJLVke/PHJ8uw+jS5mJDq6N9GT+Ge9Q9qs="}]},"_npmUser":{"name":"bulolo","email":"82607314@qq.com"},"directories":{},"maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hermes-link_0.3.8_1778310297265_0.980964095961335"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-06T16:02:26.128Z","modified":"2026-05-09T07:04:57.583Z","0.1.0":"2026-05-06T16:02:26.417Z","0.2.0":"2026-05-06T16:54:21.162Z","0.2.1":"2026-05-06T17:02:49.966Z","0.2.2":"2026-05-06T17:20:33.859Z","0.2.3":"2026-05-06T17:24:32.966Z","0.2.6":"2026-05-06T17:32:08.091Z","0.2.7":"2026-05-06T17:38:48.497Z","0.2.8":"2026-05-06T17:41:35.739Z","0.2.9":"2026-05-06T17:50:54.213Z","0.3.0":"2026-05-08T15:27:48.471Z","0.3.1":"2026-05-08T15:43:25.964Z","0.3.2":"2026-05-09T04:46:26.260Z","0.3.3":"2026-05-09T04:54:21.446Z","0.3.4":"2026-05-09T04:56:21.656Z","0.3.5":"2026-05-09T05:09:21.407Z","0.3.6":"2026-05-09T05:53:45.930Z","0.3.7":"2026-05-09T06:12:37.512Z","0.3.8":"2026-05-09T07:04:57.457Z"},"author":{"name":"Bulolo"},"license":"MIT","keywords":["hermes","hermes-agent","link","cli","local","lan"],"description":"Provides full client API, multi-device auth and conversation management for Hermes Agent, with LAN and internet connectivity.","maintainers":[{"name":"bulolo","email":"82607314@qq.com"}],"readme":"<div align=\"center\">\n\n# hermes-link\n\n**Hermes Agent 本地接入层**\n\n为 [Hermes Agent](https://github.com/nousresearch/hermes-agent) 提供完整的客户端 API、多设备鉴权与对话管理，支持局域网 / 公网直连。\n\n[![npm](https://img.shields.io/npm/v/@bulolo/hermes-link?color=cb3837&logo=npm)](https://www.npmjs.com/package/@bulolo/hermes-link)\n[![Node](https://img.shields.io/badge/Node.js-%3E%3D20-339933?logo=node.js&logoColor=white)](https://nodejs.org/)\n[![License](https://img.shields.io/badge/License-MIT-blue)](#)\n[![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey)](#)\n\n**简体中文** | [English](./README.md)\n\n[npm 包](https://www.npmjs.com/package/@bulolo/hermes-link)\n\n<p>\n  <a href=\"https://github.com/bulolo/HermesLink\">\n    <img src=\"https://img.shields.io/badge/⭐_Star-项目-yellow?style=for-the-badge&logo=github\" alt=\"Star 项目\"/>\n  </a>\n</p>\n\n**如果这个项目对你有帮助，请点击右上角 ⭐ Star 支持一下，这是对开发者最大的鼓励！**\n\n</div>\n\n---\n\n## 概述\n\nHermes Link 是一个运行在本机的后台 HTTP 服务，默认监听 `http://0.0.0.0:18642`。客户端（App / 浏览器）通过公网或局域网直接访问，对话、文件、指令均在本地处理，数据不经过外部服务器。\n\n所有 API 请求分为两类：\n\n- **无需鉴权**：`/pair`、`/api/v1/bootstrap`\n- **需要 Bearer Token**：其余接口均需 `Authorization: Bearer hlat_xxx`，通过配对流程获取\n\n## 为什么需要 HermesLink？\n\nHermes Agent 内置了一个 API Server（端口 8642），但它只有 **12 个接口**：\n\n| 功能 | Hermes API Server `:8642` | HermesLink `:18642` |\n|------|:---:|:---:|\n| 接口数量 | 12 | **97** |\n| Agent 执行 / 事件流 | ✓ | ✓（代理转发） |\n| 模型列表 / 定时任务 | ✓ | ✓（代理转发） |\n| 认证 | 单一共享 Key | 设备独立 Token，可单独吊销 |\n| 设备配对 | — | ✓ 二维码 / 多设备管理 |\n| 对话存储 | — | ✓ 本地历史 + 附件 |\n| Profile & Memory 管理 | — | ✓ 多 Profile、记忆、权限、工具开关 |\n| 使用统计 | — | ✓ Token 用量按日期 / 模型 / Profile |\n| 工具调用审批 | — | ✓ Approve / deny 流程 |\n| 更新管理 / 开机自启 | — | ✓ |\n\n### 如何选择\n\n- **只需本机脚本 / 受信任内部服务直连** → 直接用 Hermes API Server（8642）\n- **开发移动 App 或多设备接入** → 需要 HermesLink（18642）\n- **需要对话历史 / Profile / 统计等完整功能** → 需要 HermesLink（18642）\n\n## 工作原理\n\n```\n客户端（浏览器 / App）\n   │\n   └──→ hermeslink (本机, 端口 18642)\n              │\n              ├── 鉴权 / 设备管理 / 对话存储 / Profile & Memory    ← HermesLink 自身处理（~87 个接口）\n              │\n              └──→ Hermes Agent API Server (127.0.0.1:8642)         ← 仅 runs / models / cron jobs（~10 个接口）\n```\n\n绝大多数功能由 HermesLink 独立完成，不依赖 API Server。API Server 未运行时，认证、配对、对话查询、Profile 管理等接口仍可正常使用，仅 Agent 执行、模型列表、定时任务不可用。所有数据均存储在本机，不经过外部服务器。\n\n## 环境要求\n\n### 1. Node.js >= 20.0.0\n\n```bash\nnode --version   # 需要 >= v20.0.0\n```\n\n如未安装，推荐通过 [nvm](https://github.com/nvm-sh/nvm) 安装：\n\n```bash\nnvm install 20\nnvm use 20\n```\n\n### 2. 启动 Hermes Agent API Server\n\nHermes Link 通过 `127.0.0.1:8642` 与本机的 **Hermes Agent API Server** 通信。\n\n> 如果 Hermes Agent API Server 未运行，对话、Profiles 等功能将无法使用，但认证、配对、设备管理、日志等基础接口仍可正常工作。\n\n在 `~/.hermes/.env` 中添加以下配置以启用 API Server：\n\n```bash\nAPI_SERVER_ENABLED=true\nAPI_SERVER_KEY=your-secret-key\nAPI_SERVER_HOST=0.0.0.0\nAPI_SERVER_CORS_ORIGINS=*\nGATEWAY_ALLOW_ALL_USERS=true\n```\n\n| 配置项 | 说明 |\n|--------|------|\n| `API_SERVER_ENABLED` | 设为 `true` 开启 API Server |\n| `API_SERVER_KEY` | 认证密钥，替换为强随机字符串 `openssl rand -hex 32` |\n| `API_SERVER_HOST` | 监听地址，`0.0.0.0` 允许本机所有网卡 |\n| `API_SERVER_CORS_ORIGINS` | CORS 来源，本地调试可设为 `*` |\n\n配置完成后启动：\n\n```bash\nhermes gateway stop\nhermes gateway start\n或者\nhermes gateway restart\n```\n\n验证是否就绪：\n\n```bash\ncurl -s http://127.0.0.1:8642/v1/health\n```\n\n如缺失或版本过旧：\n\n```bash\nhermes update\n```\n\n## 安装\n\nnpm 包地址：[https://www.npmjs.com/package/@bulolo/hermes-link](https://www.npmjs.com/package/@bulolo/hermes-link)\n\n```bash\nnpm install -g @bulolo/hermes-link@latest --registry=https://registry.npmjs.org\n\n```\n\n> 安装后如果终端找不到 `hermeslink` 命令，说明 npm 全局 bin 目录不在 PATH 中，运行以下命令添加：\n>\n> ```bash\n> export PATH=\"$(npm prefix -g)/bin:$PATH\"\n> ```\n>\n> 也可以直接用完整路径调用：`$(npm prefix -g)/bin/hermeslink`\n\n## 快速开始\n\n```bash\n# 1. 启动后台服务\nhermeslink start\n\n# 2. 生成配对页面（浏览器打开完成配对）\nhermeslink pair\n\n# 3. 查看状态\nhermeslink status\n\n# 4. 查看日志\nhermeslink logs\n```\n\n## 配对流程\n\n### 方式一：App 扫码配对（标准流程）\n\n二维码内容是一段 JSON，App 解析后获取连接所需的全部信息：\n\n```json\n{\n  \"kind\": \"hermes_link_pairing\",\n  \"version\": 1,\n  \"link_id\": \"link_xxx\",\n  \"display_name\": \"Hermes Link\",\n  \"session_id\": \"ps_xxx\",\n  \"code\": \"xxx\",\n  \"preferred_urls\": [\"http://192.168.1.10:18642\", \"http://127.0.0.1:18642\"]\n}\n```\n\nApp 拿到上述信息后：\n\n```\n1. 取 preferred_urls[0] 作为服务地址（优先局域网 IP）\n2. POST {baseUrl}/api/v1/pairing/claim\n   Body: { \"session_id\": \"...\", \"claim_token\": \"<code 字段的值>\" }\n3. 响应中获得 access_token 和 refresh_token\n4. 后续 API 请求携带 Authorization: Bearer <access_token>\n```\n\n### 方式二：浏览器配对\n\n```bash\nhermeslink pair\n# 在浏览器打开终端输出的 Pairing page URL\n# 点击\"在此设备上配对\"，页面直接显示 access_token 和 refresh_token\n```\n\n### 方式三：命令行脚本（适合自动化）\n\n```bash\n# 1. 获取 connect_token\nCONNECT_TOKEN=$(hermeslink pair 2>&1 | grep \"Connect token:\" | awk '{print $NF}')\n\n# 2. 用 connect_token 换 access_token\ncurl -s -X POST http://localhost:18642/api/v1/auth/device-session \\\n  -H \"Authorization: Bearer $CONNECT_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"device_label\":\"my-script\",\"device_platform\":\"cli\"}'\n```\n\n---\n\n> **Token 有效期**：access_token 2 小时，refresh_token 90 天。access_token 过期后用 refresh_token 换新，无需重新配对。\n\n## 命令一览\n\n| 命令 | 说明 |\n|------|------|\n| `hermeslink start` | 启动后台守护进程 |\n| `hermeslink stop` | 停止守护进程 |\n| `hermeslink restart` | 重启守护进程 |\n| `hermeslink status` | 查看运行状态 |\n| `hermeslink pair` | 生成配对 URL 和二维码 |\n| `hermeslink config get` | 查看当前配置 |\n| `hermeslink config set <key> <value>` | 修改配置 |\n| `hermeslink autostart on` | 开机自启（同 `enable`）|\n| `hermeslink autostart off` | 关闭自启（同 `disable`）|\n| `hermeslink logs` | 查看 Link 日志 |\n| `hermeslink logs --gateway` | 查看 Hermes 网关日志 |\n| `hermeslink logs -n 100` | 查看最近 100 条日志 |\n| `hermeslink version` | 查看版本号 |\n\n## 配置\n\n```bash\nhermeslink config set port 18642              # 修改监听端口（默认 18642）\nhermeslink config set lan-host 192.168.1.10   # 手动指定局域网 IP（默认自动检测）\nhermeslink config set language zh-CN          # 语言：auto / en / zh-CN\nhermeslink config set log-level debug         # 日志级别：debug / info / warn / error\n```\n\n配置文件位于 `~/.hermeslink/config.json`。\n\n## API 参考\n\n服务默认监听 `http://0.0.0.0:18642`。所有需要鉴权的接口均使用 Bearer Token（`hlat_` 前缀）。\n\n交互式 Swagger 文档：**`http://localhost:18642/api/docs`**\n\n### Token 说明\n\n| Token | 前缀 | 有效期 | 用途 |\n|-------|------|--------|------|\n| Connect Token | 无前缀（base64url）| 5 分钟，一次性 | 兑换 access_token |\n| Access Token | `hlat_` | 2 小时 | 所有 API 请求 |\n| Refresh Token | `hlrt_` | 90 天 | 刷新 access_token |\n\n### 无需鉴权\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| GET | `/pair` | 配对网页（浏览器打开） |\n| GET | `/api/v1/bootstrap` | 服务基础信息，含 link_id、版本、能力 |\n\n### 认证 / 设备\n\n所有以下接口需要 Header：`Authorization: Bearer hlat_xxx`\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| GET | `/api/v1/auth/me` | 当前 Token 信息及设备信息 |\n| POST | `/api/v1/auth/device-session` | 用 connect_token 换取 access/refresh token |\n| POST | `/api/v1/auth/refresh` | 用 refresh_token 换新 access_token |\n| POST | `/api/v1/auth/logout` | 撤销 refresh_token |\n\n**POST `/api/v1/auth/device-session`** 的 Authorization 头需放 **connect_token**（不是 hlat_），Body：\n\n```json\n{\n  \"device_label\": \"我的设备\",\n  \"device_platform\": \"ios|android|web|cli\",\n  \"device_model\": \"可选，设备型号\"\n}\n```\n\n响应：\n\n```json\n{\n  \"ok\": true,\n  \"device\": { \"device_id\": \"dev_xxx\", \"label\": \"我的设备\", \"platform\": \"ios\" },\n  \"access_token\":  { \"token\": \"hlat_xxx\", \"expires_at\": \"2026-05-08T13:00:00Z\" },\n  \"refresh_token\": { \"token\": \"hlrt_xxx\", \"expires_at\": \"2026-08-06T12:00:00Z\" }\n}\n```\n\n**POST `/api/v1/auth/refresh`** Body：\n\n```json\n{ \"refresh_token\": \"hlrt_xxx\" }\n```\n\n### 配对\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| GET | `/api/v1/pairing/session` | 查询配对会话状态（含 claimed 字段） |\n| POST | `/api/v1/pairing/claim` | App 端用来完成配对 |\n\n**GET `/api/v1/pairing/session`** 查询参数：`?session_id=ps_xxx`\n\n**POST `/api/v1/pairing/claim`** Body：\n\n```json\n{\n  \"session_id\": \"ps_xxx\",\n  \"claim_token\": \"connect_token值\",\n  \"device_label\": \"My App\",\n  \"device_platform\": \"ios\"\n}\n```\n\n### 系统状态\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| GET | `/api/v1/status` | 服务整体状态（版本、设备数、profiles 数量等） |\n| GET | `/api/v1/logs` | 最近日志（`?source=link\\|gateway&limit=50`） |\n\n### 设备列表\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| GET | `/api/v1/devices` | 列出所有已配对设备 |\n| PATCH | `/api/v1/devices/:deviceId` | 重命名设备（`{\"label\":\"新名字\"}`） |\n| DELETE | `/api/v1/devices/:deviceId` | 撤销设备（吊销 token） |\n| DELETE | `/api/v1/devices/:deviceId/app-listing` | 从列表中隐藏已撤销设备 |\n\n### 对话（Conversations）\n\n#### 活跃对话\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| GET | `/api/v1/conversations` | 列出活跃对话（`?limit=20&cursor=xxx`） |\n| GET | `/api/v1/conversations/search` | 搜索活跃对话（`?q=关键词`） |\n| POST | `/api/v1/conversations` | 新建对话 |\n| DELETE | `/api/v1/conversations` | 批量删除对话（`{\"conversation_ids\":[\"conv_xxx\"]}`） |\n| DELETE | `/api/v1/conversations/:id` | 删除单个对话 |\n| GET | `/api/v1/conversations/:id/messages` | 获取对话消息列表（含 `runtime` 上下文信息） |\n| POST | `/api/v1/conversations/:id/messages` | 发送消息 |\n| GET | `/api/v1/conversations/:id/events` | SSE 实时事件流 |\n| GET | `/api/v1/conversations/events` | 所有对话事件流（SSE） |\n| PATCH | `/api/v1/conversations/:id/title` | 重命名对话（`{\"title\":\"新标题\"}`） |\n| PATCH | `/api/v1/conversations/:id/model` | 切换模型（`{\"model_id\":\"xxx\"}`） |\n| PATCH | `/api/v1/conversations/:id/profile` | 切换 profile |\n| POST | `/api/v1/conversations/:id/ack` | 确认已读 |\n| POST | `/api/v1/conversations/:id/runs/:runId/cancel` | 取消对话内的某次执行 |\n| POST | `/api/v1/conversations/:id/approvals/:approvalId/approve` | 审批工具调用（允许，`{\"scope\":\"once\\|session\\|always\"}`） |\n| POST | `/api/v1/conversations/:id/approvals/:approvalId/deny` | 审批工具调用（拒绝） |\n| POST | `/api/v1/conversations/:id/blobs` | 上传附件 |\n| GET | `/api/v1/conversations/:id/blobs/:blobId` | 下载附件 |\n| DELETE | `/api/v1/conversations/:id/blobs/:blobId` | 删除附件 |\n\n#### 归档对话\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| GET | `/api/v1/conversations/archived` | 列出已归档对话（`?limit=20&cursor=xxx`） |\n| GET | `/api/v1/conversations/archived/search` | 搜索已归档对话（`?q=关键词`） |\n| POST | `/api/v1/conversations/:id/archive` | 归档对话（发送新消息时自动恢复为活跃） |\n| POST | `/api/v1/conversations/:id/unarchive` | 取消归档 |\n\n#### 批量清理计划\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| POST | `/api/v1/conversations/clear-plans` | 创建批量删除计划（`{\"target_status\":\"active\\|archived\"}`） |\n| GET | `/api/v1/conversations/clear-plans/:planId` | 查询计划状态 |\n| POST | `/api/v1/conversations/clear-plans/:planId/execute` | 执行计划（批量删除） |\n\n#### 批量归档计划\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| POST | `/api/v1/conversations/archive-plans` | 创建批量归档计划（`{\"exclude_conversation_ids\":[]}`） |\n| GET | `/api/v1/conversations/archive-plans/:planId` | 查询计划状态 |\n| POST | `/api/v1/conversations/archive-plans/:planId/execute` | 执行计划（批量归档） |\n\n#### 响应结构说明\n\n**ConversationSummary**（对话列表每项）：\n\n```json\n{\n  \"id\": \"conv_xxx\",\n  \"title\": \"对话标题\",\n  \"created_at\": \"2026-05-09T00:00:00.000Z\",\n  \"updated_at\": \"2026-05-09T00:00:00.000Z\",\n  \"last_event_seq\": 12,\n  \"usage\": { \"input_tokens\": 100, \"output_tokens\": 200, \"total_tokens\": 300, \"updated_at\": \"...\" },\n  \"profile\": { \"uid\": \"prof_xxx\", \"name\": \"default\", \"display_name\": \"default\", \"avatar_url\": null },\n  \"last_message\": { \"id\": \"msg_xxx\", \"role\": \"assistant\", \"content_preview\": \"消息摘要...\" }\n}\n```\n\n**GET `/api/v1/conversations/:id/messages`** 响应新增 `runtime` 字段：\n\n```json\n{\n  \"ok\": true,\n  \"messages\": [...],\n  \"last_event_seq\": 12,\n  \"runtime\": {\n    \"profile\": { \"name\": \"default\", \"display_name\": \"default\", \"avatar_url\": null },\n    \"model\": { \"id\": \"claude-3-5-sonnet\", \"provider\": \"anthropic\", \"context_window\": 200000 },\n    \"context\": { \"input_tokens\": 100, \"output_tokens\": 200, \"total_tokens\": 300, \"usage_percent\": 0, \"source\": \"estimated\" }\n  },\n  \"page\": { \"limit\": 50, \"has_more_before\": false, \"has_more_after\": false, \"oldest_message_id\": \"...\", \"newest_message_id\": \"...\" }\n}\n```\n\n**LinkMessage**（消息对象）：\n\n```json\n{\n  \"id\": \"msg_xxx\",\n  \"schema_version\": 1,\n  \"conversation_id\": \"conv_xxx\",\n  \"role\": \"user|assistant|tool|system\",\n  \"status\": \"queued|streaming|completed|failed|cancelled\",\n  \"created_at\": \"...\",\n  \"updated_at\": \"...\",\n  \"sender\": { \"id\": \"app_user\", \"type\": \"human|agent|system|tool\", \"display_name\": \"Me\" },\n  \"parts\": [{ \"type\": \"text\", \"text\": \"消息内容\" }],\n  \"attachments\": [],\n  \"blocks\": [],\n  \"agent_events\": [],\n  \"approvals\": []\n}\n```\n\n**DELETE `/api/v1/conversations/:id`** 响应新增字段：\n\n```json\n{\n  \"ok\": true,\n  \"conversation_id\": \"conv_xxx\",\n  \"hermes_deleted\": false,\n  \"deleted_at\": \"2026-05-09T00:00:00.000Z\"\n}\n```\n\n### 统计\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| GET | `/api/v1/statistics` | 全局使用统计（`?profile=xxx&profile_uid=xxx`） |\n| GET | `/api/v1/statistics/usage` | Token 用量统计（`?days=7&from=2026-05-01&to=2026-05-08&model=xxx&profile=xxx`） |\n\n**GET `/api/v1/statistics`** 响应：\n\n```json\n{\n  \"ok\": true,\n  \"statistics\": {\n    \"conversations\": { \"total\": 10, \"active\": 8, \"archived\": 1, \"deleted\": 1 },\n    \"tokens\": { \"input_tokens\": 5000, \"output_tokens\": 8000, \"total_tokens\": 13000 },\n    \"messages\": { \"total\": 120 },\n    \"runs\": { \"total\": 50 },\n    \"models\": { \"total\": 0 },\n    \"profiles\": { \"total\": 0 },\n    \"skills\": { \"total\": 0 },\n    \"tools\": { \"total\": 0 }\n  }\n}\n```\n\n### 模型（Models）\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| GET | `/api/v1/models` | 列出可用模型（来自 Hermes API Server，OpenAI 兼容格式） |\n| GET | `/api/v1/model-configs` | 列出全局模型配置 |\n| POST | `/api/v1/model-configs` | 新增全局模型配置 |\n| PATCH | `/api/v1/model-configs/defaults` | 更新默认模型配置 |\n| DELETE | `/api/v1/model-configs` | 删除全局模型配置 |\n\n### Profiles\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| GET | `/api/v1/profiles` | 列出所有 Profile 名称 |\n| POST | `/api/v1/profiles` | 创建新 Profile（异步，返回 202） |\n| PATCH | `/api/v1/profiles/:name` | 重命名（`{\"name\":\"new-name\"}`）或更新元数据 |\n| DELETE | `/api/v1/profiles/:name` | 删除 Profile |\n| GET | `/api/v1/profiles/catalog` | 完整目录（包含各 Profile 的 capabilities、permissions、modelConfigs）|\n| GET | `/api/v1/profile-creation/status` | 查询创建进度 |\n| GET | `/api/v1/profile-creation/events` | 创建进度 SSE 流 |\n| GET | `/api/v1/profiles/:name/status` | Profile 状态（存在性、API Key 配置等） |\n| GET | `/api/v1/profiles/:name/statistics` | Profile 的对话统计 |\n| GET | `/api/v1/profiles/:name/skills` | 列出 Profile Skills（`?include_disabled=true`）|\n| PATCH | `/api/v1/profiles/:name/skills/:skillName` | 启用/禁用 Skill（`{\"enabled\":true}`） |\n| GET | `/api/v1/profiles/:name/memory` | 查看记忆（USER.md + MEMORY.md） |\n| POST | `/api/v1/profiles/:name/memory/entries` | 新增记忆条目（`{\"target\":\"memory\",\"content\":\"...\"}`)  |\n| PATCH | `/api/v1/profiles/:name/memory/entries` | 替换记忆条目（`{\"target\":\"memory\",\"match\":\"旧内容\",\"content\":\"新内容\"}`）|\n| DELETE | `/api/v1/profiles/:name/memory/entries` | 删除记忆条目（`{\"target\":\"memory\",\"match\":\"匹配内容\"}`）|\n| DELETE | `/api/v1/profiles/:name/memory` | 重置记忆（`{\"target\":\"memory\\|user\\|all\"}`）|\n| PATCH | `/api/v1/profiles/:name/memory/settings` | 更新记忆 Provider 设置 |\n| PATCH | `/api/v1/profiles/:name/memory/provider` | 切换记忆 Provider（`{\"provider\":\"built-in\"}`）|\n| GET | `/api/v1/profiles/:name/permissions` | 查看权限配置 |\n| PATCH | `/api/v1/profiles/:name/permissions` | 更新权限配置 |\n| GET | `/api/v1/profiles/:name/tool-configs/:toolKey` | 查看工具配置（toolKey：`web` / `image_gen` / `stt` / `tts` / `messaging` / `homeassistant` / `rl`）|\n| PATCH | `/api/v1/profiles/:name/tool-configs/:toolKey` | 更新工具配置（同上 toolKey）|\n| GET | `/api/v1/profiles/:name/model-configs` | 列出 Profile 的模型配置 |\n| POST | `/api/v1/profiles/:name/model-configs` | 新增 Profile 的模型配置 |\n| PATCH | `/api/v1/profiles/:name/model-configs/defaults` | 更新 Profile 默认模型 |\n| DELETE | `/api/v1/profiles/:name/model-configs` | 删除 Profile 的模型配置 |\n\n记忆 `target` 字段：`\"memory\"`（Agent 笔记，MEMORY.md）或 `\"user\"`（用户信息，USER.md）。\n\n### Cron Jobs（定时任务）\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| GET | `/api/v1/cron-jobs` | 汇总列出所有 Profile 的定时任务 |\n| GET | `/api/v1/profiles/:name/cron-jobs` | 列出指定 Profile 的定时任务 |\n| POST | `/api/v1/profiles/:name/cron-jobs` | 创建定时任务 |\n| GET | `/api/v1/profiles/:name/cron-jobs/:jobId` | 查看定时任务详情 |\n| PATCH | `/api/v1/profiles/:name/cron-jobs/:jobId` | 更新定时任务 |\n| DELETE | `/api/v1/profiles/:name/cron-jobs/:jobId` | 删除定时任务 |\n| POST | `/api/v1/profiles/:name/cron-jobs/:jobId/pause` | 暂停定时任务 |\n| POST | `/api/v1/profiles/:name/cron-jobs/:jobId/resume` | 恢复定时任务 |\n| POST | `/api/v1/profiles/:name/cron-jobs/:jobId/run` | 立即执行定时任务 |\n\n### Runs（执行任务）\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| POST | `/api/v1/runs` | 向 Hermes Agent 提交执行任务（返回 202） |\n| GET | `/api/v1/runs/:runId/events` | 订阅执行事件流（SSE 代理） |\n| POST | `/api/v1/runs/:runId/cancel` | 取消执行任务 |\n\n**POST `/api/v1/runs`** Body：\n\n```json\n{\n  \"input\": \"请帮我整理 ~/Downloads 目录\",\n  \"profile\": \"default\",\n  \"instructions\": \"可选的系统指令\",\n  \"session_id\": \"可选的会话 ID\",\n  \"conversation_history\": []\n}\n```\n\n响应（202）：\n\n```json\n{\n  \"run_id\": \"run_xxx\",\n  \"fallback\": false\n}\n```\n\n### 更新管理（Updates）\n\n#### Hermes Agent 更新\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| GET | `/api/v1/hermes/update-check` | 检查 Hermes Agent 是否有新版本 |\n| GET | `/api/v1/hermes/update/status` | 查询 Hermes 更新进度 |\n| POST | `/api/v1/hermes/update` | 触发 Hermes Agent 更新 |\n| GET | `/api/v1/hermes/update/events` | 更新进度 SSE 流 |\n\n#### Link 自身更新\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| GET | `/api/v1/link/update-check` | 检查 Link 是否有新版本 |\n| GET | `/api/v1/link/update/status` | 查询 Link 更新进度 |\n| POST | `/api/v1/link/update` | 触发 Link 自更新（`{\"version\":\"0.3.0\"}`）|\n| GET | `/api/v1/link/update/events` | 更新进度 SSE 流 |\n\n### 系统（System）\n\n| 方法 | 路径 | 说明 |\n|------|------|------|\n| GET | `/api/v1/system/status` | 系统详情（版本、自启状态、网络环境）|\n| GET | `/api/v1/system/version` | 仅返回 Link 版本号 |\n| POST | `/api/v1/system/autostart/enable` | 开启开机自启 |\n| POST | `/api/v1/system/autostart/disable` | 关闭开机自启 |\n| GET | `/api/v1/system/logs` | 最近 Link 日志 |\n| GET | `/api/v1/system/logs/gateway` | 最近 Gateway 日志 |\n| GET | `/api/v1/system/updates` | 查询可用更新（Hermes + Link 汇总）|\n| POST | `/api/v1/system/updates/dismiss` | 忽略当前可用更新提示 |\n\n### 错误响应格式\n\n所有错误均返回：\n\n```json\n{\n  \"ok\": false,\n  \"error\": {\n    \"code\": \"error_code\",\n    \"message\": \"Human readable message\"\n  }\n}\n```\n\n常见错误码：\n\n| code | HTTP | 说明 |\n|------|------|------|\n| `auth_required` | 401 | 未提供 Authorization |\n| `device_access_token_invalid` | 401 | access_token 已过期或无效 |\n| `auth_invalid` | 401 | connect_token 无效或已用过 |\n| `pairing_session_not_found` | 404 | 配对会话不存在 |\n| `pairing_session_expired` | 404 | 配对会话已过期 |\n| `pairing_claim_mismatch` | 409 | 配对 token 不匹配 |\n| `link_not_paired` | 409 | 服务尚未分配 link_id |\n\n## 调用示例\n\n### 全流程脚本\n\n```bash\n#!/bin/bash\nBASE=\"http://localhost:18642\"\n\n# Step 1: 生成配对 token\nCONNECT=$(hermeslink pair 2>&1 | grep \"Connect token:\" | awk '{print $NF}')\necho \"Connect token: $CONNECT\"\n\n# Step 2: 兑换 access_token 和 refresh_token\nRESP=$(curl -s -X POST \"$BASE/api/v1/auth/device-session\" \\\n  -H \"Authorization: Bearer $CONNECT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"device_label\":\"my-script\",\"device_platform\":\"cli\"}')\n\nACCESS=$(echo $RESP | python3 -c \"import json,sys; print(json.load(sys.stdin)['access_token']['token'])\")\nREFRESH=$(echo $RESP | python3 -c \"import json,sys; print(json.load(sys.stdin)['refresh_token']['token'])\")\necho \"Access:  $ACCESS\"\necho \"Refresh: $REFRESH\"\n\n# Step 3: 查询状态\ncurl -s \"$BASE/api/v1/status\" -H \"Authorization: Bearer $ACCESS\" | python3 -m json.tool\n```\n\n### 刷新 Token\n\n```bash\ncurl -s -X POST http://localhost:18642/api/v1/auth/refresh \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"refresh_token\\\":\\\"$REFRESH\\\"}\"\n```\n\n### 查询设备列表\n\n```bash\ncurl -s http://localhost:18642/api/v1/devices \\\n  -H \"Authorization: Bearer $ACCESS\"\n```\n\n### 查询对话列表\n\n```bash\ncurl -s \"http://localhost:18642/api/v1/conversations?limit=10\" \\\n  -H \"Authorization: Bearer $ACCESS\"\n```\n\n## 开机自启\n\n- **macOS**：通过 launchd（`~/Library/LaunchAgents/com.hermes.link.plist`）\n- **Linux**：通过 systemd 用户服务或 XDG autostart\n- **Windows**：通过 Startup 文件夹\n\n```bash\nhermeslink autostart on\nhermeslink autostart off\n```\n\n## 运行时文件\n\n所有文件存储于 `~/.hermeslink/`：\n\n| 路径 | 说明 |\n|------|------|\n| `config.json` | 用户配置 |\n| `identity.json` | 设备身份（ed25519 密钥对 + link_id）|\n| `credentials.json` | 已配对设备的访问令牌 |\n| `app-connect-tokens.json` | 待使用的配对 token（5 分钟有效）|\n| `conversations/` | 对话数据 |\n| `blobs/` | 文件附件 |\n| `pairing/` | 配对会话 |\n| `link.db` | SQLite 数据库（统计信息）|\n| `logs/` | 日志文件 |\n\n卸载 npm 包不会删除此目录，重新安装后仍可复用同一 link_id。\n\n## 环境变量\n\n| 变量 | 说明 |\n|------|------|\n| `HERMESLINK_HOME` | 覆盖运行时目录（默认 `~/.hermeslink`）|\n| `HERMESLINK_LOG_LEVEL` | 覆盖日志级别 |\n| `HERMESLINK_LANG` | 覆盖语言（`en` / `zh-CN`）|\n| `HERMES_BIN` | `hermes` 二进制路径（默认 `hermes`）|\n| `HERMESLINK_LISTEN_HOST` | HTTP 监听地址（默认 `0.0.0.0`）|\n\n## 开发调试\n\n```bash\n# 安装依赖\nnpm install\n\n# 启动开发服务器 — 监听源码变化，自动编译并重启 daemon\nnpm run dev\n\n# 生产构建\nnpm run build\n\n# TypeScript 类型检查\nnpm run check\n```\n\n服务运行后可访问 `http://localhost:18642/api/v1/bootstrap` 验证是否正常。\n\n交互式 API 文档（Swagger UI）：`http://localhost:18642/api/docs`\n\n## License\n\nMIT\n","readmeFilename":"README.zh-CN.md"}