{"_id":"@2someone/cli","_rev":"9-d3bb68ef48723fe93d5897df57b532e8","name":"@2someone/cli","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.0":{"name":"@2someone/cli","version":"0.1.0","keywords":["2someone","2some","cli","bot"],"license":"UNLICENSED","_id":"@2someone/cli@0.1.0","maintainers":[{"name":"harryisfish","email":"giblets_poseur_0m@icloud.com"}],"homepage":"https://2some.ren","bugs":{"url":"https://github.com/leaperone/2SOMEone/issues"},"bin":{"2s1":"bin/2s1.js"},"dist":{"shasum":"6ad4fb3a088b270ddcc0f378b8b33ee40c579cf3","tarball":"https://registry.npmjs.org/@2someone/cli/-/cli-0.1.0.tgz","fileCount":52,"integrity":"sha512-w0TD0+J43wSSiHrgB8M5kxLXpPdcv6fwoprnlhhXBSCdbJz5qtoenHtl+wHQBrxQ/nb+uU6I/fFpzIlGB+XvqQ==","signatures":[{"sig":"MEUCIQDTU8CrbLspUGr+Z56eyR48evgY477HBSe2Wga/5afHuQIgD0hUHSyG2AiK7ydQ3KgNZrk+TX1iT9YApz14wyhVXCo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116270},"type":"module","engines":{"node":">=20"},"gitHead":"70d3f1db149df33f6d1348b4cbac0e6665b26804","scripts":{"dev":"tsc --watch","build":"tsc","check":"tsc --noEmit","prepack":"pnpm build"},"_npmUser":{"name":"harryisfish","email":"giblets_poseur_0m@icloud.com"},"repository":{"url":"git+ssh://git@github.com/leaperone/2SOMEone.git","type":"git","directory":"apps/cli"},"_npmVersion":"10.9.4","description":"Command-line tools for 2SOMEone.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"open":"^11.0.0","commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^20.17.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.0_1780579229269_0.7652388747181718","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@2someone/cli","version":"0.1.1","keywords":["2someone","2some","cli","bot"],"license":"UNLICENSED","_id":"@2someone/cli@0.1.1","maintainers":[{"name":"harryisfish","email":"giblets_poseur_0m@icloud.com"}],"homepage":"https://2some.ren","bugs":{"url":"https://github.com/leaperone/2SOMEone/issues"},"bin":{"2s1":"bin/2s1.js"},"dist":{"shasum":"8243cb24577b46f1d9a4c539172add88cbf238f5","tarball":"https://registry.npmjs.org/@2someone/cli/-/cli-0.1.1.tgz","fileCount":52,"integrity":"sha512-IhmRO3Wy2rB+0Dl2BErpWsDXk50okVU6mdUNBO/rbE2dAQoB92wJaRP0zmQ8A9rBghxRZAbt4guRJx232BLRRg==","signatures":[{"sig":"MEUCICbmWdSMUnXBWSO2XVVboNmfMdaDjzH4NL1HFvES5sVpAiEAq+pubbHGbs/tSbSVgFRNC7Be13uNod8IMJt6OaNmWog=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116268},"type":"module","engines":{"node":">=20"},"gitHead":"ac33f3fecc99553fed6ba040331bad270548dca2","scripts":{"dev":"tsc --watch","build":"tsc","check":"tsc --noEmit","prepack":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:359073a9-a05f-4727-bb84-8dc08a52a0f2"}},"repository":{"url":"git+https://github.com/leaperone/2SOMEone.git","type":"git","directory":"apps/cli"},"_npmVersion":"11.13.0","description":"Command-line tools for 2SOMEone.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"open":"^11.0.0","commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^20.17.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.1_1780582713832_0.023625575554092837","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@2someone/cli","version":"0.1.2","keywords":["2someone","2some","cli","bot"],"license":"UNLICENSED","_id":"@2someone/cli@0.1.2","maintainers":[{"name":"harryisfish","email":"giblets_poseur_0m@icloud.com"}],"homepage":"https://2some.ren","bugs":{"url":"https://github.com/leaperone/2SOMEone/issues"},"bin":{"2s1":"bin/2s1.js"},"dist":{"shasum":"258c7a857ac29457ed83e6da3be621607617bb44","tarball":"https://registry.npmjs.org/@2someone/cli/-/cli-0.1.2.tgz","fileCount":52,"integrity":"sha512-bwTbuo5QjqvAMkORYl1JMIPxC8+Z5oefCtSae7PfMNxnSJIt6Z8r9HI3UnXihWSfuy4tcQlCmO/5jsluXLW3Cg==","signatures":[{"sig":"MEUCIQDvDao8/6RaELsXFsQ2+bhYN1iGyjVFSS64bFd8pRwVewIgFfMl+pZ5MqkofEiW0klQlqa7qby9UTLKBBW/vlYIfJU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":119170},"type":"module","engines":{"node":">=20"},"gitHead":"e0b9266e651d5e2eb9404224cbb24bea4c2538fc","scripts":{"dev":"tsc --watch","build":"tsc","check":"tsc --noEmit","prepack":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:359073a9-a05f-4727-bb84-8dc08a52a0f2"}},"repository":{"url":"git+https://github.com/leaperone/2SOMEone.git","type":"git","directory":"apps/cli"},"_npmVersion":"11.13.0","description":"Command-line tools for 2SOMEone.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"open":"^11.0.0","commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^20.17.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.2_1781351545493_0.22290885002600125","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@2someone/cli","version":"0.1.3","keywords":["2someone","2some","cli","bot"],"license":"UNLICENSED","_id":"@2someone/cli@0.1.3","maintainers":[{"name":"harryisfish","email":"giblets_poseur_0m@icloud.com"}],"homepage":"https://2some.ren","bugs":{"url":"https://github.com/leaperone/2SOMEone/issues"},"bin":{"2s1":"bin/2s1.js"},"dist":{"shasum":"7170ccea9bc2485dd3ddd6fca0314baaa8f14978","tarball":"https://registry.npmjs.org/@2someone/cli/-/cli-0.1.3.tgz","fileCount":70,"integrity":"sha512-te80mAXn5uBJd4TOBIE8yd/aTtL9LyflwZpsE3l3qxaZdXtPYtZ3GTZqethU75+KJO+D96+FRFRt4bVRyT/ArA==","signatures":[{"sig":"MEUCIEZ7ImtkcMyS0tgS2mYQH2odksoSVGsYGUgEc8RJJgydAiEAgSADc+lm6fs2z5wloLUL0ac8pBiktZXRGvLVqk0xqWc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":247888},"type":"module","engines":{"node":">=20"},"gitHead":"1adc6af0a997d38e481558ae6dead386b6629ee8","scripts":{"dev":"tsc --watch","test":"pnpm build && node --test test/*.test.mjs","build":"tsc","check":"tsc --noEmit","prepack":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:359073a9-a05f-4727-bb84-8dc08a52a0f2"}},"repository":{"url":"git+https://github.com/leaperone/2SOMEone.git","type":"git","directory":"apps/cli"},"_npmVersion":"11.16.0","description":"Command-line tools for 2SOMEone.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"open":"^11.0.0","commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^20.17.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.3_1783742650378_0.6650391715909478","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@2someone/cli","version":"0.1.4","keywords":["2someone","2some","cli","bot"],"license":"UNLICENSED","_id":"@2someone/cli@0.1.4","maintainers":[{"name":"harryisfish","email":"giblets_poseur_0m@icloud.com"}],"homepage":"https://2some.ren","bugs":{"url":"https://github.com/leaperone/2SOMEone/issues"},"bin":{"2s1":"bin/2s1.js"},"dist":{"shasum":"2c2d4b0d5b006e8c9c1b512907281d20dac2147b","tarball":"https://registry.npmjs.org/@2someone/cli/-/cli-0.1.4.tgz","fileCount":70,"integrity":"sha512-31ZKM1rjGl6aHTtSWY6LPFP/mPlEXKFPuRxJPT77IjFXwPl4vZPf108DaPtYnsMQv8CW3zN/mpYXOoPzJAcgWQ==","signatures":[{"sig":"MEQCIDoup65xCnj3V/rmc5LaYXQteFmz/YDDwIZ/nRp3KnADAiBeg3V/JV/tCrCIvyWoOzJ1kWdCQR3fLt1RxWwwa9VsUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246855},"type":"module","engines":{"node":">=20"},"gitHead":"68157fe2d31ef2ff1228bf5eb06dfe96f0f53028","scripts":{"dev":"tsc --watch","test":"pnpm build && node --test test/*.test.mjs","build":"tsc","check":"tsc --noEmit","prepack":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:359073a9-a05f-4727-bb84-8dc08a52a0f2"}},"repository":{"url":"git+https://github.com/leaperone/2SOMEone.git","type":"git","directory":"apps/cli"},"_npmVersion":"11.17.0","description":"Command-line tools for 2SOMEone.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"open":"^11.0.0","commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^20.17.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.4_1787559125313_0.30967704101135185","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@2someone/cli","version":"0.1.5","keywords":["2someone","2some","cli","bot"],"license":"UNLICENSED","_id":"@2someone/cli@0.1.5","maintainers":[{"name":"harryisfish","email":"giblets_poseur_0m@icloud.com"}],"homepage":"https://2some.ren","bugs":{"url":"https://github.com/leaperone/2SOMEone/issues"},"bin":{"2s1":"bin/2s1.js"},"dist":{"shasum":"3d2600b6219ce0938733e7899331b25eecb3d510","tarball":"https://registry.npmjs.org/@2someone/cli/-/cli-0.1.5.tgz","fileCount":70,"integrity":"sha512-lmXjcZEh2RbYEMkJYVYrrQ2onlLPwhi7NF2omZc2AgB4SH6HlQ34pWJzsLLPvsPxG7+XW32UaNtTmLjD/7kweA==","signatures":[{"sig":"MEQCIBjowGVODU6uKzvNNYvkTTENxGi7+4LVpsSHfx2yFW1nAiBP8lvbtu1wQMT+3Zo0zvg8zoZZYddrypXAheRjs7M+Hg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":247670},"type":"module","engines":{"node":">=20"},"gitHead":"75ffc8d435160ea3c47f8360df04613ea54bffd7","scripts":{"dev":"tsc --watch","test":"pnpm build && node --test test/*.test.mjs","build":"tsc","check":"tsc --noEmit","prepack":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:359073a9-a05f-4727-bb84-8dc08a52a0f2"}},"repository":{"url":"git+https://github.com/leaperone/2SOMEone.git","type":"git","directory":"apps/cli"},"_npmVersion":"11.17.0","description":"Command-line tools for 2SOMEone.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"open":"^11.0.0","commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^20.17.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.5_1788097016811_0.18308863693846789","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@2someone/cli","version":"0.1.6","keywords":["2someone","2some","cli","bot"],"license":"UNLICENSED","_id":"@2someone/cli@0.1.6","maintainers":[{"name":"harryisfish","email":"giblets_poseur_0m@icloud.com"}],"homepage":"https://2some.ren","bugs":{"url":"https://github.com/leaperone/2SOMEone/issues"},"bin":{"2s1":"bin/2s1.js"},"dist":{"shasum":"4f26ca28113ced7244e488d1a7ec0f470b035d12","tarball":"https://registry.npmjs.org/@2someone/cli/-/cli-0.1.6.tgz","fileCount":70,"integrity":"sha512-XjJcunZIZuxAGbA2bS01HfVWLJNnXIralKy3nV5nJa2qbLfB7uZDchi4P51bzdaXyADQ5oxLSQsOBUHvzWBBGw==","signatures":[{"sig":"MEYCIQCu33ITa1oJkeS3Qpa/zQxICD15lqCE9M9bl8Ut5JIQAAIhAMux/XtsxxY7Jz4dpCl3bWYbkF1xHksnztx5G+qu7LGL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":247959},"type":"module","engines":{"node":">=20"},"gitHead":"311e9566a4dbbf02455a90aba7ad0c71f9fffe6a","scripts":{"dev":"tsc --watch","test":"pnpm build && node --test test/*.test.mjs","build":"tsc","check":"tsc --noEmit","prepack":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:359073a9-a05f-4727-bb84-8dc08a52a0f2"}},"repository":{"url":"git+https://github.com/leaperone/2SOMEone.git","type":"git","directory":"apps/cli"},"_npmVersion":"11.17.0","description":"Command-line tools for 2SOMEone.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"open":"^11.0.0","commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^20.17.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.6_1788227304846_0.3949139225486129","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@2someone/cli","version":"0.2.0","keywords":["2someone","2some","cli","bot"],"license":"UNLICENSED","_id":"@2someone/cli@0.2.0","maintainers":[{"name":"harryisfish","email":"giblets_poseur_0m@icloud.com"}],"homepage":"https://2some.ren","bugs":{"url":"https://github.com/leaperone/2SOMEone/issues"},"bin":{"2s1":"bin/2s1.js"},"dist":{"shasum":"5f4ee017f64fb14e9e3672f325e5397a50817ffb","tarball":"https://registry.npmjs.org/@2someone/cli/-/cli-0.2.0.tgz","fileCount":70,"integrity":"sha512-jVuDVhyVeMzTg82EJ8xjHEBabpappE3bEg8DNRMGNv2KI89czGVd9AN7ysxd+qjtRm9SzyC5PkEHItTV6lkAWg==","signatures":[{"sig":"MEQCIH+PaEQlvXzTc3SSJVEULO5hCmFBpv8Ate6D719tAFg6AiBlNoMz5zIqJxmoeQJjc5RjKl/Cj8d9RJMRZHd9ED6erw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":303274},"type":"module","engines":{"node":">=20"},"gitHead":"a39b1ebce6407edde817cd830d6a64f5d730674a","scripts":{"dev":"tsc --watch","test":"pnpm build && node --test test/*.test.mjs","build":"tsc","check":"tsc --noEmit","prepack":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:359073a9-a05f-4727-bb84-8dc08a52a0f2"}},"repository":{"url":"git+https://github.com/leaperone/2SOMEone.git","type":"git","directory":"apps/cli"},"_npmVersion":"11.19.0","description":"Command-line tools for 2SOMEone.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"open":"^11.0.0","commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^20.17.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.0_1788359944013_0.6519144585877201","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@2someone/cli","version":"0.2.1","description":"Command-line tools for 2SOMEone.","type":"module","license":"UNLICENSED","homepage":"https://2some.ren","repository":{"type":"git","url":"git+https://github.com/leaperone/2SOMEone.git","directory":"apps/cli"},"bugs":{"url":"https://github.com/leaperone/2SOMEone/issues"},"keywords":["2someone","2some","cli","bot"],"bin":{"2s1":"bin/2s1.js"},"publishConfig":{"access":"public"},"engines":{"node":">=20"},"scripts":{"build":"tsc","dev":"tsc --watch","check":"tsc --noEmit","test":"pnpm build && node --test test/*.test.mjs","prepack":"pnpm build"},"dependencies":{"commander":"^13.1.0","open":"^11.0.0"},"devDependencies":{"@types/node":"^20.17.0","typescript":"^5.7.0"},"gitHead":"b40f98601537162326069c7c26e7591b01b9508c","_id":"@2someone/cli@0.2.1","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-u+5wZSFBEons24fn6a2vqKssHzV3kV0szy2SgFZzFripc0lBknQfZSQJwqMxYecrnGfTmlu4rvRLbQv9gZUcwQ==","shasum":"56624cfca63bbe95b260cfa85d3fba708d5412f2","tarball":"https://registry.npmjs.org/@2someone/cli/-/cli-0.2.1.tgz","fileCount":70,"unpackedSize":303521,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICEUd3+0iGwIHrz+MqpvskdpZgycUK9YaOAo76QzwoXWAiB3xcG+6SXad+v2wAIIZ3SATe9gorQkg71vHihBcDpcrg=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:359073a9-a05f-4727-bb84-8dc08a52a0f2"}},"directories":{},"maintainers":[{"name":"harryisfish","email":"giblets_poseur_0m@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cli_0.2.1_1788409679436_0.5049763680116182"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-04T13:20:29.039Z","modified":"2026-09-03T04:27:59.893Z","0.1.0":"2026-06-04T13:20:29.406Z","0.1.1":"2026-06-04T14:18:33.988Z","0.1.2":"2026-06-13T11:52:25.643Z","0.1.3":"2026-07-11T04:04:10.517Z","0.1.4":"2026-08-24T08:12:05.583Z","0.1.5":"2026-08-30T13:36:56.944Z","0.1.6":"2026-09-01T01:48:25.008Z","0.2.0":"2026-09-02T14:39:04.171Z","0.2.1":"2026-09-03T04:27:59.570Z"},"bugs":{"url":"https://github.com/leaperone/2SOMEone/issues"},"license":"UNLICENSED","homepage":"https://2some.ren","keywords":["2someone","2some","cli","bot"],"repository":{"type":"git","url":"git+https://github.com/leaperone/2SOMEone.git","directory":"apps/cli"},"description":"Command-line tools for 2SOMEone.","maintainers":[{"name":"harryisfish","email":"giblets_poseur_0m@icloud.com"}],"readme":"# 2SOMEone CLI\n\n`2s1` is the command-line client for 2SOMEone.\n\n## Install\n\n```bash\nnpm install -g @2someone/cli\n```\n\n## Configure\n\nBy default, the CLI talks to `https://2some.ren`.\n\n```bash\nexport TWOSOMEONE_BASE_URL=https://2some.ren\nexport TWOSOMEONE_API_KEY=your-human-api-key\n```\n\nManagement commands use a human account API key from `TWOSOMEONE_API_KEY` or\n`2s1 login`. Bot runtime tests use a bot API key from `--bot-key`,\n`--bot-key-env`, or `TWOSOMEONE_BOT_API_KEY`.\n\n## Bot Commands\n\nFetch the public inbound webhook guide (no login) with `2s1 docs bots` /\n`2s1 docs webhook`, or open https://2some.ren/docs/bots/inbound. `2s1 --json\nbot context` includes a `docs` object with the same canonical URLs if the\nlive docs index is stale.\n\n```bash\n2s1 --json bot context\n2s1 docs bots\n2s1 docs webhook\n2s1 --json bot list\n2s1 --json bot show <botUserId>\n2s1 --json bot key list <botUserId>\n2s1 --json bot installation list <botUserId>\n2s1 --json bot installation narrow <botUserId> <installationId> \\\n  --scope chat.read --data-access-mode invoked_messages --expected-grant-revision 3 --yes\n2s1 --json bot installation revoke <botUserId> <installationId> \\\n  --expected-grant-revision 4 --yes\nTWOSOMEONE_BOT_API_KEY=... 2s1 --json bot test bubble-read\nTWOSOMEONE_BOT_API_KEY=... 2s1 --json bot test installations\nTWOSOMEONE_BOT_API_KEY=... 2s1 --json bot test chat-read <conversationId> --limit 20\nTWOSOMEONE_BOT_API_KEY=... 2s1 --json bot test thread-read <conversationId> <threadRootId>\nTWOSOMEONE_BOT_API_KEY=... 2s1 --json bot test chat-send <conversationId> \\\n  --text \"状态正常\" --client-message-id <uuid> --yes\n```\n\nCommands that create content, rotate/revoke keys, install/narrow/revoke bots, or disable bots\nrequire `--yes`.\n\n`bot installation list/narrow/revoke` are human management commands. `narrow`\nonly requests a subset of an existing grant; the server rejects expansion and\nlegacy NULL-consent rows that require explicit re-consent. Pass\n`--expected-grant-revision` to prevent concurrent overwrite. Authorization\nconfiguration changes can revoke all previous runtime keys; when\n`runtimeKeysNeedRotation` is true, rotate before the next runtime request.\n\nInstallation list responses are bounded to 100 rows in the current v1\ncontract. JSON output keeps both `hasMore` and `truncated`; human output warns\nwhen either flag is true. Cursor pagination will be added in a later contract\nrevision.\n\nRuntime reads are scoped by the bot installation and the server's privacy\npolicy. The installation projection can contain lifecycle metadata such as\n`status`, `archived`, `grantRevision`, `installationSequence`, and\n`grantedDataAccessMode`; the public data-access values are\n`interaction_context`, `invoked_messages`, and `read_all` (older servers may\ntemporarily return the storage aliases `context` or `history`). A returned\ninstallation is not a promise that all historical messages are readable.\n\n`chat-send` accepts `--thread-root-id` and `--parent-message-id` for Thread\nreplies, and `--client-message-id <uuid>` for idempotency. The Bot runtime is\nthe message sender, so it sends ordinary text only. Targeted slash commands,\ntyped options, and manifest versions are human-sender interaction fields on\nthe Web/Mobile chat API; they are intentionally not exposed as a Bot runtime\nshortcut until a dedicated Interaction endpoint exists. Inbound bots register\nan HTTPS callback with `2s1 bot endpoint create` and can pull the same durable\nevents with `2s1 bot test events`. `chat-read` polling remains available for\nmonitoring more of a conversation than webhook wakeups; IM poll quota is live\nby owner VIP (5/min default, 30 at VIP 1, 60 at VIP 2). Native interaction ack/modal\ncallbacks are still unsupported.\n\nThe implemented runtime capabilities are `bubble.create`, `bubble.read`,\n`chat.send`, `chat.read`, and `chat.react`. `chat.react` is an explicit,\nindependent grant: it only permits adding/removing the Bot's own reaction on a\nmessage authored by that Bot and does not imply `chat.send` or `chat.read`.\n\n## Character Card Commands\n\nCreate, manage, and end-to-end test reusable single-character assets. A card is\na TavernCardV2-compatible persona; `card chat` opens a `character_im` session.\n\nThe roleplay v1 API stores the full V2 envelope unchanged, including unknown\ntop-level, `data`, and `data.extensions` fields. A card can be referenced by a\nTavernCard, but it is not itself a TavernCard and does not create an AI bot.\n\n```bash\n2s1 --json card context\n2s1 card create --name \"玉玉\" --first-mes \"你好~\"\n2s1 card chat <cardId>         # → conversationId\n2s1 card chat-send <conversationId> --text \"你好\" --yes\n2s1 card chat-log <conversationId>\n```\n\nAll `card` commands use the human account API key. `chat-send` and `delete`\nrequire `--yes`. See the bundled skill at\n`skills/2someone-character-card/SKILL.md`.\n\nStarting a session or sending a message requires the account to meet the\nplatform's current Level 1 roleplay gate; the API returns the exact profile or\nbinding requirement when it is not met.\n\n`status`, `ack`, `publish`, `model`, `regenerate`, and `reset` are retained as\ndisabled compatibility names. They return `command_unsupported` locally and do\nnot call the removed hosted-AI endpoints.\n\nThe removed `--expected-version` update flag is rejected locally as\n`option_unsupported`; the new API has no version field, so the CLI never\npretends to provide optimistic concurrency.\n\n## Wiki Commands\n\nRead public Wikis, manage Wikis available to the current human account, and\nrun rights-holder governance workflows.\n\nClub owner/admin authority applies only to Wikis currently owned by that Club.\nPlatform system admin is a separate global role and is never inferred from Club membership.\n\n```bash\n2s1 --json wiki context\n2s1 wiki list --query \"Alice\" --subject person\n2s1 wiki show <wiki-id-or-slug>\n2s1 wiki ai-context <wiki-id-or-slug>\n2s1 wiki mine\n2s1 wiki section upsert <wiki-id-or-slug> --kind backstory --markdown \"...\"\n2s1 wiki revisions <wiki-id-or-slug>\n```\n\nPublic `list`, `show`, `ai-context`, `revisions`, and `revision show` reads do\nnot require login. Mutations use the human account API key. Child routes accept\nan id or slug because the CLI resolves the canonical Wiki id first.\n\n`approve`, `protect`, `review-mode`, `revert`, `role grant`, and `role revoke`\nrequire `--yes`. `approve` only approves a pending revision; platform-system-admin-only\nclaim approval/rejection and revision suppression are not exposed. See\n`skills/2someone-wiki/SKILL.md`.\n","readmeFilename":"README.md"}