{"_id":"nexting-cc-bridge","_rev":"41-a0d4b452ceb41beeb6acedd2ff1e08fa","name":"nexting-cc-bridge","dist-tags":{"latest":"0.16.7"},"versions":{"0.8.3":{"name":"nexting-cc-bridge","version":"0.8.3","_id":"nexting-cc-bridge@0.8.3","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"aa71c193dc425bbd5f1ed015b6fd4e9b1b57a4da","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.8.3.tgz","fileCount":50,"integrity":"sha512-UUrQK7GT5Q1FaPYb2ARVMfam48pnPUtH1wzjjbEIskIcepuOpYlIlGyXB5KGtJXSv3V9jYDi64dhbg4wuMCGAQ==","signatures":[{"sig":"MEQCIAO6+sbQ0kmUO2W0yosPy2UgW9fg/Ek/sHKTqKCBB/DtAiAJA4l196xI5JKlR6BovLhamHsXQ11YwZDjPjKj+5SQDg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":347949},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.8.3_1782100028312_0.6729497167849292","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"nexting-cc-bridge","version":"0.9.0","_id":"nexting-cc-bridge@0.9.0","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"2c682e09bb80d10f10c9798cff07b442025e577d","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.9.0.tgz","fileCount":52,"integrity":"sha512-2OjJNpy1Sf+wPzlzgbVdIle77cSnt2iqyuQx7ctdLY6KdKgqtC1GQtAH79WR6iytC5Ed8o+nrBdGCzNcuzW4Fw==","signatures":[{"sig":"MEYCIQC8QwIYhZip9wd8pxwOBGvqAgEikHlX26jlFFp+7voZ+wIhANlp0VxMpyZYXEPNdjbrfCtpIOtyArnoFdjPrRZ+RhIR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":354167},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.9.0_1782297367725_0.7882173408286577","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"nexting-cc-bridge","version":"0.9.1","_id":"nexting-cc-bridge@0.9.1","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"b8603467f157450e32ab772f732cf7c94f57bb70","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.9.1.tgz","fileCount":51,"integrity":"sha512-UEto5YyXw/Kb7FdmJxCW8KL2jAh1ocgrpMTX6/Mlkx0QXfeAd/EKXF8TzZ59F8sTYIsgWDBRzEkFPfDjNOHQjw==","signatures":[{"sig":"MEUCIHQfnY9Oqn3fU4zFkdTO/ln7vh3QeBVsWfF+knK56UU+AiEAkfv5ybYufEq210EeK6RDlMKRCCC2TY7SCmADHmQwKg4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":358318},"type":"module","gitHead":"4e2ad125190d22c3edb1a8067b5ad0c0213531e6","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.9.1_1782457249586_0.6508079089461067","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"nexting-cc-bridge","version":"0.9.2","_id":"nexting-cc-bridge@0.9.2","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"29f51399f75d85d2574d51b8f26bfd0b5ff7d551","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.9.2.tgz","fileCount":51,"integrity":"sha512-hAWzd6EhagLt2O4Bl5tW7KGKcom1afMxgGgynP9y+P/8f+9RfcIfZgOLDFts6d49TPIsoH4NbR2JmkKMzHNmZw==","signatures":[{"sig":"MEYCIQDo4OPwBnBDx0JT/odJ7zxROsPwv2+dxBCpR/tpxzl4iAIhAPVgSTpM8mzSPHPYsYti8LaukEJXS4y1zgoJTlTfKwir","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":358543},"type":"module","gitHead":"0145f7cef41dfe9ef818eb435e022f906f54e767","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.9.2_1782467584131_0.505749937560064","host":"s3://npm-registry-packages-npm-production"}},"0.9.3":{"name":"nexting-cc-bridge","version":"0.9.3","_id":"nexting-cc-bridge@0.9.3","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"70649974c5a81325983aec704bc3a906790e3a40","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.9.3.tgz","fileCount":51,"integrity":"sha512-SczWehAVW5ZBXio0EfeF5GA3kRxbx74eRLS8H82O0yVicUoGc7do1kVBc3YVcBFU6ltU8Ha8k9piHZ2PP1pOMA==","signatures":[{"sig":"MEUCIHq477adAsps0ux2JT4cXFeIu9n2faCxhNYYpkHEu5KkAiEAgkqRFGUUt5m14mlO6+U5PolskFh5WeAT70U64gqYqJY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":359396},"type":"module","gitHead":"0145f7cef41dfe9ef818eb435e022f906f54e767","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.9.3_1782471655429_0.4049481890107707","host":"s3://npm-registry-packages-npm-production"}},"0.9.4":{"name":"nexting-cc-bridge","version":"0.9.4","_id":"nexting-cc-bridge@0.9.4","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"f750c127a07253f1aec3db4c7e6ba173f88d109b","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.9.4.tgz","fileCount":51,"integrity":"sha512-XIWwqg6cfqjEEG4WJmYc1Luf/rUAZUpkI/ushwiLfCNPSYNhYIksp93SRXkPDbwhRNmn4M8PEE2iw7MVrq+omw==","signatures":[{"sig":"MEQCIBXSNUcB5PPaPJwp/N47ntpMn890noRFhK8CwqU53m3QAiAMccS7aY6cpv51jwWHbE+yprRRz+kU+R3tpMUOS1e0Hg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":361733},"type":"module","gitHead":"0145f7cef41dfe9ef818eb435e022f906f54e767","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.9.4_1782474443356_0.47974882958823106","host":"s3://npm-registry-packages-npm-production"}},"0.9.5":{"name":"nexting-cc-bridge","version":"0.9.5","_id":"nexting-cc-bridge@0.9.5","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"9f507ff649ec4f063944e75a5f0767e1317b7881","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.9.5.tgz","fileCount":52,"integrity":"sha512-OTXylfxR6+vXj9Ohp2e9EbyWVkp0kkyXf4Ha9fuqeyEqk7K2u22mJklN/ipMLakbUH67qx7666QnaQ+8b9g7mw==","signatures":[{"sig":"MEYCIQCteLEXhhYcb7sh6YyPr5hOEMqhOxSFuGfdzpsS0RrJlgIhAOnOQbNvejuV6uhvO+yHbI7igYHCdD3vnqHZvtUt3tz3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":372492},"type":"module","gitHead":"440478d8c296d0e7d81db0116ace72d9443bc15d","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.9.5_1782570956756_0.6583277026332508","host":"s3://npm-registry-packages-npm-production"}},"0.9.6":{"name":"nexting-cc-bridge","version":"0.9.6","_id":"nexting-cc-bridge@0.9.6","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"0c2ce746235989c445416b79181e39ed9ee45a23","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.9.6.tgz","fileCount":52,"integrity":"sha512-LIyD4zX3UNCoFp0oQo/I2X6mB2kLIfsv4J9NantcT/4nc8Q+mphPBtCNi8O+z1enuL0SNnqygfA2kso2lDPSnQ==","signatures":[{"sig":"MEUCIQDzr827Z7OqNQjIcCApzAwlhiUmviiDzdv79IADB9ooGgIgMonwzsR04HamdXIO9EmnXqlhL51M8BH70f/r3MLFfSs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":374224},"type":"module","gitHead":"45e3476049224abd899aff460602534014c18d24","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.9.6_1782625366751_0.05433004497471039","host":"s3://npm-registry-packages-npm-production"}},"0.9.7":{"name":"nexting-cc-bridge","version":"0.9.7","_id":"nexting-cc-bridge@0.9.7","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"a0b2c6194a3cf710f2ee9934ece98c16ed4fbd84","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.9.7.tgz","fileCount":52,"integrity":"sha512-4+Br2qc81SnB9CCe6aiFx48PRFUdOTQBxx8vt50rVCkMx5aajtFpbnPlakEAx8VDEsMSOl18yYQQTysKVgT2/A==","signatures":[{"sig":"MEYCIQCRSNmG26kykgcte4BZwzKrzdQhrI0EgioNNhF2pslk7QIhANDm48UQh9w069ufmdKJTgjNeCP84ohDSqbQW9TCqBto","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":377166},"type":"module","gitHead":"de6b9c74ede8fd61036fff44024230a3f4ec3f97","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.9.7_1782627485214_0.945683464166009","host":"s3://npm-registry-packages-npm-production"}},"0.9.8":{"name":"nexting-cc-bridge","version":"0.9.8","_id":"nexting-cc-bridge@0.9.8","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"6a7afa669fe2dff8100c03d5b9a4dad6ed2949f0","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.9.8.tgz","fileCount":51,"integrity":"sha512-z2K2DcSzKSzHocxTJsaLeyw2F9vvC6UwfKCjMs8DVEtjpjFo/WDHq5rqf2wp7iWZFQo1PUqiv375n6bCnpbp7A==","signatures":[{"sig":"MEUCIQCNmZWTJMn+16N6KJZobKX2QbPmUEscdWbfPnFKrU/DVwIgB/yNBq01wYpnYr6FxAuEfCvJrOKlejASktnXI8L1Lio=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":366128},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.9.8_1782627745072_0.9598898535174436","host":"s3://npm-registry-packages-npm-production"}},"0.9.9":{"name":"nexting-cc-bridge","version":"0.9.9","_id":"nexting-cc-bridge@0.9.9","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"a94b9587d2c7ec508b22644a98ea4ba3cbe9ee17","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.9.9.tgz","fileCount":52,"integrity":"sha512-yFww5rW+maMKuFtucuRt4lsvdOOY3zvE/wgTbWFTr9wkLq186cHqKM/wJ0yFWr6C6J8xrzcS7QGnCPp7kvc5EQ==","signatures":[{"sig":"MEQCIAP4YfaQW1PEPifLmJkiAl+TcPukTSCtcXcoUNy4R1tsAiBAsy2coWQWoiRSm3zKOgbUsiqZQj5QDr3zngyib9c0og==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":377166},"type":"module","gitHead":"7066d920ea38870860af78b2c195217c4b26c484","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.9.9_1782630259952_0.3519504836428229","host":"s3://npm-registry-packages-npm-production"}},"0.9.10":{"name":"nexting-cc-bridge","version":"0.9.10","_id":"nexting-cc-bridge@0.9.10","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"7dd708b3ff3a686fcb641b4314fbbf4205566364","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.9.10.tgz","fileCount":54,"integrity":"sha512-hRah5IGZ+spUtNXrvUmeae+ki5ukcT84/Fy62Kgco8SnJlpzDrsX0s5RT0cZK8POlcraeYG++tHUD9Xfzg7/fg==","signatures":[{"sig":"MEUCIDuLbGu16j3SmEr7o6XtEvZglX/p76FfcOwoPNLCs7U1AiEAgoCjZ2umci4RN0rBjuvdZSbCqoiJRfxsSTZnUS5X1f8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":377971},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.9.10_1782649872041_0.9007747905145185","host":"s3://npm-registry-packages-npm-production"}},"0.9.11":{"name":"nexting-cc-bridge","version":"0.9.11","_id":"nexting-cc-bridge@0.9.11","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"14e7e595a2a82038eedebbe043b19bc985b81b64","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.9.11.tgz","fileCount":55,"integrity":"sha512-ecH6H7kB35fgENxZXdV40FCP3vJZkoydthNKWjq0hYDNOuY55DDmjKaeruzT3mjtklgFjYW5JxKYxqSwwIB4Zw==","signatures":[{"sig":"MEQCIG06yjYQ2iY2MdzstHo4dPdlVMPVzjPJSbwHMBuODOWdAiA28z1BwQNRRvWf/lf9e0BzfokDbjEmSJfMs8MjrKB4QA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":384478},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.9.11_1782663992123_0.010940835291975315","host":"s3://npm-registry-packages-npm-production"}},"0.9.12":{"name":"nexting-cc-bridge","version":"0.9.12","_id":"nexting-cc-bridge@0.9.12","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"06e411c177edab789f5b23f4b08d9d099a89c24f","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.9.12.tgz","fileCount":56,"integrity":"sha512-ULJHi1/2iRrSo1lU/3Ie4agOh1Nn8XCWKCVq1uSozNMJpH93fb5tQfSFlIPGqwYCINYsZgvo9wnHun0DJGTiTQ==","signatures":[{"sig":"MEUCIQCgFRVAMPN/PiTBtf71icbgErVLTz+15JJStjBTdQj7EgIgG3Ph25d2IUmBD7Z8qC8gS0WRMD5RQGoAKRtNm3ERyiE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":393683},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.9.12_1782665051432_0.8450768237508106","host":"s3://npm-registry-packages-npm-production"}},"0.9.13":{"name":"nexting-cc-bridge","version":"0.9.13","_id":"nexting-cc-bridge@0.9.13","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"e2d0189b1c64ea3cf6c5adff20d5e060f7755010","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.9.13.tgz","fileCount":57,"integrity":"sha512-/Lmvhc1gcmvMzPKGNo2xrZ/k1tH9LidS6x9zDg5uszs/myyNhus+rXqdP1GqdOQlW9SQ+3wv1/qVnpHLEUnbNQ==","signatures":[{"sig":"MEQCIDD6d9IITTVzKh0BYS+Y8cn5djUrg6TXBlDFw/r39yVJAiBlWbWuAST+3UAIntwVN9XiAKBq9UbyxtTmwCZ3F60Fhw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":398637},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.9.13_1782673965099_0.9303103927097038","host":"s3://npm-registry-packages-npm-production"}},"0.9.14":{"name":"nexting-cc-bridge","version":"0.9.14","_id":"nexting-cc-bridge@0.9.14","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"3e9ce84bf46fc77f2ac30468e49790b7c0313574","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.9.14.tgz","fileCount":57,"integrity":"sha512-HyaoAIpZYy9HQ5DzNkXjBCiNgPDoO7CTJL5VTdEBlZ23/WSFxUxOcxTWOFo54ygQu7Xg1AdB2dBh+bxJVqM47g==","signatures":[{"sig":"MEQCIECes8qXx7iNe08dSyeV/ehtRtfTqKOCUdFWVlupU7DdAiBs5k7PqzXrumKLnFarBfWPtszOasA2jONfoBeVe2TQQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":398816},"type":"module","_from":"file:/tmp/bridge-compare/nexting-cc-bridge-0.9.14.tgz","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_resolved":"/tmp/bridge-compare/nexting-cc-bridge-0.9.14.tgz","_integrity":"sha512-HyaoAIpZYy9HQ5DzNkXjBCiNgPDoO7CTJL5VTdEBlZ23/WSFxUxOcxTWOFo54ygQu7Xg1AdB2dBh+bxJVqM47g==","_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.9.14_1782792340481_0.10630868727091447","host":"s3://npm-registry-packages-npm-production"}},"0.9.15":{"name":"nexting-cc-bridge","version":"0.9.15","_id":"nexting-cc-bridge@0.9.15","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"90f850b37ae0998075308f63ff86506d84b3e0ed","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.9.15.tgz","fileCount":53,"integrity":"sha512-+y0luSlk1eXLATreGFc7TLltiArlgHISyqkcq0vFn7AeshRz0jRTZPaq3BVXxgoLLB2Y4F6ClvThus5ypzncaw==","signatures":[{"sig":"MEUCIQCEJjAO73O4rmy6Y7BIW4ltY78Q3XSiedaisgYrCiVvqAIgVVZ+uzXlUxyC+NDiKxgfkmn3BPETdRzlpWxBZuyb8DM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":384122},"type":"module","gitHead":"3e975800435fed2a9d3df69373a2fe806c350845","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","node-pty":"^1.1.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.9.15_1782794072807_0.31425343706858255","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"nexting-cc-bridge","version":"0.10.0","_id":"nexting-cc-bridge@0.10.0","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"d66676cce766f6067231f30e80d974e02b69db98","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.10.0.tgz","fileCount":60,"integrity":"sha512-61otKhhYgrDnJuJ6KsAvqUI8ltQu/JyVRUpHNA8itE99Is4kpzMmyJ/lM4SuUVY22+RzlHTQBRKVUKkwY//BjA==","signatures":[{"sig":"MEYCIQCmfGcWBDF0jROi6G4Tug2Jtn3/1ylZor/1Rr5sA6TcvQIhAIox/MDnefFmfWVcVvaEqIvApOZs5hj6xOcK7oxpB1+b","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":453835},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.10.0_1782977665896_0.04419655661719757","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"nexting-cc-bridge","version":"0.11.0","_id":"nexting-cc-bridge@0.11.0","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"187756ef56f04bc6d3f80a50eb41df5615076f8d","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.11.0.tgz","fileCount":63,"integrity":"sha512-tHNhLjzfoYFr6Rxq6cZXgnRWjgXN+tIlL6qhnAAY2Bz1OzvwH2KR5Todkj3AA0Xj/hgSalShZlQjiAN/YbUc7A==","signatures":[{"sig":"MEQCIG60htF+YGJFJjzB65/7mPCgs/llXiW1VGc6rDlSdvTmAiBbpopH61UtJBLs3DvIIY+hV09geyafrWyTcn4PLqQmeg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":472032},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.11.0_1782990627576_0.06144787151845055","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"nexting-cc-bridge","version":"0.11.1","_id":"nexting-cc-bridge@0.11.1","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"09b2ea423bc941147d0773eea5c7627db69871bc","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.11.1.tgz","fileCount":63,"integrity":"sha512-Rx3wXhHUvO4gHxt5J6Ayya3mY9SAwuuzWP74qYOKkkiMJlKrrDbY/3b1jwX+Bl/rNuvmO+AsRUED1Otep7lHeg==","signatures":[{"sig":"MEUCIC8lP10+U7eEdhzwP5161McYvfeGVuQFuxnf+qRPGiUQAiEA5nrbpa1x30o6F5JGZ/+0wmS9vAxy2i5XYmTTemP9t5k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":474212},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.11.1_1783013799334_0.5934998864354943","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"nexting-cc-bridge","version":"0.12.1","_id":"nexting-cc-bridge@0.12.1","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"2449817a46e0116cd56afbe1ecdb12a991d86a78","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.12.1.tgz","fileCount":64,"integrity":"sha512-l0XynUE37DMxQehwno6yoFDoFz+GjgurotPuuOQZAJvRnHekdB/U/YD7yLUQJR/yalIf3uNB7UkhgtcxSqne4g==","signatures":[{"sig":"MEQCIFSbNhbI5J4V8FLY3TV0YGxeBIfLW8ttRSVp6xx61O34AiARS0/fqB+vfzZQnL5I2eXr2h+/rfUCIewUvXJTFPDHIw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":484201},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.12.1_1783014243278_0.600119325832523","host":"s3://npm-registry-packages-npm-production"}},"0.12.2":{"name":"nexting-cc-bridge","version":"0.12.2","_id":"nexting-cc-bridge@0.12.2","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"788d5a70ddda4887d9e3058b0b4cca8ebc4c15e4","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.12.2.tgz","fileCount":69,"integrity":"sha512-bvl5nBGk0Xuj8x8ox17DDU0OJBJRkH/Cm26p34knG5KimdNE6nGXlqzHw5SrapkkehLsf47546yIwfBs1jVuXQ==","signatures":[{"sig":"MEUCIQCZKKcOzrjewxHtVH3RYYmTVOHdWROjLkP4xsPwR9hHGgIgEPt3Xi58E7VA90JIdJuh+qv9lH+MuW1PUQQJtagxmyk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":528428},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.12.2_1783320186693_0.9146776760372037","host":"s3://npm-registry-packages-npm-production"}},"0.12.3":{"name":"nexting-cc-bridge","version":"0.12.3","_id":"nexting-cc-bridge@0.12.3","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"ee65255c15d86d71148b2a496824d8bab98fb17a","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.12.3.tgz","fileCount":69,"integrity":"sha512-6X6X7BaPKfXz/1cNlpTwYp8o0yqSWTi5v5W33sRuUqwqJyeCYhGEDZEC8/T+Aldi6IMoONIweBlt07nLHehRQw==","signatures":[{"sig":"MEUCIHIQltd1HAyIEYxrO8pdMFmOqJQ9P5SJcdy1sQ5uZE0XAiEApvIZsb8ZOnVdCaMzKxpZgerbwFgtDi5ikfv7dFFAf2c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":531257},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.12.3_1783332442025_0.08861231827509863","host":"s3://npm-registry-packages-npm-production"}},"0.12.4":{"name":"nexting-cc-bridge","version":"0.12.4","_id":"nexting-cc-bridge@0.12.4","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"2a6c87df9ba61102b7b21fc16a905ed3f74b4ce5","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.12.4.tgz","fileCount":69,"integrity":"sha512-0TMGK2qRtSo0Uge81X7dWrYBusg2TEiSkSh49b4frvEU47EmhEcJErGFwRUHhPJoCF+dnoA/PuJ3aJvSKMqUJQ==","signatures":[{"sig":"MEUCIQDBHkoTQEqbVHUUtBFq9O8WGasM6iURuk4fLH7LNtDhoAIgJ5RU5sj640vKVLpPxQVV4qZ0VjiCPkb+Cw4uDIUMmv0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":545690},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.12.4_1783333663603_0.29167968551901535","host":"s3://npm-registry-packages-npm-production"}},"0.12.5":{"name":"nexting-cc-bridge","version":"0.12.5","_id":"nexting-cc-bridge@0.12.5","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"c9b286ceac0c313e5a1086d30d2d4932186e424b","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.12.5.tgz","fileCount":69,"integrity":"sha512-fMN37utK5Yu5Y3QAI7o16k0bixj8Tyk7xyJcuAPRZQs7LkiUBm/gb7AMj5wnD89uvxlGNOvQP4ADA75nD5Aklw==","signatures":[{"sig":"MEUCIQCvKf9ZS7RX5PEkl0QJdmS6Ua+VvtBWpmZwvLudOjc0PAIgP6A4WcxdxfH3arKcqyTABUxRRQAHNzjcA2UNfpJySf0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":547223},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.12.5_1783335615184_0.7254230651237057","host":"s3://npm-registry-packages-npm-production"}},"0.12.6":{"name":"nexting-cc-bridge","version":"0.12.6","_id":"nexting-cc-bridge@0.12.6","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"4b22471ac0d8a4aa7ccb842c841bfea63f7b0fcc","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.12.6.tgz","fileCount":69,"integrity":"sha512-jPIqS5DMt26sLLnJiH67JrmCAnHGZOQtHLDMz42a4i2Hx7F1TAiHMRPgsZ6taQbZCM9+uOy2DfX+05YFwehr9Q==","signatures":[{"sig":"MEQCIBddHaWf/7EPxCoilH47vh3dLAfaBfduu1eCAZlC2FFeAiATmbh/CLdf3IgcRztPXoL5WMuKHq1PTBvylV7KWOeWbg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":549209},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.12.6_1783337557360_0.29086417506041684","host":"s3://npm-registry-packages-npm-production"}},"0.12.7":{"name":"nexting-cc-bridge","version":"0.12.7","_id":"nexting-cc-bridge@0.12.7","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"8fa32a46c9d53fa341f4db26c4f43fc47093bc07","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.12.7.tgz","fileCount":70,"integrity":"sha512-iD98AhKQjxWWg/DTDmULBG55c7Mjz9UK1R6DOq2ErwSx2zVmM1FAZ9/2f/7v4xxw+mFJI1OXUbI+NjtjZe6U1g==","signatures":[{"sig":"MEUCIQD/YCnJRV8BNdzt/IrSCA4dTjlLsUExNlA+LEwbQWOgiAIgMzm1cl8Yj6wCwK4yKFUWkQEbgtfxFsAXWRPea33Zfvk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":558813},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.12.7_1783443375541_0.04118379710330289","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"nexting-cc-bridge","version":"0.13.1","_id":"nexting-cc-bridge@0.13.1","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"e1bc56d672a4d6586ff1dbba71d51c33d4fbcf0a","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.13.1.tgz","fileCount":72,"integrity":"sha512-DyxJBJRg3WU9+DCGbvxfvEcDpWXaptqPVG+5E0qNNpbbUrKvJ1CiwfFIhZAU4q4yG/+VtwYzfb42wyQuDnyhfQ==","signatures":[{"sig":"MEYCIQCqihztEXAwneDMPUc/rg5Dgs2K37F0mlJ3/Jvpn1fgKQIhAKoooin8+IlFg7x8u+XukCpogZgkSAkkSWXQKd/IQq0k","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":607718},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.13.1_1783839224827_0.36326944600879885","host":"s3://npm-registry-packages-npm-production"}},"0.13.2":{"name":"nexting-cc-bridge","version":"0.13.2","_id":"nexting-cc-bridge@0.13.2","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"568ecaa808eb23f1be67f7e3e5b11d89c0217680","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.13.2.tgz","fileCount":70,"integrity":"sha512-h9XyzjfXuRmtlklyncTlEQT5XUoB6kebI5vecngXFLo2/TS5WfC6Q70N9hUuRs0opP3sY8vMDQzuiCxHktZ0yw==","signatures":[{"sig":"MEYCIQC9eWNKgHMFkthy5XVDK1bmqZdSl512NM+JU2z6RlyQ3wIhAMXEmMLB1p1SDVGFC/yn6naY1OTNFD5+WNaMN55F/dQP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":563407},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.13.2_1784273754108_0.5185309310106658","host":"s3://npm-registry-packages-npm-production"}},"0.13.3":{"name":"nexting-cc-bridge","version":"0.13.3","_id":"nexting-cc-bridge@0.13.3","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"ccff3d5e45ea51712c239c3c5939cc5c39649e37","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.13.3.tgz","fileCount":80,"integrity":"sha512-tTNptNQbBAwXPiSZ3OENBXzlqSLqDmYTbT1bZDkiJEpQewX/u3qOuEqGEfhXxp6dz90Vx4GzkogX8maJiSZ7Hw==","signatures":[{"sig":"MEUCIBEDwaHcycYjbnBwb44WeVLqyddBmI+C5iR9FMTGqhSLAiEAiT2ThUSf1um6pdoBuSaiFFLJ/rXGudORf6Q7lt+e9Pk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":721179},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.13.3_1784394207264_0.6813479241328806","host":"s3://npm-registry-packages-npm-production"}},"0.13.4":{"name":"nexting-cc-bridge","version":"0.13.4","_id":"nexting-cc-bridge@0.13.4","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"6e6a965eb28ed549357e4349db11fdd790ea6cac","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.13.4.tgz","fileCount":80,"integrity":"sha512-y9V3UA9X2+4xqHCXMPo5X/GTmVHBCR4ksmHcByvEw2sA/Gw7xkLfAiYq0FrRA1Rj++SJJweWdnvWGqBNf0g2Gg==","signatures":[{"sig":"MEUCIBK2v1dKXzlkqDBPAiJIDZf90Zvi8yV9WoMw0wkIzEF+AiEAz2ZfLw4LplrTfD9/9SCXCHIi9l3phZi5mUr+QOoqnnE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":727254},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.13.4_1784726179143_0.20819134422958263","host":"s3://npm-registry-packages-npm-production"}},"0.13.6":{"name":"nexting-cc-bridge","version":"0.13.6","_id":"nexting-cc-bridge@0.13.6","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"0a508e21517315a39606a78b58b98e64b463d238","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.13.6.tgz","fileCount":81,"integrity":"sha512-FQSbbCUtUhr7lIsRGk1kzDQIQrgyZWpMj2BB/QGg7Nx6M1ap82V82+d9SKTxX1L1UMxS22k2vhWw79EpDJQeNg==","signatures":[{"sig":"MEUCIQDirEZ4Uqdn9C0jPOLcWg6sAOpYyMVf1mD0iCsqLQ6ZwQIgULVtZ9uHIAxS+SD1JqqAfTz3s9ElSKeYMhWNonV2Zu0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":763685},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.13.6_1784956609683_0.7820116169532694","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"nexting-cc-bridge","version":"0.15.0","_id":"nexting-cc-bridge@0.15.0","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"0e12007a815c1d7287431756420dc427bf35f3b4","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.15.0.tgz","fileCount":83,"integrity":"sha512-A5QQ2tQfN6aYgV/8q9WX2fobComA3R9nwiAZzANtn7vUIUj6Dq9nc2vFIhfWTVVm8LuFsgFrqK7nJ6yVq86kVA==","signatures":[{"sig":"MEUCICo+NTzMiqe+qbj4Zu4i0lXEVBcIpI264saM2DIUqMStAiEA9y8Yg9gaow8q+gT/PS81CBIgDr5BSW1Q3GwLRN/EIus=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":841869},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.15.0_1785175600325_0.8953989135721281","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"nexting-cc-bridge","version":"0.16.0","_id":"nexting-cc-bridge@0.16.0","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"f369a5c6f4758dad4447a1e1111052de63ea288c","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.16.0.tgz","fileCount":88,"integrity":"sha512-q3nMDX/mEqLzeDlkU5fFIPQRQv/0p+YnDdQ0qfQ7pszvTrRTJEQ2e3eYKWil84RazPGNvqMiDTYjz6tnxMVQjQ==","signatures":[{"sig":"MEYCIQDlZ9oulFju69hzFPEamZHKEtZu828NjadCI4ZYsf5UXgIhAOWMZbHbFC7uOYTVrc98hsBJEv92dxt2AVOXQsMNL0mC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1112858},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.16.0_1785395907294_0.33804250575709527","host":"s3://npm-registry-packages-npm-production"}},"0.16.1":{"name":"nexting-cc-bridge","version":"0.16.1","_id":"nexting-cc-bridge@0.16.1","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"5614f82bd7444bf8265405bdad4ef9c1566a9bef","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.16.1.tgz","fileCount":88,"integrity":"sha512-XuHREtLZmZ5U25+B5Xb/To013QLtLh8/UBb6B/EvgTxW+Q3AP2KwGvu2TRs+nv8Dg6kN17DvsLSkMty6Our3mQ==","signatures":[{"sig":"MEYCIQCzzjoCCTDLOiZgtVuJlvMjYEeU0B+8g6ElJlvpo85FfAIhAOHkzHeo5uaVd50aGI9HMcwc3uP4djqbY0W7vgz9+bWj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1118769},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.16.1_1785481231786_0.17248306304782313","host":"s3://npm-registry-packages-npm-production"}},"0.16.2":{"name":"nexting-cc-bridge","version":"0.16.2","_id":"nexting-cc-bridge@0.16.2","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"cdf4de79781889fa0e6ed14f83b2fc73e6cf8642","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.16.2.tgz","fileCount":90,"integrity":"sha512-GqtwPw38fxSy07fl05J99zHIpLqTJVybRNUCHiGB64QjACXfXaPb6JaMfiwMD5bv5diX6lJrQKN7FOS6RQohig==","signatures":[{"sig":"MEYCIQDWbYLDPxkeCEHXSxZPrxPF8Cka8QhSMAd7wn4HFZG++QIhAMwTzBffeUU4mCdUWkpd83hAq/6BZSwa1G50cw7AQevI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1135837},"type":"module","gitHead":"673fc3eb68ad26d57173ce8b99d40ddad11b2e41","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.16.2_1785609252885_0.8647919540769822","host":"s3://npm-registry-packages-npm-production"}},"0.16.3":{"name":"nexting-cc-bridge","version":"0.16.3","_id":"nexting-cc-bridge@0.16.3","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"42aeecf9e722efb56ffe0d22d1d05bc10f970b97","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.16.3.tgz","fileCount":95,"integrity":"sha512-ZUhUW2VmKloxu3/HFD/DFF1aowccFAbfOqa2nbbbDJkDye5EaUDSm24x/SYp2nVDSTS/aeG9UGJSKZh9NhvvqA==","signatures":[{"sig":"MEYCIQDJVnm+oCHZL7L4rurhOlHC2mqZWDopC/cUoFhebwlO1QIhAI46w7hWbSUOgeHdFC6mVcOjv/Hm6bRDL5JQ5JoO4mdt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1186305},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"10.9.3","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"22.18.0","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.16.3_1785996540458_0.3944018858632832","host":"s3://npm-registry-packages-npm-production"}},"0.16.4":{"name":"nexting-cc-bridge","version":"0.16.4","_id":"nexting-cc-bridge@0.16.4","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"24fd446bc85b0c82434039a02c59b125e6e80824","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.16.4.tgz","fileCount":97,"integrity":"sha512-wDECDeF2UaaUF4aZhJIRvflya5hZ67oGTZOyDqdM1ENErbLSpYnBZXkHNSdb2vxxoU2lWBr/r5uBpcmD+x1r2Q==","signatures":[{"sig":"MEQCIBj+UmbXQkJiCCVog74naTn/m3tNnMp0epaL+4/EKH2AAiAFbNiB5b/fFFJXjzMaillkF12Z+vI4F7kpz/pT7T3gxg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1199885},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.16.4_1786053232487_0.7505701100190865","host":"s3://npm-registry-packages-npm-production"}},"0.16.5":{"name":"nexting-cc-bridge","version":"0.16.5","_id":"nexting-cc-bridge@0.16.5","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"2f40f82c0693b7f187a3d315121ef7b658dff6b3","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.16.5.tgz","fileCount":97,"integrity":"sha512-QSjIzDILQ/S3GxTQfBzYPbBBq8tMs6SwaTE/DibZbqyYe6bypcP5MdfqQip4XetQnP7uhCosG4lHpTwiYw0qLQ==","signatures":[{"sig":"MEUCIQD1EzcpyyNmznvUFfZMEC5PmjoSFHBE1PZusgk6Qtqp5QIgJfhojFLdH0W32i43J6K2BnmyJCSG4M9R8SH2aOOyqDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1233063},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.16.5_1786191392543_0.10812813081052886","host":"s3://npm-registry-packages-npm-production"}},"0.16.6":{"name":"nexting-cc-bridge","version":"0.16.6","_id":"nexting-cc-bridge@0.16.6","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"bin":{"nexting-cc-bridge":"dist/cli.js"},"dist":{"shasum":"e3451f1f844803b6ecac284dfc74bc4fee4d2dec","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.16.6.tgz","fileCount":97,"integrity":"sha512-GRZkwlMT+Oxir433Aiy6XBjUPIy31jJPquYG0wEKIbTrHU4m2ClQyYT1gH9r5fSLl7YF/HURLxZvcod1tnnJEA==","signatures":[{"sig":"MEQCIBuaPmYMmCOWhU9hcDiC6TQwGXlXl5XV6XW1fCFUyR8yAiBMh21Of0uCMYSIcdR8NpF9jPR/+mxSovv5jeArE2tylg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1233150},"type":"module","scripts":{"dev":"node --import tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","devserver":"node --import tsx src/dev-server.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"_npmVersion":"11.11.0","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.18.0","undici":"^6.21.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^2.1.0","@types/ws":"^8.5.12","typescript":"^5.6.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/nexting-cc-bridge_0.16.6_1786195313857_0.8898971927094956","host":"s3://npm-registry-packages-npm-production"}},"0.16.7":{"name":"nexting-cc-bridge","version":"0.16.7","description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","type":"module","bin":{"nexting-cc-bridge":"dist/cli.js"},"scripts":{"test":"vitest run","test:watch":"vitest","build":"tsc -p tsconfig.json && chmod +x dist/cli.js","prepublishOnly":"npm run build","dev":"node --import tsx src/cli.ts","devserver":"node --import tsx src/dev-server.ts"},"dependencies":{"@agentclientprotocol/sdk":"1.3.0","@modelcontextprotocol/sdk":"^1.12.0","chokidar":"^3.6.0","https-proxy-agent":"^7.0.6","undici":"^6.21.0","ws":"^8.18.0"},"devDependencies":{"@types/node":"^22.0.0","@types/ws":"^8.5.12","tsx":"^4.19.0","typescript":"^5.6.0","vitest":"^2.1.0"},"optionalDependencies":{"node-pty":"^1.1.0"},"_id":"nexting-cc-bridge@0.16.7","_nodeVersion":"25.8.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-OdxAkV+HdLCz72UIm3KFkSCYvg4lhcfpnpy2WR+VVSpSlHSOrQdLjyBngxKlB2zA9Z1NZqyjRjnhF2ns/rIY4A==","shasum":"6c1e358145b4df1e94b193d6b253b815ec6ce27e","tarball":"https://registry.npmjs.org/nexting-cc-bridge/-/nexting-cc-bridge-0.16.7.tgz","fileCount":154,"unpackedSize":1888530,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEcJ3vN5C/hYj3X0UlE5WH9HW1TA+UbWtaiD/Zze0n0lAiBDSrXI0PV6x2YM0axhsSmvjGgGSDAHDnwYjDbCRPM2kQ=="}]},"_npmUser":{"name":"shangyiyong","email":"shangyiyong@outlook.com"},"directories":{},"maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nexting-cc-bridge_0.16.7_1786967321477_0.8409929974685499"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-22T03:47:08.194Z","modified":"2026-08-17T11:48:42.132Z","0.8.3":"2026-06-22T03:47:08.442Z","0.9.0":"2026-06-24T10:36:07.865Z","0.9.1":"2026-06-26T07:00:49.748Z","0.9.2":"2026-06-26T09:53:04.269Z","0.9.3":"2026-06-26T11:00:55.579Z","0.9.4":"2026-06-26T11:47:23.491Z","0.9.5":"2026-06-27T14:35:56.897Z","0.9.6":"2026-06-28T05:42:46.898Z","0.9.7":"2026-06-28T06:18:05.351Z","0.9.8":"2026-06-28T06:22:25.210Z","0.9.9":"2026-06-28T07:04:20.104Z","0.9.10":"2026-06-28T12:31:12.176Z","0.9.11":"2026-06-28T16:26:32.300Z","0.9.12":"2026-06-28T16:44:11.578Z","0.9.13":"2026-06-28T19:12:45.236Z","0.9.14":"2026-06-30T04:05:40.647Z","0.9.15":"2026-06-30T04:34:32.978Z","0.10.0":"2026-07-02T07:34:26.063Z","0.11.0":"2026-07-02T11:10:27.720Z","0.11.1":"2026-07-02T17:36:39.488Z","0.12.1":"2026-07-02T17:44:03.455Z","0.12.2":"2026-07-06T06:43:06.847Z","0.12.3":"2026-07-06T10:07:22.200Z","0.12.4":"2026-07-06T10:27:43.825Z","0.12.5":"2026-07-06T11:00:15.348Z","0.12.6":"2026-07-06T11:32:37.507Z","0.12.7":"2026-07-07T16:56:15.734Z","0.13.1":"2026-07-12T06:53:45.029Z","0.13.2":"2026-07-17T07:35:54.550Z","0.13.3":"2026-07-18T17:03:27.449Z","0.13.4":"2026-07-22T13:16:19.322Z","0.13.6":"2026-07-25T05:16:49.874Z","0.15.0":"2026-07-27T18:06:40.516Z","0.16.0":"2026-07-30T07:18:27.479Z","0.16.1":"2026-07-31T07:00:31.942Z","0.16.2":"2026-08-01T18:34:13.058Z","0.16.3":"2026-08-06T06:09:00.656Z","0.16.4":"2026-08-06T21:53:52.688Z","0.16.5":"2026-08-08T12:16:32.712Z","0.16.6":"2026-08-08T13:21:54.048Z","0.16.7":"2026-08-17T11:48:41.656Z"},"description":"Nexting Claude Code bridge — runs Claude Code through a local hub so your phone mirrors and controls your terminal sessions (two-way synced).","maintainers":[{"name":"shangyiyong","email":"shangyiyong@outlook.com"}],"readme":"# nexting-cc-bridge\n\nThis package contains three isolated local-agent runtimes: the Claude Code PTY\nmanager, the Codex app-server adapter, and the Cursor ACP adapter. Sharing a\npackage does not make their protocol or delivery state interchangeable.\n\nRuns on a user's Mac so their **phone mirrors and controls their Claude Code\nterminal sessions, two-way synced** — one model, no read-only/bubble split.\n\n**How it works (the \"manager\"):** your `claude` is wrapped by a thin shell that\nruns the real, official `claude` in a pseudo-terminal. Your terminal stays\nnative; the shell also mirrors the session to your phone and injects what the\nphone types. A single background **hub** daemon owns the cloud connection and\nmultiplexes every wrapped session, so you can run many `claude`s at once and the\nphone switches between them.\n\n**The one hard limit (OS):** a `claude` already running bare in a terminal can't\nbe reached — macOS won't let an outside process inject into another process's tty.\nSo only sessions started _through the manager_ are phone-controllable. The\ninstaller makes that invisible by putting a `claude` shim first on your PATH, so\nyou keep typing `claude` and every new session is automatically controllable.\n\nDesign: `docs/superpowers/specs/2026-06-07-cc-manager-unified-design.md` (current);\nearlier: `…2026-06-06-cc-shared-session-json-shell-design.md`, `…2026-06-04-…`.\n\n## Release notes\n\n### Unreleased\n\n- Added a Cursor-native ACP runtime with its own config\n  (`~/.nexting/cursor-bridge.json`), Cloud channel\n  (`/api/v1/cursor-bridge/connect`), capability revision, session catalog,\n  protected event union, local delivery semantics, file preview, reversible MCP\n  overlay, bounded worktree operations, and allowlisted SCM review. It does not\n  use Codex sidebar, queue/steer, or durable replay state.\n- Added protected metadata-first, fingerprint-bound remote file streaming for\n  iPhone previews. Reads stay bounded and read-only; Cloud relays chunks with\n  backpressure and never persists Mac-local file bytes.\n- Bridge hello now carries the canonical account-computer identity. Multiple\n  computers may stay online together; new sessions use the explicit\n  current-control computer while every existing session remains pinned to its\n  immutable source computer.\n\n### 0.16.6\n\n- Codex preview-backed session titles now preserve the complete official\n  `thread/list.preview` value instead of truncating it to 60 characters, keeping\n  phone and Desktop sidebar names identical.\n\n### 0.16.5\n\n- Codex phone session lists now mirror the real Desktop `~/.codex` sidebar:\n  native titles, complete official pagination, raw snapshot order, ordered pinned\n  threads/projects, canonical folders, archived rows, and running/unread state.\n- Rename and archive/unarchive complete only after the native Mac action and its\n  correlated cloud projection are both durable. Unsupported phone pin writes\n  fail closed instead of racing Desktop's private state store.\n- Sidebar freshness uses cloud-receipt age rather than comparing Mac and phone\n  clocks. Advanced Privacy snapshots keep stable opaque project revisions while\n  retaining randomized ciphertext.\n\n### 0.16.3\n\n- Recovered from a lost/corrupt `cc-bridge.json` token automatically via the\n  `cc-identity.json` backup (with tombstone on explicit unbind), so the hub no\n  longer exits `No token` after an accidental config loss.\n- The macOS daemon no longer hot-restarts on config-level exits\n  (`KeepAlive` now only relaunches real crashes) and re-resolves node/CLI on\n  every start, so global npm reinstalls can't strand it.\n- Hub startup now fails fast with the real reason instead of a silent 10s\n  timeout.\n- The phone treats a confirmed-offline bridge as a last-synced snapshot: flat\n  session list, grey status, \"status pending sync\", live badges hidden.\n\n### 0.16.0\n\n- Phone sends now use durable, idempotent intent IDs. Mac sleep, network\n  reconnects, and bridge restarts recover the same send instead of losing it or\n  creating a duplicate.\n- Codex Desktop ownership is reacquired after reconnect, and delivery receipts\n  distinguish confirmed failure from an unknown outcome. The app only offers a\n  retry when the server knows it is safe.\n- Codex approvals and atomic first-turn creation are correlated end to end, so\n  a phone answer reaches the exact pending request and a newly created task\n  keeps its first prompt through recovery.\n- Advanced Privacy is on by default. Version 0.16.0 completes E2E v2 coverage\n  for Claude Code and Codex prompts, transcripts, terminal I/O and control,\n  approvals, tool/file control payloads, media, voice, and encrypted push\n  previews. The cloud routes ciphertext and still sees delivery metadata such\n  as account/session/device identifiers, timestamps, sizes, and delivery state.\n  Unsupported mixed-version paths fail closed instead of sending plaintext.\n\n### 0.14.0\n\n- Added atomic Codex task creation: the bridge returns the canonical Codex task\n  ID together with the first-turn receipt, removing the previous create-then-\n  send race.\n- Added managed-runtime routing and leases so a task stays pinned to one active\n  Mac/runtime while reconnect and handoff are resolved.\n\n### 0.13.6\n\n- Codex mobile “Full access” now sends both `approvalPolicy: \"never\"` and the\n  unrestricted sandbox at thread and turn start, so Desktop handoff no longer\n  falls back to approval prompts.\n- Resuming a Codex thread without an explicit permission change now preserves\n  that thread's persisted permission profile instead of overriding it.\n\n### 0.13.5\n\n- E2E key requests now bind the bus token to the active `bridgeId`; the cloud\n  keeps a narrow headerless migration path for already-installed 0.13.4 daemons.\n- Static identity and per-session CEKs survive bridge restarts without CC and\n  Codex daemons overwriting a shared aggregate key file.\n- Device-key and new-session CEK publication retry after handshake races and\n  transient failures. `NEXTING_CODEX_E2E=true|false` configures Advanced\n  Privacy without replacing the stable bridge configuration.\n\n**If a session ever exits instantly with no output** (macOS Gatekeeper/syspolicyd\noccasionally SIGKILLs node-pty's `spawn-helper`, and the kill verdict sticks to\nthat file's inode, so every new session then dies the same way): the bridge\nself-heals — it rewrites the pty prebuild binaries to fresh inodes, restarts the\nsession once, and prints a yellow `[Nexting] … self-healed` notice. Full phone\ncontrol is kept; nothing falls back to a lesser mode. If the retry also fails,\nreinstall with `npm i -g nexting-cc-bridge` (a fresh copy = clean inodes).\n\n## Install (end users)\n\nClaude Code and Codex retain the public/legacy installers below. Cursor is\ninstalled and connected through **NextingMac → Agent Control → Cursor**: when\nCursor.app is already on this Mac (or the user taps Install and Connect),\nNexting validates Cursor's official HTTPS installer, installs `cursor-agent`\ninto a Nexting-isolated HOME, then validates ACP with the user's real HOME.\nStandalone Agent auth is diagnostic and never gates the relay; do not start a\nlogin flow or hand-copy Cursor credentials into this package.\n\nIn the Nexting app: **Claude Code → Connect**, which shows a one-line command\n(it embeds an account token, so no second login):\n\n```bash\ncurl -fsSL https://nexting.ai/install-cc | NEXTING_CC_TOKEN=<token> bash\n```\n\nThis binds the Mac to your account, installs the manager, puts the `claude` shim\non PATH, and starts the hub daemon (launchd). Then just run `claude` as usual.\n\n**Runtime boundaries:** the public shell installer is npm-backed and requires a\ncompatible host Node/npm. NextingMac instead bundles and verifies a private\nruntime, installs immutable versions, and keeps `ai.nexting.desktop-bridge`\nrunning independently of the UI. This managed path is production-validated;\nsigned/notarized public Mac distribution is still pending.\n\n- Bypass once: `NEXTING_CC_DISABLE=1 claude`\n- Remove everything: `nexting-cc-bridge uninstall`\n\n(No app token? `curl -fsSL https://nexting.ai/install-cc | bash` falls back to\ndevice-code browser auth.)\n\n### Windows\n\n**Codex is fully supported on native Windows** (since 0.10.0):\n\n```powershell\nirm https://nexting.ai/install-codex.ps1 | iex\n```\n\nThat logs in (device-code browser auth), installs this package, and registers a\nper-user Scheduled Task (`NextingCodexBridge`, at-logon + restart-on-failure —\nthe launchd equivalent). The bridge drives `codex app-server --stdio` per\nsession; the official managed-daemon control socket is never dialed on Windows\n(it's broken there — openai/codex#24090). Terminal mode (phone-started PTY) is\nnot available on Windows yet; app-server control covers send/steer/live sync.\nRemove with `nexting-cc-bridge codex-uninstall`.\n\n**Claude Code is fully supported on native Windows** (since 0.11.0):\n\n```powershell\nirm https://nexting.ai/install-cc.ps1 | iex\n```\n\nThat logs in, installs this package, and sets up the Windows translation of the\nmac trio: a `claude.cmd` shim in `~/.nexting/bin` (prepended to the USER Path —\nfully quit + reopen your terminal app for it to take effect; new tabs inherit\nthe old environment), and a `NextingCcBridge` Scheduled Task running the hub\n(`cli.js hub`, named pipe `\\\\.\\pipe\\nexting-cc-hub-<user>` instead of the unix\nsocket). Typing `claude` routes through `claude-shim` (same bypass rules as the\nbash shim: `NEXTING_CC_DISABLE=1`, piped stdio, `-p/--print`, non-interactive\nsubcommands go straight to the real claude — resolved from known install\nlocations first, `%USERPROFILE%\\.local\\bin\\claude.exe` topmost; `where.exe`\nminus the shim dir is only a last resort).\nInteractive runs are wrapped in a ConPTY (node-pty) and mirror to the phone;\nphone-started sessions spawn the same way. Caveats: ConPTY is a translating\nlayer (not byte-passthrough) and Claude Code has known ConPTY rendering issues\nupstream — expect occasional repaints; sessions not started through the shim\nshow as idle (no `ps`/`lsof` on Windows). Remove with\n`nexting-cc-bridge uninstall`.\n\n### Region-locked egress (e.g. China)\n\nA phone-created Claude Code session starts a real Mac-side PTY, and Codex starts\nits Mac app-server child. Those processes run under the launchd daemon, so they\ndo NOT inherit the `https_proxy` your terminal `claude` wrapper uses. If your\nregion needs a proxy to reach Anthropic/OpenAI, the agent can exit direct and\nfail `403 Request not allowed` (while the terminal works). Worse, a different\nexit IP on the same account is an **account-ban** risk.\n\nFix: set `engineEnv` so bridge-started agents exit from the **same** residential\nIP / timezone / locale as your terminal. If your shell rc defines `CLAUDE_PROXY`\n(or `CLAUDE_PROXY_{USER,PASS,HOST,PORT}`):\n\n```bash\nnexting-cc-bridge sync-proxy   # writes engineEnv to ~/.nexting/{cc,codex}-bridge.json\n\n# NextingMac-managed runtime\nlaunchctl kickstart -k \"gui/$(id -u)/ai.nexting.desktop-bridge\"\n\n# Legacy shell installer only; restart the affected engine\nlaunchctl kickstart -k \"gui/$(id -u)/ai.nexting.cc-bridge\"\nlaunchctl kickstart -k \"gui/$(id -u)/ai.nexting.codex-bridge\"\n```\n\nOtherwise add an `engineEnv` object by hand to those config files. It **fails\nclosed** (a dead proxy errors the request, never falls back to direct) and the\ndaemon log prints `engine egress: PROXIED via … / DIRECT` so you can verify it.\nRe-run `sync-proxy` after rotating the proxy. US users need none of this.\n\n## How discovery works\n\n- Scans `~/.claude/projects/<encoded-cwd>/*.jsonl` — each JSONL is one session,\n  `mtime` = last active. (`encoded-cwd` = every non-alphanumeric char → `-`.)\n- Finds live sessions via `ps`, matching the CLI by argv0 basename `claude` (since\n  0.5.1 — covers npm, pnpm, and the native installer's `~/.local/bin/claude`; the\n  desktop app is excluded), deduped to **root** processes by PPID. Procs started\n  with `--session-id <uuid>` (every wrapper-run session) bind pid↔session\n  **exactly**; only bare procs without it fall back to the heuristic: `lsof` the\n  proc's cwd, then with N live procs in a project the N newest JSONLs **touched\n  within the last 30 minutes** are `running`, the rest `idle` (the freshness\n  bound keeps hours-old sessions from showing as running just because unrelated\n  procs exist in the same project); extra procs with no JSONL yet are virtual\n  `pending-<pid>`.\n- List rows read only head 16KB (title/cwd) + tail 128KB (recent messages). Full\n  transcript is read on demand when the phone opens a session.\n- Row title (since 0.4.1) = the session's **live recap**: the freshest\n  `{type:\"system\", subtype:\"away_summary\"}` entry Claude Code keeps appending to\n  the JSONL (tail window beats head). Falls back to `ai-title`, then the first\n  user message — slash-command wrappers render as `/name`, local-command caveats\n  are skipped. Codex sessions have no recap and keep their meta title.\n- Codex transcripts (since 0.5.1) parse `~/.codex/sessions/` rollout JSONL and\n  hide the bookkeeping the Codex TUI never renders — developer/system-role\n  instruction messages and user-role `<environment_context>` /\n  `<user_instructions>` / `<turn_aborted>` prefix messages — so the phone shows\n  exactly what Codex shows.\n- Live streaming (since 0.5.0): while a phone has a session open, the cloud\n  arms a watch (`cc_watch` / alias `cc_watch_start`) and the bridge **tails that\n  session's JSONL** (`transcript-watcher.ts` + `watch-manager.ts`), pushing new\n  entries as `cc_event{kind:\"transcript_append\", startIndex, …}` (idempotent by\n  absolute index) plus `watch_ok{entryCount}` reconciliation heartbeats, so\n  terminal-driven turns appear on the phone block-by-block instead of on the\n  next poll. Watches stop on `cc_unwatch` / `cc_watch_stop` or expire on their\n  own TTL; `watch_failed` tells the phone to fall back to polling.\n\n## Commands\n\n```bash\n# normal usage (set up by the installer; you don't run these by hand)\nnexting-cc-bridge install     # install the `claude` shim + PATH + start the hub (idempotent)\nnexting-cc-bridge uninstall   # remove shim + PATH entry + hub launchd (reversible)\nnexting-cc-bridge hub         # the background daemon: holds the cloud link, multiplexes all shells\nnexting-cc-bridge term -- ... # one wrapped `claude` that joins the hub (what the shim calls)\n\n# debug / legacy\nnexting-cc-bridge once        # print one discovery snapshot as JSON and exit\nnexting-cc-bridge start       # legacy read-only discovery daemon\nnexting-cc-bridge mirror      # legacy single-session mirror (one bridge per user)\n```\n\n**Architecture:** `hub` (one daemon, one cloud WS, listens on\n`~/.nexting/cc-hub.sock`) ← many `term` shells (each = one pty-wrapped `claude`,\nregisters over the local socket). The hub multiplexes all shells to the cloud and\nroutes phone input back to the right one by `termId`. A shell exiting (Ctrl-C /\ncrash) sends `bye`, so the phone never sees a ghost terminal.\n\nAll CLI completion, signals, startup failures and fatal errors converge on one\nidempotent cleanup controller. It drains owned delivery, closes local servers,\nstops child processes and releases resources in a stable order. A cloud or\nnetwork disconnect only starts the existing reconnect flow: it never stops a\nlocal Claude/Codex/Cursor task. Claude, Codex, and Cursor retain separate\nexecution state, queues and shutdown boundaries.\n\nCursor has different delivery semantics: an offline send stays a client-local\ndraft; `failedBeforeHandoff` is retryable only with proof that ACP was not\nwritten; an interrupted post-write result is `unknown` and is never replayed\nautomatically. The current cross-layer contract is\n[`docs/cursor-bridge-architecture.md`](../../docs/cursor-bridge-architecture.md).\n\n### Credential files and daemon recovery (macOS)\n\nThe hub resolves its token via `resolveCcCredentials()`: env override →\n`~/.nexting/cc-bridge.json` → the `~/.nexting/cc-identity.json` backup\n(bridgeId+token, mode 0600), which self-heals the config when it loses or\ncorrupts the token. An explicit `uninstall`/unbind writes a tombstone into the\nidentity file so the backup never resurrects revoked credentials. All config\nwrites are atomic (tmp + rename via `writeJsonConfigSync`).\n\nThe launchd plist points at a generated launcher that re-resolves node and the\nCLI on every start (never pins the npm-global path), and runs with\n`KeepAlive={SuccessfulExit:false}` — only real crashes relaunch, so a\nconfig-level exit cannot hot-loop the daemon.\n\n## Local dev / end-to-end proof (no cloud needed)\n\n```bash\nnpm install\nnpm test                              # unit and integration tests\nnode --import tsx src/dev-server.ts &  # cloud stand-in (ws://localhost:7799)\nNEXTING_CC_URL=ws://localhost:7799/cc-bridge/connect NEXTING_CC_TOKEN=dummy \\\n  node --import tsx src/cli.ts start & # bridge against real ~/.claude/projects\nnode --import tsx src/phone-probe.ts   # simulates the phone: lists + opens a transcript\n```\n\n**Publishing:** never `npm publish` from a shared/dirty checkout — unrelated\nuncommitted files leak into the tarball. Publish from a clean worktree at the\nlanded commit (`npm ci` first), then delete the worktree.\n\nFor sidebar-schema releases, deploy in this order so no component observes a\nfield its dependency cannot store or serve:\n\n1. Apply the idempotent cloud SQL directly (`088` if not already present, then\n   `089_cc_sessions_project_revision.sql`). Never run the production migration\n   runner.\n2. Deploy and import-check the cloud API, then verify `/health`.\n3. Publish the matching npm version from the landed clean commit. For the\n   NextingMac-managed path, build/install the immutable runtime and restart\n   `ai.nexting.desktop-bridge`; only legacy shell installs use per-engine daemons.\n4. Build the iOS and Android parity sources without treating source/build success\n   as proof of App Store or Play publication.\n5. Run `CODEX_SIDEBAR_LIVE=1` against production with\n   `NEXTING_EXPECTED_BRIDGE_VERSION` set to the candidate version. The proof must\n   pass its Desktop-before/API/Desktop-after stability sandwich, official-source\n   health/version gates, complete official titles, strict indexed/protected IDs\n   and title revisions, and full-field comparison.\n\n## End-to-End Encryption\n\nThe Nexting cloud acts as a **relay and store**, not the agent host. E2E is\nenabled by default for new and migrated accounts and remains user-disableable.\nWhen enabled, the cloud forwards ciphertext plus authenticated routing metadata;\nit cannot read protected content.\n\n### Trust model\n\n- **Trusted endpoints**: the Mac bridge and the user's phone.\n- **Untrusted**: the Nexting cloud server (treated as a relay that may be\n  compromised).\n- When E2E is on, only the endpoints can decrypt transcript text, titles,\n  summaries, and stream deltas.\n\n### What gets encrypted\n\n| Content                                                              | Encrypted when E2E on                                                                                                                                                |\n| -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Session titles (`cc_snapshot`)                                       | Yes                                                                                                                                                                  |\n| Session summaries (`cc_snapshot`)                                    | Yes                                                                                                                                                                  |\n| Recent message text (`cc_snapshot`)                                  | Yes                                                                                                                                                                  |\n| Transcript entries (`cc_event transcript_append`)                    | Yes                                                                                                                                                                  |\n| Streaming text and thinking deltas (`cc_event stream_*_delta`)       | Yes                                                                                                                                                                  |\n| Inbound user sends (`cc_send content`)                               | Yes                                                                                                                                                                  |\n| Inbound legacy string answers (`cc_answer updatedInput`)             | Yes; structured approval response objects are not yet covered                                                                                                        |\n| Atomic Codex first prompt (`cc_create_turn content`, bridge ≥0.15.0) | Yes — phone-originated CEK is wrapped to the exact active Mac; missing keys fail closed                                                                              |\n| Media/image bytes                                                    | Yes — `src/media-hydrator.ts` encrypts blob bytes with `sealBytes` (session CEK) before upload and marks them `encrypted: true`; the phone decrypts with `openBytes` |\n| Terminal mirror frames (`cc_term_output`, `cc_term_input`)           | Yes                                                                                                                                                                  |\n| Protected control frames                                             | Sensitive fields are encrypted; the whole frame is semantically authenticated                                                                                        |\n\n### Cryptographic details (auditable)\n\nAll algorithms are in `src/e2e/crypto.ts` (Node built-in `node:crypto` only —\nno third-party crypto libraries).\n\n**Content encryption** (per session, text fields):\n\n- **Algorithm**: AES-256-GCM\n- **Per-session key**: 32-byte Content Encryption Key (CEK), one per session,\n  generated fresh by the bridge at session creation.\n- **Wire envelope**: `e2e:v1:<base64(nonce[12] || ciphertext || tag[16])>`\n- **Live AAD contract**: every protected live frame carries\n  `e2eAadVersion: 2`, a fresh `e2eFrameId`, stable\n  `e2eSenderDeviceId`, positive monotonic `e2eSequence`, positive\n  `e2eKeyRevision`, non-negative `e2ePeerRevision`, and the current random\n  per-Bridge-process `e2eBridgeEpoch`. For each protected field, AAD is the\n  exact UTF-8 `JSON.stringify` output of:\n\n  ```text\n  [\n    \"nexting-e2e-aad\", 2,\n    e2eFrameId, e2eSenderDeviceId, e2eSequence,\n    effectiveSessionId, effectiveKeyRevision, e2ePeerRevision,\n    type, kindOrNull,\n    concretePath,\n    presentIdentities,\n    canonicalSemanticManifest\n  ]\n  ```\n\n  `concretePath` contains exact property names and array indexes.\n  `presentIdentities` contains the present values, in order, of `termId`,\n  `requestId`, `controlRequestId`, `promptId`, and `itemId`.\n\n- **Whole-frame proof**: `e2eFrameProof` seals the fixed plaintext\n  `nexting-e2e-frame-proof:v2` with AAD\n  `JSON.stringify([\"nexting-e2e-frame-proof\", 2, sessionId,\neffectiveKeyRevision, canonicalSemanticManifest])`. Snapshots carry one proof\n  per session. The proof is verified before field decryption or any local side\n  effect.\n- **Canonical manifest**: the semantic object is serialized with RFC 8785 JCS.\n  Object keys sort lexicographically by raw UTF-16 code units (not locale or\n  JavaScript integer-key enumeration, so `\"10\"` precedes `\"2\"`); arrays retain\n  their original order. Arrays must be dense JSON arrays with only enumerable\n  indexed data properties: holes, deleted indexes, accessors, non-enumerable\n  indexes, extra string properties, and symbol properties fail closed. Every\n  protected body becomes the exact marker shape\n  `{\"$nextingE2EProtected\":{\"encoding\":...,\"path\":[...]}}`, where `encoding`\n  is the rule's JSON string literal `\"text\"` or `\"json\"` and `path` contains the\n  concrete string keys and array indexes. Strings use ECMAScript JSON escaping;\n  unpaired UTF-16 surrogates fail closed. Numbers must be finite IEEE-754 doubles\n  in ECMAScript's shortest round-trippable JSON form (`-0` becomes `0`);\n  booleans and `null` retain their JSON spellings. All own enumerable string\n  keys—including `__proto__`, `constructor`, `prototype`, numeric-like, and\n  Unicode keys—are included. `NaN`, infinities, symbols, unsupported values,\n  exotic prototypes, and cycles fail closed. Only `e2eFrameProof` is excluded.\n  These rules and the marker are normative for phone implementations reproducing\n  the AAD.\n- The legacy `\"<sessionId>|0|<field>\"` AAD is not accepted for enabled live\n  traffic. It exists only for the explicitly disabled/history compatibility\n  path.\n\n**Media encryption** (binary):\n\n- **Algorithm**: AES-256-GCM (same `sealBytes` / `openBytes` helpers).\n- **Wire layout**: raw bytes — `nonce[12] || ciphertext || tag[16]` (no text\n  prefix; an `encrypted: true` metadata flag marks the blob).\n- **AAD**: `\"<sessionId>|0|media\"`\n\n**Key wrapping** (CEK delivery to the phone):\n\n- **Algorithm**: ephemeral X25519 ECDH → HKDF-SHA256 → AES-256-GCM\n- **Derivation**: `HKDF-SHA256(ikm=X25519_shared, salt=UTF8(sessionId), info=UTF8(\"pinclaw-e2e-cek-wrap\"), L=32)`\n- **Wire format**: `wrap:v1:<base64(ephPubSPKI[44] || nonce[12] || ct || tag[16])>`\n- The bridge generates an ephemeral X25519 keypair per wrap, computes the\n  shared secret with the recipient device's long-term public key, derives a\n  per-wrap AES-256-GCM key, and seals the CEK. The recipient (phone) reverses\n  the process.\n\n**Device identity key**:\n\n- Each endpoint (Mac bridge, phone) has an X25519 long-term keypair.\n- The bridge private key is stored in the **macOS Keychain** (service\n  `pinclaw-bridge-e2e`, written via `security add-generic-password`); on\n  Windows/Linux it is stored under the user's `~/.nexting` profile directory.\n  Per-session CEKs use separate Keychain items on macOS and separate hashed\n  owner-only files on Windows/Linux. The private key never leaves the machine.\n  See `src/e2e/keychain-identity.ts`.\n- Public keys are published to the cloud key directory so endpoints can\n  fetch each other's keys for wrapping.\n\n**Sequence persistence and restore boundary**:\n\n- Outbound sequences are reserved in trusted blocks of 1,024 before use.\n  Inbound acceptance also reserves a trusted 1,024-number block before its\n  first number is accepted. Exact within-block progress lives in memory and an\n  owner-only atomic fast cache, so accepted frames inside a block run without a\n  macOS `security` subprocess. Known duplicates do not rewrite the cache.\n- A restart consumes the unused tail of the prior inbound block. A rejected\n  sender receives `cc_event/e2e_sequence_required`. Its schema is validated\n  before stamping and permits only the non-empty sender device id and positive\n  safe-integer minimum next sequence. The minimum is sealed, and the event\n  carries its own v2 outbound sequence, current Bridge epoch, and mandatory\n  whole-frame proof; a relay cannot forge either recovery value.\n- Every `cc_hello`, including while E2E is disabled, publishes a fresh random\n  `e2eBridgeEpoch` and advertises `bridgeEpoch: \"per_process_echo_required\"` so\n  a live policy transition can use it without reconnecting. Every authenticated\n  Bridge frame, including snapshots and recovery hints, carries that epoch and\n  binds it through the canonical manifest. Every enabled phone command must\n  echo the exact current value. Missing/stale epochs fail before field opening,\n  persistent sequence claim, terminal binding, or any consumer. A process\n  restart therefore rejects commands captured under a pre-restore epoch even\n  if every co-located non-macOS sequence file was rolled back.\n- macOS keeps the session catalog and independent sequence-generation anchor in\n  separate Keychain items. The local fast cache is never rollback authority;\n  Keychain block reservation remains authoritative across crashes and local\n  directory restores.\n- Linux/Windows use owner-only, atomic, co-located files. This is crash-safe,\n  but copying an older whole directory or VM image can also copy both the\n  catalog and its anchor, so it is **not** rollback-resistant backup storage.\n  Runtime advertises `restoreProtection: \"crash_safe_local_only\"` and\n  `requiresExplicitRekeyAfterRestore: true` in `cc_hello`. Restore tooling must\n  set `NEXTING_E2E_RESTORED_FROM_BACKUP=1`; the bridge then fails closed with\n  `E2E restored local state requires rekey/reset` until the device is\n  deliberately reset/re-paired and the flag is cleared. macOS advertises\n  `restoreProtection: \"trusted_anchor\"` and does not require this local-backup\n  reset. The manual flag remains useful for a known restore because it also\n  blocks restored CEKs and outbound sequence state before reconnect. The epoch\n  does not claim protection if a coordinated VM/device snapshot restores live\n  process memory on both trusted endpoints, including the same epoch and keys;\n  that case still requires explicit reset/rekey.\n\n**Safety number** (human-verifiable MITM protection):\n\n- `SHA-256(sort(pubA, pubB))` — the first 10 bytes encoded in base32\n  (`A-Z2-7`), displayed as `XXXXX-XXXXX`.\n- Compare this five-plus-five string between your Mac terminal and the Pinclaw\n  app. If they match, no cloud-side key swap has occurred.\n\n### What you can verify\n\n1. **Algorithms**: read `src/e2e/crypto.ts` — every cipher call is there.\n   Node's built-in `node:crypto` module, no opaque libraries.\n2. **Which fields are sealed/unsealed**: read `src/e2e/codec.ts`\n   (`EnvelopeCodec.encryptOutbound` / `decryptInbound`). The switch cases\n   enumerate every frame type that the codec touches.\n3. **Key storage**: read `src/e2e/keychain-identity.ts`. macOS identity/catalog/\n   anchor operations use `security find-generic-password`,\n   `add-generic-password`, and `delete-generic-password`; local owner-only files\n   hold lock ownership and the inbound window fast cache. Linux/Windows also use\n   owner-only atomic files for identity, catalog, sequence anchor, lock, and\n   inbound window/cache state.\n4. **Tests and interop vectors**: `test/e2e-crypto.test.ts`,\n   `test/e2e-codec.test.ts`, `test/e2e-wire.test.ts` — the vectors in\n   `e2e-crypto.test.ts` are the shared ground truth used to verify byte-level\n   compatibility between the bridge, cloud, iOS, and Android.\n\nTo run just the E2E tests:\n\n```bash\nnpm test -- --testPathPattern=\"e2e-\"\n```\n\n---\n\n## Wire protocols\n\n**Terminal mirror — hub ⇄ cloud** (the current model):\nHub → cloud: `cc_term_hello {termId,cwd,title,cols,rows}`, `cc_term_output\n{termId,data(b64)}`, `cc_term_bye {termId}`. Cloud → hub: `cc_term_input\n{termId,data}`, `cc_term_resize {termId,cols,rows}`.\n\n**Shell ⇄ hub (local socket, newline-JSON, `hub-protocol.ts`):**\nshell → hub `reg` / `out` / `bye`; hub → shell `in` / `resize` / `title`\n(`title` = manual session-title override: the shim swallows/rewrites the\nchild's OSC 0/2 tab titles so a phone rename sticks in the local terminal;\nsee `tab-title-filter.ts` / `tab-title-sync.ts`).\n\n**Phone ⇄ cloud (`routes/cc.ts`):** `GET /cc/term/list`, `GET /cc/term/stream`\n(SSE bytes, replays the rolling buffer then live), `POST /cc/term/input`, `POST\n/cc/term/resize`, and `POST /cc/pair` (logged-in phone mints an account-bound\ninstall token). Cloud relay: `services/cc-term-service.ts` (per-term rolling\n256KB buffer, replay-then-live, drops on bye).\n\nLegacy (bubble/discovery, still present): `cc_hello`/`cc_snapshot`/`cc_event` +\n`/cc/sessions|attach|send|stream`; migrations `049_claude_code_mode.sql` +\n`050_cc_sessions_controllable.sql`. The unified iOS UI uses the terminal path only.\n","readmeFilename":"README.md"}