{"_id":"cc-linker","_rev":"29-12689787060cb32913bd79ba5fdbafd3","name":"cc-linker","dist-tags":{"latest":"0.8.3"},"versions":{"0.0.1":{"name":"cc-linker","version":"0.0.1","keywords":["claude-code","feishu","lark","session","bridge","cli"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.0.1","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-bridge#readme","bugs":{"url":"https://github.com/yujuntea/cc-bridge/issues"},"bin":{"cc-link":"dist/cli.js"},"dist":{"shasum":"c644789bf4c6367af2e5faf14ffebf96d7693b64","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.0.1.tgz","fileCount":4,"integrity":"sha512-eisoRyo7fIdfdGt5LJtb27PP5fjRj8DH6CSJ5kT/eP6l9UjaH8ptuDmzbDsLpLtnW+8d4zl6aENskX0RhMWuQQ==","signatures":[{"sig":"MEUCIQDbRsDVFkFX/OV5ZpBIzcIavq62RS7unEL9SR809ROZoQIgS1V09BnHFRsBLsRfqfntgeFqRJ7zIUjHcsdpGoYL4pU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16184695},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"95113086a421e9d8fa605e8e24cdbfd3d6b13b9a","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-bridge","build:npm":"bun build src/index.ts --outdir dist --target node --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-bridge.git","type":"git"},"_npmVersion":"10.9.4","description":"Bridge Feishu IM and Claude Code CLI sessions — seamless session switching between terminal and chat","directories":{},"_nodeVersion":"22.21.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.0.1_1779536457980_0.8714361910276507","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"cc-linker","version":"0.0.2","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.0.2","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"12414373ff8d0fc347531817f5f63479d3522800","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.0.2.tgz","fileCount":5,"integrity":"sha512-sGXLmOzHIW6OFZb/wlPvqaZyVF8pVmv38o3TTBajIvT6jVgkmGnUWuCenLOMZKfWPmWknTxEa/44Vitj1Qk1Ww==","signatures":[{"sig":"MEYCIQCF9JSFW+hI/NQchJjqbp+mM4ZQG78n8jmSX+sXO4WaFwIhAIxgmO0DhKnUzbL7GEEHDnwWk/cpyOQFotXeQD0uzinf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16203080},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"0b3583f536280baf1402b79c2f03020dfbc86f49","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","build:npm":"bun build src/index.ts --outdir dist --target node --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"10.9.4","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"22.21.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.0.2_1779552109303_0.33370745276950786","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"cc-linker","version":"0.0.3","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.0.3","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"f63f05af791c868e07e1eb34a7d94fd071fdcbd0","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.0.3.tgz","fileCount":5,"integrity":"sha512-tkFs4wSazpUOuEaLzQSsVWqUMv6AHJm7O1s0zt+65XJbMq2iE1yeGRInkQDS0DxYIdCP+DZIKyCcFXjXmDbviw==","signatures":[{"sig":"MEQCICLyfZ5tza8kWBY4teRsKxQpn2nrsPvPHMQTodx/rH1tAiA9d5B6j7Bh3Wl5H+PkHQyQGA4Y0PycnOr/Yf7TPHC4yA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16041986},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"660b4da0e1bd6259fa76bc87359aeebff86ddbe4","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"10.9.4","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"22.21.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.0.3_1779553082030_0.7446540411140836","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"cc-linker","version":"0.0.4","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.0.4","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"107d829e46684cff130436014360d6b69cdffc6e","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.0.4.tgz","fileCount":5,"integrity":"sha512-g7ik9sKjOiwRnsOsA0XjFWATk3c/ikfrXgGJttfo1Jpjro7SbOPG3cCKOVIetpuSGJLh6dEdCg7oyjtFKpfvwg==","signatures":[{"sig":"MEYCIQCLOOR2XUW3cbrBwbuDr4P4kBR6HXKjse3mRGY1fzHMJAIhANN3N+w7zp7ibvV8Nb7UrEbziEeATpT9Ete/ddj0SnTn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16042378},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"de400cf0ab5b2f459749ae3b8d6e2e28320b38dd","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"10.9.4","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"22.21.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.0.4_1779553346592_0.6339352555122628","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"cc-linker","version":"0.2.0","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.2.0","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"9904ae5070af157cd53f1992fe4c5661d1355dad","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.2.0.tgz","fileCount":5,"integrity":"sha512-N15/sTgEeNwlh7qN7sbaIrhqKOZrIDpIA1b2UVdczDxOsEAPgxt02sqQeCGivKHEMVqUBa4CyBBdZ84yoMcxmg==","signatures":[{"sig":"MEQCIFlPGzvgLP2JnAzcqg6bDwwTzqITx4hevImUEYkjwyiYAiAF/FqmDSmWyP7MdeHD1JkPEsulgHAa5i0iE2sG3xJ+LA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16043131},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"716e1c24193f6d771a3cb46021d4780938dd4089","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"10.8.2","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"18.20.6","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.2.0_1779591130520_0.7164089926386825","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"cc-linker","version":"0.2.1","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.2.1","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"3936e5674f718841508ac41ce68cc5ca45706335","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.2.1.tgz","fileCount":5,"integrity":"sha512-SHf3JTsZRMwGINjBve+nWOYSCOCGP+lfk3ggOct82C/iObbdnaNTKjyjtd1+bgqdfqxAI7bwoBV9cWvndiYjEw==","signatures":[{"sig":"MEUCIFssrE8IjZG+sl5c8ecDrbQxfN6l71atTaRQuIN+q0lXAiEA5tBt8Y1rAbHDxZ/Pon6MctRvldjfvi2I6swatc0kaes=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16056902},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"2d2ae27e506b521fe6bc9976d7881a3db4e6084b","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker $(ls -t *.tgz | head -1)","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.2.1_1779627206884_0.9562042923269134","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"cc-linker","version":"0.2.2","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.2.2","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"895b19b6f62179b7ae0458ea70b101129528fb2a","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.2.2.tgz","fileCount":5,"integrity":"sha512-lGE6UNHvojoRTVWUpG6e1AchPorZXzoDYrtjgcvEpj4JOAcGiDI8FlBtc9cWt9yprtT+qNaixEuwsxsnzjJu+Q==","signatures":[{"sig":"MEQCIAj/q3U/Qp3MAWaho+vA6JSc9/+NQqVzBtaezH8o7fMLAiBAHfQPhsOLkCPvCu0sO3cDbRcQnHITYwMt01z0joc+ww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18974083},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"74db76fbd94be242ca7c0894f5a52186059b0244","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker $(ls -t *.tgz | head -1)","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.2.2_1780020513060_0.3557724145904855","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"cc-linker","version":"0.3.0","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.3.0","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"fc170fdbe7175421e305e5ade97b3d192f945193","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.3.0.tgz","fileCount":5,"integrity":"sha512-29TgtEwZkWfbAbMt002Lj1WBD7hynqrqYOoU/vM7HfzS74Pj1vreKogmZAX0Y07xIJGgUNDqzexcWC4B9E+5cw==","signatures":[{"sig":"MEUCICLecYDDZ0yjK3/2iiXvMRm5jot/GsCzfwUEnoACVpgtAiEA6AEcMwVCYYMFbg6CrMhWOE7gX55+WrbIIJqgzPFoM9Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18974083},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"a11469457c77ecaeb63b8e9fda3424f9924b6a68","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker $(ls -t *.tgz | head -1)","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.3.0_1780025014002_0.9970115976749634","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"cc-linker","version":"0.3.1","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.3.1","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"11e2a5185dc594bd177a63d90dc58bf495427900","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.3.1.tgz","fileCount":6,"integrity":"sha512-3WfeJP66JLrXKA4IBaFAmfVJrrccxyxRGidAPgOU4SAGrUtG2NM0ZJmukp+F1+Lyy661HwdS5hKrVMgG6RBqDA==","signatures":[{"sig":"MEQCIGKFb/OeBmJZlLFnklDGq1TyG58fvPtHVy97AllYA85LAiAa6m0fHAn+pjyOwMk0IZDKVHaJuxptGBgkDD6XAh0OqQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18978065},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"b819b221f90001ccd551ea62e2713db328c78e1d","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker $(ls -t *.tgz | head -1)","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.3.1_1780228154881_0.6480791744171477","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"cc-linker","version":"0.3.2","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.3.2","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"bfaab2bdb7990c67d531a20acc2dc3090bba4a6f","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.3.2.tgz","fileCount":6,"integrity":"sha512-9WFuk61w4v99GfH9xYAzh5nqb/64YFUT20J54/HtkwUpn7L3LaiZZp2bCpXkw2F9w31FxTb3OgSDFuy91l/hFQ==","signatures":[{"sig":"MEQCIGkZAvPvwbugtJU02nhlGv6QlBJ5zfdylaHsEYPQg0GDAiAJJXXyhgplr3w3smOlBjM9xffzTVBisYVfxPAcdmwZRw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18978131},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"2c719175b558b44aa165a2e93c5b0c575f283509","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker $(ls -t *.tgz | head -1)","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.3.2_1780228935282_0.5024203621179342","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"cc-linker","version":"0.3.3","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.3.3","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"dfdc5e2799802cbddc8f9e406f3dd5bfe5f7823d","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.3.3.tgz","fileCount":6,"integrity":"sha512-jgFwCuCBb+SRDlUKiCOTqcFvCOPM8mHiYHqBeVmMJTA0S/SpBZck6pXUPNVUp5NY4/C6/MTho36YpZUFRV+g3g==","signatures":[{"sig":"MEQCIGNUmiARMfyC9r3l0BfVMU0BKphkoH1qwvC0WZ07H4OwAiANpNZ7Gsmepyha8Vbqx1Kh/V14YqyRVDdmKSJ/mxN2aQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18978837},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"e433df22699d6d623f5149b1cc7847442ff7fb5b","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker $(ls -t *.tgz | head -1)","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.3.3_1780230533198_0.527751139682985","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"cc-linker","version":"0.3.4","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.3.4","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"cd813fb9c00af263a575fc63582836f2a78903a1","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.3.4.tgz","fileCount":6,"integrity":"sha512-iyxwEiiwK59XgwSS0C5iaFbgAAxfgUibjY8Gs1r1/Pwj+CUbpxmkDzsbdZr7fv6PwNX+zuLtD6d33IrFZrm/Ag==","signatures":[{"sig":"MEQCIEWEWWW3FdWieJzUsv+sKn52x18MyJL/5+8Ex9FV7mpPAiBBYdonc44UT09spjtu7mP/4fzenhLKxPqjMEeb+EF7/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18982113},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"2e0b2fbc4be8c8b30b76c6b053e89fea0f746bfd","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker $(ls -t *.tgz | head -1)","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.3.4_1780303642788_0.0996777472699919","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"cc-linker","version":"0.4.1","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.4.1","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"08cb761bd1f1344aeb05565604b42081db78c619","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.4.1.tgz","fileCount":6,"integrity":"sha512-DF2mMn8mUbCJrsac7Q5Xk9yQA8Mz4JahMcxtXgJEGWJy3jiSiajjhcRWwmc/Xno3lLaxIl30qKDxom/fbkdbnw==","signatures":[{"sig":"MEYCIQCczP8+K8Ufi/OIHlBQiBz4lOyIYowCDn1veWn7a3UaTgIhAI2haplNYwAqE8os8oE5rsasbKboFHyJisFS+46oZ2/W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19454898},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"51a47f8754489953966b450e9438cd38a9409892","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","deploy":"node scripts/deploy-local.js","reload":"bun run build:npm && node scripts/reload-daemon.js","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker $(ls -t *.tgz | head -1)","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","deploy:force":"node scripts/deploy-local.js --force","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.4.1_1780881641004_0.25963298758329145","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"cc-linker","version":"0.4.2","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.4.2","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"0de1c05a0b27e3e35a50b31c6cb51d74dc59c15e","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.4.2.tgz","fileCount":6,"integrity":"sha512-CD+dIp9uzTmRW93+Y47OzLQgQ3y0iurmPTZGxtS6ur51cHw8FzcE0WD1W1tU18So3avHL3p83MM7iXyqtXFAkg==","signatures":[{"sig":"MEUCIFPZ2VwmsyHGtDYl1F3Dk5cAUFVhu6YraMjugZBCVFcWAiEA9uz6UY4N8Y1SY/uzgrbYdvC9AYV7SrpcmWuIBRAXrEU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19473389},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"2733855571c00914e2c2a4732e47462f64c3076f","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","deploy":"node scripts/deploy-local.js","reload":"bun run build:npm && node scripts/reload-daemon.js","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker $(ls -t *.tgz | head -1)","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","deploy:force":"node scripts/deploy-local.js --force","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.4.2_1780933594149_0.7764529012911321","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"cc-linker","version":"0.5.0","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.5.0","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"2de09827c591069f3238ee8eccd3495cbe80a632","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.5.0.tgz","fileCount":6,"integrity":"sha512-SowDlxb5vcJIyPe1K+TSfOA6UjU5Itx6FN3TAd9unAIuiKZ2ne/VxucFdItScdnSqfkCqTDnuZTltPqFL58QKA==","signatures":[{"sig":"MEUCICb/2br+jT+PRiB1PJit7KAmCLLwpCBDu21/ocrtgtLAAiEAjgZTWxafIO6cZ2MtEkw6jRcmR0n0iZO60/bY+Kr03UE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19519303},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"3c058094bc08e6c571092c7f98f7ba49f0a1de13","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","deploy":"node scripts/deploy-local.js","reload":"bun run build:npm && node scripts/reload-daemon.js","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker $(ls -t *.tgz | head -1)","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","deploy:force":"node scripts/deploy-local.js --force","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.5.0_1781003376340_0.8932982917231012","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"cc-linker","version":"0.5.1","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.5.1","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"d290061b5db833b59da9177c3f50f757388deb43","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.5.1.tgz","fileCount":6,"integrity":"sha512-KY/2TdgbAwcSPUbDdn884B8YEnNGvB5D6jTyuCdYkFligLQh0/zY6N4kGJgKXEVDQl8380MoXNjBE5aPauYvDQ==","signatures":[{"sig":"MEYCIQChi3xI4RLNPH8Soo3jJyZ7mb77WQVlTDOVVlcsn11jJAIhANRtV4vDhtNEsE1Q19NsUgCiLAQDDNcebXL0xn2GsF5H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19523120},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"90b0e37e57aece7b9833036395371629149c4ab2","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","deploy":"node scripts/deploy-local.js","reload":"bun run build:npm && node scripts/reload-daemon.js","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker $(ls -t *.tgz | head -1)","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","deploy:force":"node scripts/deploy-local.js --force","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.5.1_1781013797087_0.8869494267367677","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"cc-linker","version":"0.6.0","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.6.0","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"29d83512b650c2eb273c4369892505df81d0b001","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.6.0.tgz","fileCount":6,"integrity":"sha512-CyPjqUjJOt2COpOwhIgqM9ifPAWJC/jspXoeZHUaz61eNygxM/eY5C0Y5EngQK4r3oqyIPq44cm+4H4r/5kRnQ==","signatures":[{"sig":"MEUCIQD0WWQxzxh6NGXka7gZ6pUdpOtqJJgLll1FbQBcjzJIswIgS9QiSlwuDCNPzKbVOmoqIVIByT4fV2y2ZqRNOg2i4Gk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19642821},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"d9c8a9ce52ea1c82d30a77af33a8d031cb73fbde","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","deploy":"node scripts/deploy-local.js","reload":"bun run build:npm && node scripts/reload-daemon.js","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker $(ls -t *.tgz | head -1)","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","deploy:force":"node scripts/deploy-local.js --force","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.6.0_1781281660218_0.40230330422377025","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"cc-linker","version":"0.6.1","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.6.1","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"4605bd0aea4b29fab6e3aab9788172294b1e0be2","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.6.1.tgz","fileCount":6,"integrity":"sha512-M8eieM+arE9i/hioGeItoVhulJm1/I5Wgi/dYw5UP8FqNhDOBX4NU/jAgHd6khw9gCBUP9/ulNue+T8M6IdxNg==","signatures":[{"sig":"MEQCIEGtCm0NwMLK04M6CT6/Bakv550Izk+sQVJaJe1JuNApAiAScDDRvWzzgDjzWm0j7dHnUVNL0kkaLVEx3kWotizrcA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19709727},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"99678514f5d83da8c51535b5f881d126c7914cf4","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","deploy":"node scripts/deploy-local.js","reload":"bun run build:npm && node scripts/reload-daemon.js","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker ./cc-linker-$(node -p \"require('./package.json').version\").tgz","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","deploy:force":"node scripts/deploy-local.js --force","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.6.1_1781358044064_0.4777621563262968","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"cc-linker","version":"0.6.2","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.6.2","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"d6e6c5f1b30ba96ade4338a67f43934a62322cac","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.6.2.tgz","fileCount":6,"integrity":"sha512-OmriPJp57eMcCKxl8Eozzg4CCcoU9oFDorMU43UdX56MXWs8Dx/0c2YPMgIeS3/hZuaKPcQmExnk2U+cSu+xFg==","signatures":[{"sig":"MEYCIQDc3qX3OhQMbLA4kjUD4evuyvXLmdvSqO+A5+JEMuZpBAIhAP25fJz7wXT223uzhtrFDiAzJTXGkkO3Wio6UovsD0Wj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19711588},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"8a458dfcfac309ef5ae205f8c81445b49b869da3","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","deploy":"node scripts/deploy-local.js","reload":"bun run build:npm && node scripts/reload-daemon.js","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker ./cc-linker-$(node -p \"require('./package.json').version\").tgz","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","deploy:force":"node scripts/deploy-local.js --force","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.6.2_1781365290805_0.9780221475413526","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"cc-linker","version":"0.6.3","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.6.3","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"b3c826256cb1fe5792f31cfc5ea629a3ca356669","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.6.3.tgz","fileCount":6,"integrity":"sha512-eS8Oyy+SeJ7ZgIuCKOwImYAfrCS145Iv+Mgvs6Oszu0XEhj3D4EqAVY+4ml9ZH4xx7tOtrVoW3fIHRhBqk9AIQ==","signatures":[{"sig":"MEUCIHyLo48dT/+rYItK+yQ3WoOIToJTefLgxvq8SJcDRga/AiEAgmNUmNuKSyttUzmPOTrix0ZJ1tb00g0j7KRG9ChZg6M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19716606},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"c5a8b8d637fbfa8be9f7c710e70de75aceb48f7b","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","deploy":"node scripts/deploy-local.js","reload":"bun run build:npm && node scripts/reload-daemon.js","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker ./cc-linker-$(node -p \"require('./package.json').version\").tgz","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","deploy:force":"node scripts/deploy-local.js --force","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.6.3_1781424838417_0.5517531172641754","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"cc-linker","version":"0.7.0","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.7.0","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"d2b1e13ea12f9eddffc8299dbfb99a4167142c62","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.7.0.tgz","fileCount":6,"integrity":"sha512-jP29OdB5f1HvzvwzF9L5UPZUEXh3+qmy69peqRzdQhpZKaoZY3bGtybVgiLSjqSUIJTC9qGoz+R2uI/ABbwMsQ==","signatures":[{"sig":"MEUCIGrwr9MV78Rh99mM3MnDlmgEyovY7dbitCAbG8hb697KAiEA8Bf8aNRaxsm0n4q4o7fNDyd5dUxPD/+fVIWf8NK7iWU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19737518},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"13e41594b801ca7d2468a21b988ef57e177f75e6","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","deploy":"node scripts/deploy-local.js","reload":"bun run build:npm && node scripts/reload-daemon.js","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker ./cc-linker-$(node -p \"require('./package.json').version\").tgz","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","deploy:force":"node scripts/deploy-local.js --force","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.7.0_1781531525813_0.48971091501152797","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"cc-linker","version":"0.7.1","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.7.1","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"db1d57af22cb66aa15375ef5bf4736e57f2980ff","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.7.1.tgz","fileCount":6,"integrity":"sha512-0dWBNTI3pkfNZ9dbN9pRkFbR2xhN7wFLDkxc1rr0MkzFX2Om98p0/B+AvYjwxtbIZD5682h8TlzQ6fiHmZklMQ==","signatures":[{"sig":"MEQCIBBr5WeGx8K7LSvEujlq5VEMrKYwWk3xJbcU3qpxVdlmAiB4EpCjk4Jh0blNA02nXOOfMGQtWWhlrIsxWc+QIpw8VQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19804929},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"5b44c9835faeafd8b264ce96732aa500dc33111c","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","deploy":"node scripts/deploy-local.js","reload":"bun run build:npm && node scripts/reload-daemon.js","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker ./cc-linker-$(node -p \"require('./package.json').version\").tgz","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","deploy:force":"node scripts/deploy-local.js --force","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.7.1_1781694087418_0.4766905475606227","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"cc-linker","version":"0.7.2","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.7.2","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"e0825c274b6c8f4cbe6fde6cd99b029c0111d70c","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.7.2.tgz","fileCount":6,"integrity":"sha512-ykeoo+vvV0CcCjkTMeTDJPaWvYjJEDT6lEL4yZVSxGGYxAfD2GVko0et/wiW8Pd5v+omdfRB+eBE4SzGc1G58A==","signatures":[{"sig":"MEYCIQCvh9g04efRSoF9+3OdaXsJKyhFO4RjSV2Pub275qJSoAIhALVbqYCbSC4TIpunornD0MfjZGEalarrg62aJTn9OlpL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19810916},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"bf8b249fb210df2697ad8230ca364a141ce62cc9","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","deploy":"node scripts/deploy-local.js","reload":"bun run build:npm && node scripts/reload-daemon.js","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker ./cc-linker-$(node -p \"require('./package.json').version\").tgz","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","deploy:force":"node scripts/deploy-local.js --force","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.7.2_1781849497807_0.01762733953756279","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"cc-linker","version":"0.7.3","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.7.3","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"c45af2c280555f02d45fb0e7cc847684c584791d","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.7.3.tgz","fileCount":6,"integrity":"sha512-virLEhHlFfRtXPS7cYI2vlmg4R/HJT471C96JgR0Qe4fxTKZMmeLBowS/s3UVFqWNXB4NV/hOTZut6semWDjEw==","signatures":[{"sig":"MEQCIFEWS2GTyudT1NPRHkPQ++FdsZGx0Hq093ZS0Q9HWLAOAiBW1u2oZ5F83bH2SyBJxihQS7HMD6szhxNJzKGaZT8qxQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19818935},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"a4310034c4d2ae12d3aea005c8a8c98bf5395c1b","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","deploy":"node scripts/deploy-local.js","reload":"bun run build:npm && node scripts/reload-daemon.js","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker ./cc-linker-$(node -p \"require('./package.json').version\").tgz","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","deploy:force":"node scripts/deploy-local.js --force","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@wecom/aibot-node-sdk":"^1.0.7","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.7.3_1782967013401_0.3030880206464788","host":"s3://npm-registry-packages-npm-production"}},"0.7.5":{"name":"cc-linker","version":"0.7.5","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.7.5","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"90fe7e418496bc2b7655a0254a4fc9d8bed712ad","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.7.5.tgz","fileCount":6,"integrity":"sha512-36S3elEDKrmg9M2tUmU84IYOeNiZfqCyUgwND61C5QVT0DqKp9jIcOHUjyXpZnMvIbzqMwMa788x+3YO9LtXJg==","signatures":[{"sig":"MEQCIFII3wzeSS0I54QL5KHLGUIFrD5eJ4J5H49uY58wdST1AiAIYnD/BX/6qZLzzaygaJTmpUnm1XIpGNpOSBYk2TLBXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19820845},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"74a61008ff426a1e2137f74a2e5abbded1636a30","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","deploy":"node scripts/deploy-local.js","reload":"bun run build:npm && node scripts/reload-daemon.js","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker ./cc-linker-$(node -p \"require('./package.json').version\").tgz","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","deploy:force":"node scripts/deploy-local.js --force","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@wecom/aibot-node-sdk":"^1.0.7","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.7.5_1782971167300_0.4318420029814125","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"cc-linker","version":"0.8.0","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.8.0","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"9fca5a2a098b3b43d30341644491b9b08f3371aa","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.8.0.tgz","fileCount":6,"integrity":"sha512-Y+BcX3oHyRmgbf34oGCqejkOzAsFvDTdQ4pKWpOklEwGK0vIcf7i4DI4N/ngh+c2hyUjYkNQp0kbitzaRS/Ilw==","signatures":[{"sig":"MEYCIQCmulaYsE7UQZU+EhAcSm+v7mX1LXntLodfpCFtLl0D0wIhALKlfvLuKtZgZLlTYABGbwcm7x8SRquCbZkzBSnBthdt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20141636},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"fbc119566022bd9d28fc607c9855838642a6f6e9","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","deploy":"node scripts/deploy-local.js","reload":"bun run build:npm && node scripts/reload-daemon.js","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker ./cc-linker-$(node -p \"require('./package.json').version\").tgz","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","deploy:force":"node scripts/deploy-local.js --force","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@wecom/aibot-node-sdk":"^1.0.7","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.8.0_1783575690152_0.0689780227579786","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"cc-linker","version":"0.8.1","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.8.1","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"6da64f08d1293bf44522f4eaf8cd75303664380c","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.8.1.tgz","fileCount":6,"integrity":"sha512-0QKti0LWvwuLqPsMHZkyVIBsGnrbkMFpzNTDftKPlAYStfzptUpAZ5cqZoagEgtBpnJdNMdS8vJH7TvEARTBiw==","signatures":[{"sig":"MEQCIGiBmfX0tZNlhYOvnr2stG1ERmXwpr18aN0fiXdFVpEMAiAa3tvxEiU4tmYWSX67fwUV0BHnk7Juu9L3WZcRHn166A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20234689},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"1e6155391e7513cca50866ec02d0335a6d04324f","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","deploy":"node scripts/deploy-local.js","reload":"bun run build:npm && node scripts/reload-daemon.js","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker ./cc-linker-$(node -p \"require('./package.json').version\").tgz","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","deploy:force":"node scripts/deploy-local.js --force","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@wecom/aibot-node-sdk":"^1.0.7","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.8.1_1783705819247_0.3756679111435455","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"cc-linker","version":"0.8.2","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"author":{"name":"wuyujun"},"license":"MIT","_id":"cc-linker@0.8.2","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"bin":{"cc-linker":"dist/cli.js"},"dist":{"shasum":"736b1337569a769f58d561c4df9b3f7a0a320bc6","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.8.2.tgz","fileCount":6,"integrity":"sha512-b3k2VWVflCRGDu9jp5Q0TTIcs+AVmBXWQlcrd/Vm3qfbI+d/CokCFBbTYgDbTM6sXRoXybJFY4Ii2TPi87HmkQ==","signatures":[{"sig":"MEUCIQDthqqHUbBEW7lYaOx2YfvCvt4ieuVPV6EcCcll94LUcwIgZBCPWXM2PTipfmyn+BZZqy3uEqfLCmmILRCprVxFuRQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20234689},"type":"module","engines":{"bun":">=1.0.0","node":">=20"},"gitHead":"fe04bb75d2ae89b091cea70268783510cc5ad69e","scripts":{"dev":"bun run src/index.ts","test":"bun test","build":"bun build src/index.ts --compile --outfile dist/cc-linker","deploy":"node scripts/deploy-local.js","reload":"bun run build:npm && node scripts/reload-daemon.js","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker ./cc-linker-$(node -p \"require('./package.json').version\").tgz","typecheck":"tsc --noEmit","link:local":"bun run build:npm && bun link","postinstall":"node scripts/postinstall.js","deploy:force":"node scripts/deploy-local.js --force","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","unlink:local":"bun unlink cc-linker","test:coverage":"bun test --coverage","prepublishOnly":"bun run build:npm"},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"repository":{"url":"git+https://github.com/yujuntea/cc-linker.git","type":"git"},"_npmVersion":"11.13.0","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.2","chalk":"^5.6.2","inquirer":"^13.4.2","commander":"^14.0.3","cli-table3":"^0.6.5","@iarna/toml":"^2.2.5","proper-lockfile":"^4.1.2","@larksuiteoapi/node-sdk":"^1.62.1","@anthropic-ai/claude-agent-sdk":"^0.3.150"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^6.0.3","@types/node":"^25.6.0","@types/inquirer":"^9.0.9","@wecom/aibot-node-sdk":"^1.0.7","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/cc-linker_0.8.2_1783731357807_0.5541333622999032","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"cc-linker","version":"0.8.3","description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","license":"MIT","author":{"name":"wuyujun"},"repository":{"type":"git","url":"git+https://github.com/yujuntea/cc-linker.git"},"homepage":"https://github.com/yujuntea/cc-linker#readme","bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"bin":{"cc-linker":"dist/cli.js"},"scripts":{"dev":"bun run src/index.ts","build":"bun build src/index.ts --compile --outfile dist/cc-linker","build:npm":"bun build src/index.ts --outdir dist --target bun --sourcemap && mv dist/index.js dist/cli.js && mv dist/index.js.map dist/cli.js.map 2>/dev/null; chmod +x dist/cli.js","prepublishOnly":"bun run build:npm","postinstall":"node scripts/postinstall.js","link:local":"bun run build:npm && bun link","unlink:local":"bun unlink cc-linker","pack:test":"bun run build:npm && npm pack && mkdir -p /tmp/test-cc-linker && npm install --prefix /tmp/test-cc-linker ./cc-linker-$(node -p \"require('./package.json').version\").tgz","reload":"bun run build:npm && node scripts/reload-daemon.js","reload:force":"bun run build:npm && node scripts/reload-daemon.js --force","deploy":"node scripts/deploy-local.js","deploy:force":"node scripts/deploy-local.js --force","test":"bun test","test:coverage":"bun test --coverage","typecheck":"tsc --noEmit"},"engines":{"node":">=20","bun":">=1.0.0"},"type":"module","devDependencies":{"@types/bun":"latest","@types/inquirer":"^9.0.9","@types/node":"^25.6.0","@types/proper-lockfile":"^4.1.4","@wecom/aibot-node-sdk":"^1.0.7","typescript":"^6.0.3"},"dependencies":{"@anthropic-ai/claude-agent-sdk":"^0.3.150","@iarna/toml":"^2.2.5","@larksuiteoapi/node-sdk":"^1.62.1","chalk":"^5.6.2","cli-table3":"^0.6.5","commander":"^14.0.3","inquirer":"^13.4.2","proper-lockfile":"^4.1.2","zod":"^4.4.2"},"gitHead":"0e6d1050acfe091984290ffc3fcdeaaa159565c4","_id":"cc-linker@0.8.3","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-wirVFjgZlUGheWmpfhteMZaVzNZXJbAvha4ppqcvRt/VrWliOKlADiBvSHgELWQVJCJKUzHnysFGQE4eUI/ooQ==","shasum":"4654c3bface6e1e8e27e19575540d5c800610dd7","tarball":"https://registry.npmjs.org/cc-linker/-/cc-linker-0.8.3.tgz","fileCount":6,"unpackedSize":20235126,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCyrU3m0Y9ijDisHi5yaPVkuRUtq6fd5sRJtLS4M7zYaAIgPxT4fNwvW7+ke0Rg+RErh/cE6hJpjIPFywergbMqy6Q="}]},"_npmUser":{"name":"yujuntea","email":"juntea@163.com"},"directories":{},"maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cc-linker_0.8.3_1783737102492_0.4755380971784411"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-23T11:40:57.914Z","modified":"2026-07-11T02:31:42.838Z","0.0.1":"2026-05-23T11:40:58.171Z","0.0.2":"2026-05-23T16:01:49.484Z","0.0.3":"2026-05-23T16:18:02.188Z","0.0.4":"2026-05-23T16:22:26.771Z","0.2.0":"2026-05-24T02:52:10.761Z","0.2.1":"2026-05-24T12:53:27.277Z","0.2.2":"2026-05-29T02:08:33.331Z","0.3.0":"2026-05-29T03:23:34.214Z","0.3.1":"2026-05-31T11:49:15.085Z","0.3.2":"2026-05-31T12:02:15.471Z","0.3.3":"2026-05-31T12:28:53.399Z","0.3.4":"2026-06-01T08:47:22.994Z","0.4.1":"2026-06-08T01:20:41.285Z","0.4.2":"2026-06-08T15:46:34.427Z","0.5.0":"2026-06-09T11:09:36.554Z","0.5.1":"2026-06-09T14:03:17.290Z","0.6.0":"2026-06-12T16:27:40.486Z","0.6.1":"2026-06-13T13:40:44.284Z","0.6.2":"2026-06-13T15:41:31.017Z","0.6.3":"2026-06-14T08:13:58.642Z","0.7.0":"2026-06-15T13:52:06.074Z","0.7.1":"2026-06-17T11:01:27.646Z","0.7.2":"2026-06-19T06:11:38.016Z","0.7.3":"2026-07-02T04:36:53.616Z","0.7.5":"2026-07-02T05:46:07.508Z","0.8.0":"2026-07-09T05:41:30.384Z","0.8.1":"2026-07-10T17:50:19.531Z","0.8.2":"2026-07-11T00:55:57.991Z","0.8.3":"2026-07-11T02:31:42.720Z"},"bugs":{"url":"https://github.com/yujuntea/cc-linker/issues"},"author":{"name":"wuyujun"},"license":"MIT","homepage":"https://github.com/yujuntea/cc-linker#readme","keywords":["claude-code","feishu","lark","session","bridge","cli","chat-app","cross-platform"],"repository":{"type":"git","url":"git+https://github.com/yujuntea/cc-linker.git"},"description":"Bridge mobile chat apps and Claude Code CLI sessions — seamless conversation switching between terminal and IM","maintainers":[{"name":"yujuntea","email":"juntea@163.com"}],"readme":"# cc-linker\n\n> 让手机聊天应用和终端（Claude Code CLI）之间的对话切换，像切换设备一样无缝。\n>\n> **目前已接入飞书**，更多聊天平台持续扩展中。\n\n[![npm version](https://img.shields.io/npm/v/cc-linker)](https://www.npmjs.com/package/cc-linker)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\n**语言:** 中文 | [English](README_en.md)\n\n## 💡 为什么需要 cc-linker？\n\n你是否遇到过这样的场景：\n\n- **通勤路上用手机聊，到公司终端继续** — 地铁上用手机飞书给 Bot 发消息讨论技术方案，到公司打开终端 `cc-linker list` 找到会话，`resume` 一键恢复上下文\n- **飞书快速提问，终端深度调试** — 在飞书里快速问了个 API 用法，发现需要本地调试，终端 `cc-linker resume` 切换到同一会话继续让 Claude 帮你写代码\n- **多项目并行，会话不乱** — 同时在 `project-a` 和 `project-b` 两个目录与 Claude 对话，`/list` 清晰展示每个会话的目录和状态，卡片按钮一键切换不混淆\n\n**cc-linker 就是解决这些痛点的桥接工具。** 它在你电脑上维护一个统一的会话注册表，让手机聊天应用和 Claude Code CLI 共享同一套会话状态——无论你在哪个端发起对话，都能无缝切换到另一端继续。\n\n> **当前已接入飞书**，更多聊天平台持续扩展中。\n\n## ✨ 核心特性\n\n| 特性 | 说明 |\n|------|------|\n| 🔄 **跨端无缝切换** | 聊天应用发起的对话，终端一键恢复（含上下文和目录）；终端创建的会话，聊天应用随时查看 |\n| 💬 **流式卡片交互** | 聊天应用中实时看到 Claude 的 thinking、tool_use 摘要（≤80 字符）和回复，5s tick 显示已用时，不再是\"转圈等待\" |\n| 🛡 **交互式权限确认** | SDK 模式下 Claude 需要执行工具时，飞书卡片弹出允许/拒绝按钮 |\n| 🖼 **图片消息支持** | 飞书发送的图片自动下载并传递给 Claude 分析 |\n| 🪄 **图片代理 (img-proxy)** | 纯文本模型 (glm-5.2、qwen3-max、deepseek、mimo-pro) 在 Claude Code 里也能接收粘贴图片 — 图片落盘 + 路径替换,模型自选 Read / MCP / 本地 CLI 识别 |\n| 📂 **目录浏览** | `/listDir` 命令交互式浏览和切换工作目录 |\n| 📋 **统一会话管理** | 自动扫描、增量同步，无需手动维护会话列表 |\n| 🎛 **多模型切换** | 在卡片中一键切换模型，无需改配置 |\n| 💾 **持久化不丢消息** | 文件级消息队列，进程崩溃、重启后消息不丢失 |\n| 🚀 **3 步上手** | `install → setup → start`，5 分钟完成配置 |\n\n## 📸 效果展示\n\n### 聊天应用端体验（飞书）\n\n> 当前已支持飞书，更多平台开发中。\n\n<table>\n  <tr>\n    <td align=\"center\"><b>会话列表</b><br><code>/list</code> 查看所有会话</td>\n    <td align=\"center\"><b>开始处理</b><br>消息发出后即时反馈</td>\n    <td align=\"center\"><b>流式实时反馈</b><br>thinking + tool_use + 回复，5s tick</td>\n  </tr>\n  <tr>\n    <td align=\"center\"><img src=\"docs/images/feishu-list.png\" alt=\"飞书会话列表\" width=\"280\"></td>\n    <td align=\"center\"><img src=\"docs/images/feishu-start-processing.png\" alt=\"开始处理\" width=\"280\"></td>\n    <td align=\"center\"><img src=\"docs/images/feishu-streaming-thinking.png\" alt=\"流式 thinking + tool_use + 回复\" width=\"280\"></td>\n  </tr>\n</table>\n\n<table>\n  <tr>\n    <td align=\"center\"><b>处理完成</b><br>token / 耗时 / 轮数统计</td>\n    <td align=\"center\"><b>处理完成（长回复）</b><br>长文本同样展示</td>\n    <td align=\"center\"><b>模型切换</b><br>卡片按钮一键切换</td>\n  </tr>\n  <tr>\n    <td align=\"center\"><img src=\"docs/images/feishu-complete.png\" alt=\"处理完成\" width=\"280\"></td>\n    <td align=\"center\"><img src=\"docs/images/feishu-complete-long.png\" alt=\"处理完成-长回复\" width=\"280\"></td>\n    <td align=\"center\"><img src=\"docs/images/feishu-model.png\" alt=\"模型选择\" width=\"280\"></td>\n  </tr>\n</table>\n\n<table>\n  <tr>\n    <td align=\"center\"><b>目录浏览</b><br><code>/listDir</code> 交互式浏览文件系统</td>\n    <td align=\"center\"><b>SDK 权限确认</b><br>交互式允许/拒绝 Claude 的工具调用</td>\n    <td align=\"center\"><b>图片消息</b><br>飞书发送图片，Claude 自动分析</td>\n  </tr>\n  <tr>\n    <td align=\"center\"><img src=\"docs/images/feishu-listdir.png\" alt=\"目录浏览\" width=\"280\"></td>\n    <td align=\"center\"><img src=\"docs/images/feishu-sdk-permission-card.png\" alt=\"SDK 权限确认\" width=\"280\"></td>\n    <td align=\"center\"><img src=\"docs/images/feishu-image-analysis.png\" alt=\"图片消息分析\" width=\"280\"></td>\n  </tr>\n</table>\n\n### 终端端体验\n\n**查看所有会话** — 清晰的表格展示，状态一目了然：\n\n<img src=\"docs/images/cli-list.png\" alt=\"终端会话列表\" width=\"700\">\n\n**一键恢复会话** — 支持前缀匹配，自动切换目录并恢复上下文：\n\n<img src=\"docs/images/cli-resume.png\" alt=\"终端恢复会话\" width=\"700\">\n\n## 🚀 快速开始\n\n### 1. 安装 Bun（必需运行时）\n\ncc-linker 基于 Bun 构建，**Bun >= 1.0** 是硬性前置依赖。\n\n**macOS / Linux：**\n\n```bash\ncurl -fsSL https://bun.sh/install | bash\n```\n\n**macOS(Homebrew)：**\n\n```bash\nbrew tap oven-sh/bun && brew install bun\n```\n\n**装完开新终端验证：**\n\n```bash\nbun --version   # 应输出 >= 1.0.0\n```\n\n> **没生效？** PATH 没更新。手动把 `~/.bun/bin` 加入 `PATH`，或直接重启终端。\n\n### 2. 安装 cc-linker\n\n**方式 1：npm 全局安装**（需要 Node.js >= 20 提供 `npm`，运行 cc-linker 仍需 Bun）\n\n```bash\nnpm install -g cc-linker@latest\n```\n\n**方式 2：Bun 全局安装**（推荐）\n\n```bash\nbun add -g cc-linker\n```\n\n> **更新提示**：`npm install -g cc-linker@latest` 时，如果 daemon 正在运行，会自动调用 `cc-linker restart` 升级到新版，无需手动重启。\n\n### 3. 一键配置\n\n```bash\ncc-linker setup\n```\n\n交互式向导会引导你完成：\n- 初始化会话注册表\n- 安装 Claude Code 自动注册钩子\n- 配置聊天应用 Bot（当前仅飞书：App ID + App Secret + 开机自启）\n\n> **仅需终端侧功能？** 运行 `cc-linker setup --skip-feishu` 跳过聊天应用配置。\n\n### 4. 开始使用\n\n| 场景 | 操作 |\n|------|------|\n| 聊天应用中给 Bot 发消息（飞书） | 直接对话，流式卡片实时更新 |\n| 终端查看所有会话 | `cc-linker list` |\n| 终端恢复某个会话 | `cc-linker resume <UUID>` |\n| 聊天应用切换会话（飞书） | `/switch <序号\\|UUID>` |\n| 聊天应用选择新会话目录（飞书） | `/listDir` 浏览目录，为下一条消息选择新会话目录 |\n| 聊天应用创建新会话（飞书） | `/new [路径] [--model <别名>] [-- 提示词]` |\n\n## 📋 命令参考\n\n### CLI 命令\n\n```bash\ncc-linker list                      # 列出所有会话\ncc-linker resume <UUID>             # 恢复指定会话到终端（支持前缀匹配）\ncc-linker show <UUID>               # 查看会话详情\ncc-linker sync                      # 手动同步两端会话\ncc-linker search <关键词>           # 搜索会话\ncc-linker export <UUID>             # 导出会话为 Markdown/JSON/Text\ncc-linker clean                     # 清理无效记录\ncc-linker status                    # 查看桥接状态\n\n# img-proxy 图片代理(纯文本模型接收图片)\ncc-linker img-proxy install         # 智能安装:自动发现 + 分类 text-only/multimodal\ncc-linker img-proxy install --yes   # 同上,非交互(用默认预选)\ncc-linker img-proxy start --daemon  # 后台启动代理\ncc-linker img-proxy stop            # 停后台代理\ncc-linker img-proxy status          # 查看 daemon / routes / wrapper / launchd 状态\ncc-linker img-proxy daemon install  # macOS 开机自启\n```\n\n### 聊天应用 Bot 命令（飞书）\n\n在飞书私聊中给 Bot 发送：\n\n| 命令 | 说明 |\n|------|------|\n| `/help` | 显示帮助 |\n| `/list` | 列出会话（带切换/恢复按钮卡片） |\n| `/listDir` | 浏览目录，并为下一条消息选择新会话目录 |\n| `/new [路径] [--model <别名>] [-- 提示词]` | 立即创建新会话，或只预设新会话目录/模型 |\n| `/switch <序号\\|UUID>` | 切换会话 |\n| `/resume <序号\\|UUID>` | 获取终端恢复命令 |\n| `/model [序号\\|别名\\|--clear]` | 查看、设置或清除默认模型 |\n| `/agents` | 查看终端后台 `claude` session 列表（按 busy / waiting / idle / completed 分组），见下文「🛰 Agent View 集成」 |\n| `/status` | 查看状态 |\n| `/stop` | **硬杀**当前会话的 claude 进程（普通 session / bg 都生效，状态自动清）|\n| `/cancel` | **软退** Agent View 等待输入状态——只清 `pending_agent_reply`，**bg 继续跑**，下一条 chat 消息会走默认路径而非 rendezvous |\n| `/whoami` | 获取你的 open_id |\n\n> **说明 1**：`/switch` 和 `/resume` 中的数字序号来自最近一次 `/list` 生成的列表快照，默认 10 分钟内有效；超时后请重新执行 `/list`。\n>\n> **说明 2**：`/new` 支持”先选目录/模型，后发第一条消息再真正创建会话”的用法；`/model` 设置的是当前用户的默认模型，直到 `/model --clear` 清除。\n>\n> **说明 3**：`/stop` vs `/cancel` 区别——`/stop` 杀进程（不可恢复），`/cancel` 只清等待状态（bg 继续）。想立刻退掉”我刚点了 [Reply]”的等待状态时用 `/cancel`；想杀掉卡死的 Claude 进程时用 `/stop`。两者互不影响。\n\n### Bot 运行管理\n\n| 命令 | 说明 |\n|------|------|\n| `cc-linker start` | 前台启动（阻塞终端） |\n| `cc-linker start --daemon` | 后台守护进程模式 |\n| `cc-linker stop` | 停止后台 Bot |\n| `cc-linker restart` | 重启 Bot 服务 |\n| `cc-linker daemon install` | 配置开机自动启动 |\n| `cc-linker daemon uninstall` | 移除开机自启 |\n| `cc-linker daemon status` | 查看后台服务状态 |\n\n## 🖼 纯文本模型也能接收图片 (img-proxy)\n\n> **痛点**:glm-5.2、qwen3-max、deepseek、mimo-pro 等纯文本模型编程能力强,是 Claude Code 日常主力;但目前都不支持多模态输入 —— 粘贴截图、错误信息、设计稿到 Claude Code 直接 `4xx (Model only support text input)`。\n\n**img-proxy 是个本地反向代理**(`127.0.0.1:8765`),装上后:\n\n1. 拦截 Claude Code 发出的请求,识别 `image` block\n2. 把图片落盘到 `~/.cc-linker/img-proxy/cache/`\n3. 替换成一段文本,告诉模型\"图片已保存到这里,用 Read / 图片识别 MCP / 本地 CLI 看一下\"\n\n模型按它已经会的能力挑选识别方式,你不用为不同的模型配不同的工具。**多模态模型 (Claude / Kimi / GPT-4v) 完全不受影响** —— 它们不经 proxy,直连原 upstream。\n\n### 30 秒上手\n\n如果你已经配置过 Claude Code(用 CC Switch 或自写 provider 文件):\n\n```bash\n# 智能安装:自动发现 + 分类(text-only 装 / multimodal 跳过),交互式确认要装哪些\ncc-linker img-proxy install\n# 不想交互确认?加 --yes 用默认预选(脚本/老用户场景)\n\n# 后台启动代理\ncc-linker img-proxy start --daemon\n\n# macOS 开机自启(可选)\ncc-linker img-proxy daemon install\n```\n\n> `cc-linker setup` 已经包含 img-proxy 这一步 — 全新用户不用单独跑。\n\n### 跑起来之后\n\n- **CC Switch 用户**:`img-proxy install` 检测到 CC Switch 会问要不要装 shell wrapper。装好后用 `cc-linker-proxy` 替代 `claude`,wrapper 自动从 `~/.claude/settings.json` 读当前 provider、查 routes.json,然后设 `ANTHROPIC_BASE_URL=http://127.0.0.1:8765/<alias>` 后 exec claude。\n- **自定义 alias 用户**:你已有的 `alias cc-X='claude --settings ...'` 不变 —— `img-proxy install` 改的是 `~/.claude/providers/*.json` 里的 `ANTHROPIC_BASE_URL`,alias 继续用,URL 已经指向 proxy。\n\n### 看看效果 / 排查\n\n- `cc-linker img-proxy status` 一眼看 daemon / 已装 routes / wrapper / launchd / Web Console 状态\n- 打开 `http://127.0.0.1:8765/` 看 Web Console(Dashboard / Log / Config / Routes / Cache)实时数据,需要 `cc-linker img-proxy console enable` 打开\n- 日志: `~/.cc-linker/img-proxy/img-proxy.log`\n\n详细配置、命令参考、踩坑列表见 [docs/img-proxy.md](docs/img-proxy.md)。\n\n---\n\n## 🛰 Agent View 集成\n\nAgent View 是 cc-linker 的\"远端会话接管\"能力：在飞书里查看终端后台 `claude` session 的实时状态，直接 Peek 日志、Reply 文字、Stop 进程或 Attach 回主对话流。主数据源是 `~/.claude/jobs/<short>/state.json`（Claude CLI 维护的权威状态机），需 Claude Code CLI ≥ 2.1.139 且 daemon 正在运行。\n\n> 💡 **Fork 自动续接**（v2.6+）: 当 bg session 被 `claude --resume --fork` 续接到新 TUI 时（例如你开了多个 TUI 切换），cc-linker 会自动用最新的活 session 接收你的 reply。**不需要手动指定** —— `/agents` 列表 / [Peek] / [Reply] / [Attach] 全部按\"对话实际活跃位置\"工作。旧 card 上点 [Reply] 也会自动跳到 fork 的 TUI，不会报 \"Claude Code process exited with code 1\"。\n\n### 命令与按钮语义\n\n| 入口 | 行为 |\n|------|------|\n| `/agents` | 拉取所有 background session 快照，按 busy / waiting / idle / completed 四组展示（completed 组最多 5 条，超出折叠为 \"… N more\"），发一张可交互列表卡；列表超过 25KB 自动降级为纯文本 |\n| 列表卡 `[Peek]` | 三级降级获取 session 最新 assistant 输出：Tier 1 直读 JSONL（通过 `state.json.linkScanPath` 或 JsonlIndex）→ Tier 2 读 roster parent JSONL（resume-from 场景）→ Tier 3 兜底 `claude logs`；发独立 peek 卡 |\n| 列表卡 `[Reply]` | 仅 waiting 状态出现：弹\"✍️ 等待输入回复\"卡片，5 分钟内直接发文字即可。处理中卡每 5s 自动刷新（thinking + tool_use + 回复）。**bg 跑了又问新问题时，直接在 chat 接着打字即可，无需再点 [Reply]**（v2.4.x 链式回复） |\n| 列表卡 `[Stop]` | 仅 busy 状态出现：先弹二次确认卡（防误触），确认后 `claude stop <shortId>` |\n| 列表卡 `[Attach]` | 把 openId 切到该 session，后续普通消息自动走 SDK 注入（保留用户级 defaultProvider）；同时自动启动 Attached Card 实时刷新（见下文） |\n| 列表卡 `[Refresh]` | patch 原卡（2 秒防抖）；messageId 不匹配则发新卡，避免误 patch 已被覆盖的旧卡 |\n| 列表卡 `[返回聊天]` | 纯文本回复，无状态变更，退回到普通消息流 |\n| Peek 卡 `[❌ 取消等待]` | 清除 `pending_agent_reply` 状态（仅当 Reply 等待中出现时显示） |\n| `/cancel` | 同上，文字命令版本 |\n\n### 配置\n\n`config.toml` 新增 `[agent_view]` 段(全部可选项,默认值已适用大多数场景):\n\n```toml\n[agent_view]\n# 总开关。设为 false 关闭 /agents 命令和所有 card action 处理\n# enabled = true\n\n# /agents 列表卡 [Refresh] 按钮防抖间隔(ms)\n# refresh_min_interval_ms = 2000\n\n# Tier 3 兜底（claude logs）取最近多少行输出；Tier 1/2 直读 JSONL 时此值不生效\n# peek_lines = 30\n\n# Peek 卡 recentOutput 字段字节上限（超出按字符截断，避免飞书卡片体积超限）\n# peek_max_bytes = 2048\n\n# waiting → 用户多久不发文字就自动取消(ms)\n# expected_reply_timeout_ms = 300000\n\n# 是否过滤 daemon 派生的 sub-agent（source=spare）session；只保留用户主动发起的 session\n# background_only = true\n\n# Stop 按钮是否需要二次确认卡\n# stop_requires_confirm = true\n\n# Claude CLI 最低版本要求，低于则不启用 Agent View\n# min_claude_version = \"2.1.139\"\n\n# Reply 路径下相邻两个 reply 之间的最小间隔(ms)，防止 spam\n# reply_throttle_ms = 500\n\n# v2.4 GA: 通过 rendezvous socket 提交 + state.json 轮询注入 reply\n# 默认开启（v2.4 GA 之前为 opt-in）。设为 false 退回 v2.3.5 SDK 路径\n# rendezvous_enabled = true\n\n# v2.4: 提交 reply 后等待 state.json 进入终态的最大时间(ms)\n# rendezvous_timeout_ms = 60000\n```\n\n> **v2.4 GA 默认行为**：Reply 默认直接走 rendezvous 通道，无需手动开启。如果 bg 不支持 rendezvous（daemon 离线、bg 正在真 processing、socket 不存在），自动降级到旧 SDK 路径。如需强制走旧行为，显式设 `rendezvous_enabled = false`。\n\n对应环境变量（优先级高于配置文件；`min_claude_version`、`rendezvous_enabled`、`rendezvous_timeout_ms` 仅支持配置文件）:\n\n| 变量 | 字段 |\n|------|------|\n| `CC_LINKER_AGENT_VIEW_ENABLED` | `enabled` |\n| `CC_LINKER_AGENT_VIEW_REFRESH_MIN_INTERVAL_MS` | `refresh_min_interval_ms` |\n| `CC_LINKER_AGENT_VIEW_PEEK_LINES` | `peek_lines` |\n| `CC_LINKER_AGENT_VIEW_PEEK_MAX_BYTES` | `peek_max_bytes` |\n| `CC_LINKER_AGENT_VIEW_EXPECTED_REPLY_TIMEOUT_MS` | `expected_reply_timeout_ms` |\n| `CC_LINKER_AGENT_VIEW_BACKGROUND_ONLY` | `background_only` |\n| `CC_LINKER_AGENT_VIEW_STOP_REQUIRES_CONFIRM` | `stop_requires_confirm` |\n| `CC_LINKER_AGENT_VIEW_REPLY_THROTTLE_MS` | `reply_throttle_ms` |\n\n> **前提条件**：本机需运行 `claude` daemon（>= `agent_view.min_claude_version`）。`/agents` 会先用 `claude --version` 做版本守卫，再检查 `~/.claude/daemon/roster.json` 是否存在，最后读 `~/.claude/jobs/*/state.json` 构建快照。版本不达标或 daemon 未运行时返回红色错误卡，不污染用户主流程。\n\n#### `waiting` 状态判定（v2.4.x）\n\n**简单说：只要 bg 在等用户回答（无论是显式 blocked 还是\"伪 busy 实 waiting\"），就会出现在 waiting 组、带 [Reply] 按钮。** 真正的实现走 `checkRendezvousEligibility` 决策树，覆盖三种情况：\n\n- `tempo=blocked && needs` — bg 显式等待用户回答\n- `state in {running, working} && needs` — CLI 2.1.163 行为：worker 进程在跑但实际在等用户（\"伪 busy 实 waiting\"）\n- `state=blocked` — 无 needs 也归 waiting（保守策略，让用户主动看 [Peek] 决定）\n\n不在上述三种里的 busy/idle session 不会出现 `[Reply]` 按钮 —— 这时候要么 bg 在真 processing（`tempo=active` 无 needs），要么已经 done / stopped。\n\n### Reply UX 改进（v2.4.x）\n\n> **用户视角**：点 [Reply] 之后看到的是一张分层卡 —— 原\"↩️ 回复\"等待卡保留，飞书侧新发一张处理中卡。处理中卡上有三个区域（每 5 秒刷新一次）：\n>\n> - **💭 思考过程**：Claude 当前的 thinking 块（拼接显示）\n> - **🔧 当前操作**：Claude 正在调用的工具名 + input 摘要（≤80 字符，方便扫一眼知道在干啥）\n> - **📝 回复**：Claude 已经生成的最终回复文本\n>\n> bg 跑了又问新问题时，处理中卡无缝切回\"等待输入\"卡（同卡 patch，不重建），用户直接在 chat 接着打字就行。**5 秒刷新是设计而非卡顿** —— 想强制刷新就点 [Refresh]。\n\n#### 实现细节（可选阅读）\n\n- **分层卡片**：原\"↩️ 回复\"等待卡**保留为历史**，新发处理中卡（`buildProcessingCard() = buildStreamingCard('', '', 0)`，`card-updater.ts:483-484`）；bg 再问新问题（`new_needs`）→ 同卡 `patchWaitingCard`（`bot.ts:1602-1618`），不调 `cancel()`，避免\"🛑 已取消\"灰色卡误报\n- **5s tick elapsed time**：流式 patch 节流 `bot.ts:1484`\n- **JSONL 富内容**：`readLastAssistantTurn` 解析 thinking 块（`\\n` 拼接）+ tool_use 名 + input 摘要（`INPUT_SUMMARY_MAX = 80`）\n- **new_needs 链式回复**：rendezvous 返回 `new_needs` → `runChatSDK` 透传 `bgAskedNewQuestion` 给 `handleReply` → `handleReply` 重新 `set()` `expectedReply`\n- **markSent (M1) 防双重 reply**：T2 立即 `expectedReply.markSent(openId)`，60s 等待期内 chat 消息不再走 rendezvous（`manager.ts:915-917` + `expected-reply-state.ts:130`）\n\n### Live Progress Card（实时进度卡）\n\n`/switch` 到一个正在处理的 session 时，飞书侧的概览卡会**每 10 秒自动刷新**（`LiveProgressWatcher`），展示最新 assistant 输出、已运行时间、距上次输出的间隔，直到 session 结束或用户发新消息/切换/手动停止。\n\n```toml\n[feishu_bot.live_progress]\n# interval_ms = 10000    # 轮询间隔（约 133 分钟最大时长 = 800 ticks）\n# max_ticks = 800\n# max_patch_failures = 3  # 连续 3 次飞书 API 失败自动停止\n```\n\n### Attached Card 自动刷新\n\n`[Attach]` 成功后，飞书侧自动创建 `AttachedCardWatcher`，每 10 秒轮询目标 session 并 patch 卡片，展示最新 assistant 输出和运行状态。卡片设置 `update_multi: true` 防止飞书并发 patch 导致内容回退。停止条件与 Live Progress Card 相同（session 结束、patch 连续失败、用户干预、bot 关闭等）。\n\n### Session Activity Sync（CLI 侧活跃检测）\n\n当 CLI 端正在使用某个 session 时，从飞书发消息到同一 session 会弹出黄色警告卡，提示并发冲突风险。用户可选择：\n- 等待 CLI 处理完毕\n- 点击 `⚠️ 我了解风险，仍要发送` 强制发送（60 秒无操作自动强发）\n- 发新消息自动覆盖旧强发请求\n\n检测信号优先级：activity marker sidecar 文件 > OS 进程检测（按 cwd 找 claude 进程 + 子进程采样 CPU）> JSONL mtime 双采样。\n\n可通过 Claude Code hooks 配置 `cc-linker activity-hook` 子命令，实现 100% 精确的 CLI 侧活跃上报（详见下文\"启用 CLI 端 activity marker\"节）。\n\n### BG-Conflict 拒绝卡（安全保护）\n\n当用户 Attach 到一个仍有 daemon background worker 运行的 session 后发消息，飞书弹出三选一恢复卡：\n\n| 按钮 | 行为 |\n|------|------|\n| 🛑 `[停 bg 后继续发送]` | 执行 `claude stop` → 等待 worker 退出 → fallback 到 parent session → 发送消息 |\n| 🌿 `[开新会话发送]` | 创建全新 session 发送消息，不影响原 worker |\n| ❌ `[取消]` | 取消发送，bg worker 不受影响 |\n\n此机制防止两个 claude 进程共享同一 cwd 导致文件写入冲突（安全 > 便利）。\n\n## 🔧 接入飞书（第一个支持的聊天平台）\n\ncc-linker 的架构设计支持接入多种聊天应用，**飞书是第一个已实现的平台**。后续可扩展支持其他 IM 平台。\n\n在配置飞书 Bot 前，需要在 [飞书开放平台](https://open.feishu.cn/app) 创建应用并配置权限。\n\n### 创建应用\n\n1. 访问 https://open.feishu.cn/app → 创建企业自建应用\n2. 在「应用功能」→「机器人」中启用 Bot 能力\n3. 获取 App ID 和 App Secret（凭证与基础信息）\n\n### 必需权限\n\n进入「权限管理」，搜索并开通以下权限：\n\n| 权限 | 用途 |\n|------|------|\n| `im:message` | 读取和发送消息 |\n| `im:message:send_as_bot` | 以应用身份发送消息 |\n| `im:message:readonly` | 获取消息详情（REST 主动读取） |\n| `im:message.p2p_msg:readonly` | 接收用户发给 Bot 的单聊消息（**事件推送必装**） |\n| `im:resource` | 下载用户发送的图片资源 |\n\n> **陷阱提醒**：`im:message.p2p_msg:readonly` ≠ `im:message:readonly`。\n> 飞书 `im.message.receive_v1` 事件订阅页的\"所需权限\"列表**只列前者**；\n> 如果只开通 `im:message:readonly`（REST 主动读取），即使 WebSocket 连上了，\n> Bot 也收不到任何私聊消息。cc-linker 只处理 `chat_type === 'p2p'` 私聊消息，\n> 所以这条权限是必装的。漏配会导致 `cc-linker setup` 卡 120s 抓不到 `open_id`。\n\n### 必需事件订阅\n\n进入「事件与回调」，按以下两个位置分别添加：\n\n**事件配置**：\n\n| 事件 | 用途 |\n|------|------|\n| `im.message.receive_v1` | 接收用户发给 Bot 的消息 |\n| `im.chat.member.bot.added_v1` | Bot 被邀请进群时触发（可选） |\n\n**回调配置**：\n\n| 回调 | 用途 |\n|------|------|\n| `card.action.trigger` | 接收卡片按钮点击（`/list` 切换会话、模型切换、SDK 权限确认等交互） |\n\n> **重要**：订阅方式选择 **WebSocket**（不是 HTTP 回调）。\n>\n> **说明**：`card.action.trigger` 是卡片交互的基础，不添加会导致 `/list`、`/model`、SDK 权限确认等所有卡片按钮点击无响应。\n\n### 发布应用\n\n配置完权限后，进入「版本管理与发布」→ 创建版本 → 发布。**只有发布后的权限才会生效。**\n\n## 📖 配置说明\n\n配置文件：`~/.cc-linker/config.toml`（可选，不创建则使用默认值）\n\n```toml\n[general]\nlog_level = \"info\"\nclaude_bin = \"claude\"\n\n[feishu_bot]\n# owner_open_id = \"ou_xxx\"\n# default_cwd = \"/path/to/workspace\"\n\n[stream]\nenabled = true\nthrottle_ms = 1500\nshow_thinking = true\nmax_card_bytes = 25000\nfallback_to_text = true\n\n[claude]\n# 权限模式：控制 Claude Code 执行操作时的交互确认行为\n# 由于飞书端无法完成终端式交互确认，默认自动接受文件编辑\n# 可选值：acceptEdits / auto / bypassPermissions / default / dontAsk / plan\npermission_mode = \"acceptEdits\"\n\n# 工具白名单（可选）：显式允许的工具列表\n# 默认空数组，表示遵从 Claude Code 本地设置（~/.claude/settings.json）\n# 若配置此项，会覆盖本地设置。示例：[\"Read\", \"Edit\", \"Bash(git *)\"]\n# allowed_tools = []\n\n# 工具黑名单（可选）：显式禁止的工具列表\n# 默认空数组，表示遵从 Claude Code 本地设置\n# 若配置此项，会覆盖本地设置。示例：[\"Bash\", \"Write\"]\n# disallowed_tools = []\n\n[sdk]\n# Agent SDK 模式（支持飞书卡片上的交互式权限确认）\n# 默认开启。如需关闭，设为 false\n# enabled = true               # 默认 true，支持飞书端交互式权限确认\n# permission_mode = \"acceptEdits\"  # SDK 基础权限模式\n# timeout_ms = 600000          # 权限确认超时（10分钟）\n# claude_executable = \"claude\" # Claude 可执行文件路径\n\n[images]\n# 图片消息处理（默认开启）\n# enabled = true               # 默认 true，自动下载飞书图片并传递给 Claude\n# max_size_bytes = 10485760    # 图片大小限制（默认 10MB）\n# cleanup_max_age_hours = 24   # 过期图片清理周期（默认 24 小时）\n```\n\n**注意：** SDK 模式需要系统已安装 `claude` 命令行工具（`npm install -g @anthropic-ai/claude-code`）。如需自定义可执行文件路径，可使用 `general.claude_bin` 或 `sdk.claude_executable`。\n\n> cc-linker 默认使用 SDK 自带的 claude 二进制（保证版本兼容）。若该二进制在 npm install 时被 omit（如 `--omit=optional`、`NODE_ENV=production`），cc-linker 会自动 fallback 到 `general.claude_bin`（通常是系统 PATH 中的 `claude`），并在日志中输出 WARN。如遇版本不兼容，可显式设置 `sdk.claude_executable` 指向兼容版本。\n\n**补充：** SDK 权限确认卡片如果发送失败，或用户在超时时间内未确认，当前实现会自动拒绝该次工具调用。\n\n**环境变量覆盖**：\n\n| 环境变量 | 说明 |\n|---------|------|\n| `CC_LINKER_DIR` | 覆盖 cc-linker 数据目录（默认 `~/.cc-linker`） |\n| `CC_LINKER_CONFIG_PATH` | 指定配置文件路径 |\n| `CC_LINKER_REGISTRY_PATH` | 指定 registry 文件路径 |\n| `CC_LINKER_LOG_PATH` | 指定日志文件路径 |\n| `CC_LINKER_FEISHU_APP_ID` | 飞书 App ID |\n| `CC_LINKER_FEISHU_APP_SECRET` | 飞书 App Secret |\n| `CC_LINKER_FEISHU_OWNER_OPEN_ID` | 限制仅指定用户使用 |\n| `CC_LINKER_FEISHU_DEFAULT_CWD` | 默认工作目录 |\n| `CC_LINKER_STREAM_ENABLED` | 流式响应开关 |\n| `CC_LINKER_LOG_LEVEL` | 日志级别 |\n| `CC_LINKER_CLAUDE_PERMISSION_MODE` | Claude Code 权限模式 |\n| `CC_LINKER_CLAUDE_ALLOWED_TOOLS` | 允许的工具列表（逗号分隔） |\n| `CC_LINKER_CLAUDE_DISALLOWED_TOOLS` | 禁止的工具列表（逗号分隔） |\n| `CC_LINKER_SDK_ENABLED` | 启用 Agent SDK 模式（true/false，默认 true） |\n| `CC_LINKER_SDK_PERMISSION_MODE` | SDK 权限模式 |\n| `CC_LINKER_SDK_TIMEOUT_MS` | 权限确认超时（毫秒） |\n| `CC_LINKER_SDK_CLAUDE_EXECUTABLE` | Claude 可执行文件路径 |\n| `CC_LINKER_MAX_CONCURRENT_SESSIONS` | 最大并发会话数（默认 5） |\n| `CC_LINKER_SESSION_LOCK_TIMEOUT_MS` | 单个会话锁超时（毫秒） |\n| `CC_LINKER_MAX_QUEUE_SIZE` | 消息队列最大积压数量 |\n| `CC_LINKER_CONFIRM_RISKY_ACTIONS` | 是否确认高风险操作（true/false） |\n| `CC_LINKER_IMAGES_ENABLED` | 图片处理开关（默认 true） |\n| `CC_LINKER_IMAGES_MAX_SIZE` | 图片大小限制（字节） |\n| `CC_LINKER_IMAGES_CLEANUP_HOURS` | 图片清理周期（小时） |\n\n### 启用 CLI 端 activity marker（可选）\n\ncc-linker 默认通过 OS 信号检测 CLI 端活跃度。如需更精确的检测，可在 `~/.claude/settings.json` 中配置 hooks（Claude Code 通过 stdin 传入 JSON 事件，`session_id` 字段需自行用 `jq` 提取）：\n\n```json\n{\n  \"hooks\": {\n    \"UserPromptSubmit\": [{\n      \"hooks\": [{\n        \"type\": \"command\",\n        \"command\": \"SESSION_ID=$(jq -r '.session_id' </dev/stdin); cc-linker activity-hook --platform=cli --action=start --session=\\\"$SESSION_ID\\\"\"\n      }]\n    }],\n    \"Stop\": [{\n      \"hooks\": [{\n        \"type\": \"command\",\n        \"command\": \"SESSION_ID=$(jq -r '.session_id' </dev/stdin); cc-linker activity-hook --platform=cli --action=end --session=\\\"$SESSION_ID\\\"\"\n      }]\n    }]\n  }\n}\n```\n\n这样 cc-linker 可以 100% 准确检测 CLI 侧活跃状态，而不是依赖 CPU/子进程采样。\n\n## 🏗 架构概览\n\n```\n┌──────────────────────────────────────────────────────┐\n│  Claude Code CLI    ←→  Registry  ←→  聊天应用 Bot    │\n│  (session JSONL)    (registry.json)  (当前: 飞书)     │\n│                          ↑                           │\n│                   SessionStart hook                  │\n│                                                      │\n│  内置模块：                                           │\n│  - SDK 模式 (默认): Agent SDK + 交互式权限确认        │\n│  - 流式模式: stream-json + 卡片实时更新               │\n│  - 图片处理: 自动下载 + prompt 注入                   │\n│  - 目录浏览: /listDir 交互式切换 cwd                  │\n│  - 文件队列: 消息持久化 + 崩溃恢复                    │\n└──────────────────────────────────────────────────────┘\n```\n\n- **Registry** (`~/.cc-linker/registry.json`): 统一会话索引，带文件锁和自动备份\n- **User Mapping** (`~/.cc-linker/user-mapping.json`): 飞书用户 open_id → 当前会话目标的映射（CAS 原子更新）\n- **Scanner**: 增量扫描 Claude Code JSONL 文件，保持注册表最新\n- **Hook**: Claude Code 启动时自动注册新会话\n- **Spool Queue**: 持久化消息队列，崩溃后可恢复（pending → processing → replied → done/failed）\n- **Stream Parser**: 解析 Claude `stream-json` 输出\n- **Card Updater**: 流式卡片 + 权限卡片的发送与节流\n- **Permission Handler**: SDK 模式下工具权限的交互式确认（允许/拒绝/超时自动拒绝）\n- **Image Processor**: 飞书图片下载、prompt 注入、过期清理\n- **Startup Reconciler**: 进程启动时自动修复不一致状态（恢复卡住的消息、回滚超时 claim、补齐 jsonl_path）\n- **Provider Manager**: 多模型管理，支持 CC Switch 集成和手动配置\n- **Activity Detection**: CLI 端会话活跃检测，防止飞书和 CLI 同时操作同一会话\n\n详细架构见 [docs/产品设计文档-自建方案.md](docs/产品设计文档-自建方案.md)。\n\n## 💻 开发者指南\n\n```bash\ngit clone https://github.com/yujuntea/cc-linker.git\ncd cc-linker\nbun install\nbun run dev <命令>        # 开发模式\nbun run typecheck         # 类型检查\nbun test                  # 运行测试\nbun test --coverage       # 带覆盖率\n```\n\n### 两种构建产物\n\ncc-linker 支持两种分发形式，构建脚本不同：\n\n| 产物 | 构建命令 | 输出 | 用途 |\n|------|----------|------|------|\n| **独立二进制** | `bun run build` | `dist/cc-linker` | 单机使用，无需额外运行时 |\n| **npm 包** | `bun run build:npm` | `dist/cli.js` | `npm install -g` 全局安装（运行时仍需 Bun） |\n\n### 开发命令速查\n\n| 命令 | 行为 | 适用场景 |\n|------|------|---------|\n| `bun run dev <命令>` | 直接运行 `src/index.ts`（不构建） | 开发调试 |\n| `bun run build:npm` | 构建 npm 包 → `dist/cli.js` | 构建产物 |\n| `bun run reload` | 构建 → 如果 daemon 在运行则自动重启 | 开发时快速生效（适合 `bun link` 安装） |\n| `bun run reload:force` | 构建 → 强制重启（没在运行也会启动） | 开发时确保 daemon 在运行 |\n| **`bun run deploy`** ⭐ | **构建 → 打包 → 全局安装 → 自动重启** | **正式发布到全局并生效** |\n| `bun run deploy:force` | 构建 → 打包 → 全局安装 → 强制重启 | 同上，确保启动 |\n| `bun run pack:test` | 构建 → 打包 → 安装到隔离目录 | 验证 npm 包完整性 |\n| `bun run typecheck` | TypeScript 类型检查 | CI/提交前 |\n| `bun test` | 运行所有测试 | CI/提交前 |\n\n> **💡 `deploy` 与 `reload` 的区别**：\n> - `reload` 只更新源码目录的 `dist/cli.js`，重启的是**旧的全局安装版本**（如果通过 `npm install -g` 安装）\n> - `deploy` 会 `npm install -g ./cc-linker-x.y.z.tgz`，确保全局安装的是最新代码，再重启\n> - 通过 `bun link` 本地链接安装的用户，`reload` 即可生效（符号链接自动指向源码目录）\n\n### npm 包本地测试\n\n正式发布前，建议先在本地打包安装验证，确保 `files` 字段和 `bin` 入口正确。\n\n**方法 1：pack + install（最接近真实发布）**\n\n```bash\n# 1. 构建并打包\nbun run build:npm         # 生成 dist/cli.js\nnpm pack                  # → cc-linker-x.y.z.tgz\n\n# 2. 在干净环境安装测试\nmkdir -p /tmp/test-cc-linker && cd /tmp/test-cc-linker\nnpm install /path/to/cc-linker-0.2.0.tgz\nnpx cc-linker --version   # 验证命令可用\ncc-linker list            # 验证功能正常\n\n# 3. 特别验证 daemon install 生成的 plist/service 中可执行路径正确\ncc-linker daemon install  # 检查生成的配置文件中 ProgramArguments/ExecStart\n```\n\n**方法 2：bun link（开发迭代最快）**\n\n```bash\n# 创建全局符号链接，修改代码后重新 build:npm 立即生效\nbun run build:npm\nbun link                  # 或 npm link\n\n# 全局任意位置测试\ncc-linker list\ncc-linker daemon install\n\n# 解除链接\nbun unlink cc-linker\n```\n\n> ⚠️ `bun link` 是符号链接到源码目录，不经过 `files` 字段过滤。发布前**务必用方法 1 验证一次**，避免 `files` 遗漏必要文件。\n\n### 发布\n\n```bash\n# 独立二进制（本地分发）\nbun run build             # → dist/cc-linker\n\n# npm 发布\nnpm version minor         # 或 patch / major\nnpm publish               # prepublishOnly 自动触发 build:npm\ngit push --tags\n```\n\n## 📚 详细文档\n\n| 文档 | 说明 |\n|------|------|\n| [docs/产品设计文档-自建方案.md](docs/产品设计文档-自建方案.md) | 产品设计文档 |\n| [docs/验收指南.md](docs/验收指南.md) | 功能验收指南 |\n| [docs/验收测试报告.md](docs/验收测试报告.md) | 验收测试结果 |\n| [docs/Product.md](docs/Product.md) | 产品需求文档 |\n| [docs/model-switch-design.md](docs/model-switch-design.md) | 模型切换设计 |\n| [docs/img-proxy.md](docs/img-proxy.md) | 图片代理 (img-proxy) —— 让纯文本模型在 Claude Code 里也能接收粘贴图片 |\n\n## License\n\nMIT\n","readmeFilename":"README.md"}