{"_id":"@modelprofile.com/authswitch","_rev":"41-be13d2fd018fb704d3063e041e621d5a","name":"@modelprofile.com/authswitch","dist-tags":{"latest":"11.4.1"},"versions":{"2.1.2":{"name":"@modelprofile.com/authswitch","version":"2.1.2","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@2.1.2","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"a2cffa19564755575ecbfab16a04001c98a7ac38","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-2.1.2.tgz","fileCount":95,"integrity":"sha512-c0Gp6R0T+Fe8X/KLOE6Tr2TSIgvGMbjT+nI0sXXJuETmF6PWawbH38eSiOH232MEO2AxqmY1aYefHQeIExT89A==","signatures":[{"sig":"MEYCIQDMhn2AdRYeTEIcVH238I428KmYaOZvgIja2oyVSDOzBgIhAIxYOZb6IJoLtFp0ZKcoENp25cywDZrqBqIujejNVj3P","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":732061},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartconsole":"^1.1.0","@modelprofile.com/flexharness-models":"^7.0.1","@modelprofile.com/flexharness-providers":"^7.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^26.4.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.0.0","@git.zone/tsbuild":"^4.4.3"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_2.1.2_1789314917403_0.47441772737141163","host":"s3://npm-registry-packages-npm-production"}},"2.1.3":{"name":"@modelprofile.com/authswitch","version":"2.1.3","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@2.1.3","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"74becca916d71d00251574c62a9eee57733e93dc","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-2.1.3.tgz","fileCount":95,"integrity":"sha512-KDpcY2O7V7M6aJoK0ipZ3Ma+o+HGdDQZD78yQuwgyErn6mg2YwydL6GZwB09X3WL3Lde3Ld8okGD6fMi86pMtQ==","signatures":[{"sig":"MEYCIQDl3q0GvUVF9v5o6nsgu1jJ9TDHOO0uSTJHpt9NLyRkHQIhAPjPRHpMWWOUe9FfLH1N3/JU0ZGXXpTHkcjwnjG/0c+X","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":733042},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartconsole":"^1.1.0","@modelprofile.com/flexharness-models":"^7.0.1","@modelprofile.com/flexharness-providers":"^7.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^26.4.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.0.0","@git.zone/tsbuild":"^4.4.3"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_2.1.3_1789315684343_0.8713539579839471","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@modelprofile.com/authswitch","version":"2.2.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@2.2.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"16cf61575d6e086f515fde8c8874937ba139f060","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-2.2.0.tgz","fileCount":94,"integrity":"sha512-dnKUel2KiNDJSe0Uh47s/l5b3n4Da7SFEPG6hA/4dwYmKgknOR66EgHNUYb3eyGdHAH9X4rH58lDT19FaPxMwg==","signatures":[{"sig":"MEQCIH4fZ9+irbryHUBajQK96b8wcjm8f+MJWKCpjUvedwE2AiBSLGBvaQQhr2rqDdo0guN1WeVDYJ8TgTHFoXjg8BUaUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":743253},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartconsole":"^1.1.0","@modelprofile.com/flexharness-models":"^7.0.1","@modelprofile.com/flexharness-providers":"^7.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"26.5.0","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.0.0","@git.zone/tsbuild":"^4.4.3"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_2.2.0_1789557170889_0.9716943205745032","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@modelprofile.com/authswitch","version":"2.3.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@2.3.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"6726e757d30b413bf458d71bfb2f031b499c6602","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-2.3.0.tgz","fileCount":97,"integrity":"sha512-LBK+9L9t5LO6lyH+T1dHXHpvxz85UAxoKv7gJZ2Q6rybEwyRwESNXIJhBfoZcXTfc1yIujSyAVZob4VcCG9XAg==","signatures":[{"sig":"MEUCIQDlUg3fbW1iygjWSypAXNAbTVkfUhi6az7tuhR3YlBD0wIgWRqajo+U/4hkK5QkqPeCWHr1fNznVIHZcutQoomCxqQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":798491},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartconsole":"^1.1.0","@modelprofile.com/flexharness-models":"^7.0.1","@modelprofile.com/flexharness-providers":"^7.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"26.5.0","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.4.3"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_2.3.0_1789573130811_0.870811543306556","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@modelprofile.com/authswitch","version":"3.0.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@3.0.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"59b5883130b1bd13f40b0699a9d9354c372b2e2e","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-3.0.0.tgz","fileCount":100,"integrity":"sha512-llSA2wpNrpoLHFxqqHh8CgtnfgsZ25YGL4HW4prEs0omxPAw7GO+ErxsjyOAIOAvomW2TbC/LhKOW84DYVrGoA==","signatures":[{"sig":"MEYCIQC6xc0aNW0qB9YRBEI7/hy+uKB8yVrolkokLAkWFDdQBAIhAP6pPMlEuSokiDew7ctV2wuxor6ktKVj2SCxGaxT7ycX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":898272},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartconsole":"^1.1.0","@modelprofile.com/flexharness-models":"^7.0.1","@modelprofile.com/flexharness-providers":"^7.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"26.5.0","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.4.3"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_3.0.0_1789580830147_0.8134574410519642","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@modelprofile.com/authswitch","version":"3.1.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@3.1.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"892ee6ff3cc9d6a38e321afd980865bfee176e21","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-3.1.0.tgz","fileCount":100,"integrity":"sha512-6ALiy6m1ve92CBunUwJV/2kErZmV3uOlkQ+X2889894drcvjVVK+yJtsROCyMStGnherA3rrpCHuP8LE+foOEQ==","signatures":[{"sig":"MEUCIQCAIMFPaGf8UBqlwP85dK90a0psmX/azTNGALl7C/C1WAIgA4qpnkidkq8lrhSs4qO+22614dHNllz1LA0gw7HL4L0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":920593},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartconsole":"^1.1.0","@modelprofile.com/flexharness-models":"^7.0.1","@modelprofile.com/flexharness-providers":"^7.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.4.3"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_3.1.0_1789629027747_0.3693339238140154","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@modelprofile.com/authswitch","version":"3.2.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@3.2.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"2909541df2ea33ebebfed44000d073d5e798cd7e","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-3.2.0.tgz","fileCount":100,"integrity":"sha512-K8Uy60ZiMymvBxTJjuQGj6dClKujpqT7DHtxh10rEhW3Iapm1So30qbzD+R8fA40fGlQGTv/Ju7e8cPWa+o0yw==","signatures":[{"sig":"MEUCIARDleE+AXYDp9/qNynYNhzZtk8nV94UOxLzXznId22HAiEAhm1y15v0+ybwl4xmZ3zRs8L74ZIvx/TO784xDkPlFKc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":933443},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartconsole":"^1.2.0","@modelprofile.com/flexharness-models":"^7.0.1","@modelprofile.com/flexharness-providers":"^7.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.4.3"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_3.2.0_1789634400205_0.12467664904632292","host":"s3://npm-registry-packages-npm-production"}},"3.3.0":{"name":"@modelprofile.com/authswitch","version":"3.3.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@3.3.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"492989641e6b9b145325a8fd4e6e242548ed9303","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-3.3.0.tgz","fileCount":100,"integrity":"sha512-nGiQx1+Zvi/IkeMqcLIJ+ZfGACQeLVgRkIlCcx5t8H48LrGYhj5AbQaz0TVLwt6V5jMtXnaalUK0sLy6JgfN3w==","signatures":[{"sig":"MEUCIAe/fJXXpASDm/9QZ5wiklEmVQstYfSycLljrbXgMKy8AiEA1BGkf9zLZxluZFxVjReLoIfOs/k7I7qFUolZhho7yCI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":970077},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/flexharness-models":"^7.0.1","@modelprofile.com/flexharness-providers":"^7.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.4.3"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_3.3.0_1789644504612_0.2739128281825127","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@modelprofile.com/authswitch","version":"4.0.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@4.0.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"c00c80ecdf87b6cfc0ac61fe9860e85ef3ae0a36","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-4.0.0.tgz","fileCount":130,"integrity":"sha512-+sni3fSicUF/iLz9x8FG5fvcV/XYNsoNFwG2CglpQqWzDSykWXjCCENaJDJPAE+T0m+xO7AVZ2PPR+OBSpTZJA==","signatures":[{"sig":"MEQCIFSDJCGcZYf1VhBT/hO1QAumzTaGwdc6qBPZv+MRTWaRAiB7YQ91cD2OW7iGthRtb1K1C6mtuDtLmQH8gcj3Q+hm7Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD+M/Z+w1XZ/4WpNRsOrRShK6xBr2l2FpvXSGZG1kTLCwIhAPhXvoH4RA86cfX0LzzbGaZWxepjHKsypVj+AxxfWfao","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1276722},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@types/proper-lockfile":"^4.1.4","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/flexharness-models":"^7.0.1","@modelprofile.com/flexharness-providers":"^7.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.5.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_4.0.0_1789681184142_0.07091855203382802","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"@modelprofile.com/authswitch","version":"5.0.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@5.0.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"03e874c9352a9b529f57aca10bd9e6639c689ef3","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-5.0.0.tgz","fileCount":130,"integrity":"sha512-leT1o8FO4yc+K8MfPv64e3aUvu6TEjbf7t6ZqBxOW2MVTXx7uVYgANu1OxtzoBEDORJVM/UemXMpBNzsw6nM8w==","signatures":[{"sig":"MEQCIFmfMDUlvG4VtgFyvoLhM0jUKAApS5KjYa2jfyovlWC9AiAAuA2D4yFqgzCAomOQd2bDlccgA17kVpIB6XJI7VE1sA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIE3j5tEB6OaeczId1yjxX8Dh+JtvWva0FraFH4bbm7enAiEA0d+icj3hyG2OdHzXZ0LMsbug2oV5SJ5B+c6lfLCWlWg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1304624},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@types/proper-lockfile":"^4.1.4","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/flexharness-models":"^7.0.1","@modelprofile.com/flexharness-providers":"^7.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.5.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_5.0.0_1789732512031_0.8901825651830699","host":"s3://npm-registry-packages-npm-production"}},"5.1.0":{"name":"@modelprofile.com/authswitch","version":"5.1.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@5.1.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"bb43f5fdde36c08b81c31e81e5f66b89afdabf77","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-5.1.0.tgz","fileCount":130,"integrity":"sha512-t+tmF3TjmpC25zs8nMm4KbonPlrrwJ7UuZjzibqb8Lf7A16soEZY8kR6tnesNIv7SV9EEALQDdYW9ampIhoawg==","signatures":[{"sig":"MEUCIQC8XDD+AqrjNt11A12/KsOQC6uLYxm/SJl0QwqpyqYGcQIgQP7RmgZ3Z2ad+YAzbpQzCj8NJjvjvNPvVLuHXgPjykE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD+WjGpSLO3pcRo8/I7V7aGZBTHtjTIZvXHbt51dT4GqAIhAMUY+Hi/BOFC/IwJ/hF/Cj23MVwkfKi4t92Rykfz/vi/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1305776},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@types/proper-lockfile":"^4.1.4","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/flexharness-models":"^7.0.1","@modelprofile.com/flexharness-providers":"^7.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.5.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_5.1.0_1789732903451_0.33450171815087093","host":"s3://npm-registry-packages-npm-production"}},"5.2.0":{"name":"@modelprofile.com/authswitch","version":"5.2.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@5.2.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"05150463a4b483e3b0e6c51c718ef7e734401044","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-5.2.0.tgz","fileCount":133,"integrity":"sha512-RhNj9CE1TPBc6ngxIHN+M1zPdVjQYjvwqZMIx/mUIODaJwYq/1bJGvtoUjqWl2RSatGJG9Vg25+Lfe8EXDp4/A==","signatures":[{"sig":"MEYCIQDMPy16ErnVF/MewGKQaKUrDkb59u7bPIa8izm6IJYjMgIhAIq9RXxJZY3t9s5JIfHYVjJiKYY5uxKIRZwR34qh3ewR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDNzirrn+8Au1k7X3iLEmZmnAl/CddkiRzRNZocdD9jGQIhAKTrIh/LT1CFGU/H/valUBuiYFt4Gu8xMoazb4BdWNEI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1310021},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@types/proper-lockfile":"^4.1.4","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/flexharness-models":"^7.0.1","@modelprofile.com/flexharness-providers":"^7.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.5.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_5.2.0_1789736463129_0.2143341701994097","host":"s3://npm-registry-packages-npm-production"}},"6.0.0":{"name":"@modelprofile.com/authswitch","version":"6.0.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@6.0.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"1eed8b477c0bce6d2c24ca14c05ff819705bbd2f","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-6.0.0.tgz","fileCount":133,"integrity":"sha512-fRhpsS+TSL3xE4bM2okNWw4VfZ6B7yWhZvEJNggSZIVuOGKTgjHweeuQVKcfkpAPO7IJfkRpY/Ys64BkGf4Jiw==","signatures":[{"sig":"MEUCIHAelVCBFWKOP0OYaBsG/mi6zh5ofzRYpG1d3NzIErPuAiEA0rW38x5O1jRvninfJQXsurgvfmNesX0VlQVWScKunc8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGQfCouAg50UQqTUk4O0TRwCgmxInrRnUo+Pp+VUYYIbAiAkEUUYvtxh2ugpdyvAkG/J1UIfsnFlO7gFgZlHu9O/3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1345775},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@types/proper-lockfile":"^4.1.4","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/flexharness-models":"^7.0.1","@modelprofile.com/flexharness-providers":"^7.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.5.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_6.0.0_1789743304522_0.5099457301937267","host":"s3://npm-registry-packages-npm-production"}},"6.1.0":{"name":"@modelprofile.com/authswitch","version":"6.1.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@6.1.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"9663cd272678de7afde1b19306cc3c738db7ddd3","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-6.1.0.tgz","fileCount":136,"integrity":"sha512-8CEHFYVej3QxYyDCuSuOHTDhlXp/6ciJHJK/862V56zvaP7I5jA2N7vOnk4kjj45M2usAqorIVy5aO+K9XFxJg==","signatures":[{"sig":"MEUCIAbPtdZoJICva4n/mBUT0LutHInqshfBNQIgAR4q+MeTAiEA2NQjdDF6I0MinLnMzV4+Zp0Qs9xYdCjUGxhnwD3kRgY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDJtvZd2QTqbFvtTHKKWXcrHuMCCXz7oME729Yks9Gp+wIhAIZ68QQv4eSceXinchXXDky9+xPFed/7rhcxMWY0wh3T","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1378580},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@types/proper-lockfile":"^4.1.4","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/flexharness-models":"^7.0.1","@modelprofile.com/flexharness-providers":"^7.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.5.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_6.1.0_1789748099286_0.15066486375558874","host":"s3://npm-registry-packages-npm-production"}},"6.2.0":{"name":"@modelprofile.com/authswitch","version":"6.2.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@6.2.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"f1ed5de7e54546dba431711a1b31c3e3bf162959","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-6.2.0.tgz","fileCount":136,"integrity":"sha512-MwBuJagVMHyx7ayNR2GZIglUDQ3IWXRCtAIbYQFp11K/KewT8D2aRieHl/f+QhVdGblgv4O5ASGc8FEjlN6uLA==","signatures":[{"sig":"MEYCIQCUqPXpVAJUZMCxa6BOGrNQmHK24/F5X9jb0rg7V+SMWAIhANvK8r/Z+d9qocIBCqyrez+4HtPr2TcZiXAZ432aeOID","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBwx/IP95SSC7FNtPpRbKKG7HJcTXqI9S716ysvS8kalAiEA6Jfw3oeuoPNW4DGjuw5KCdfZ3TTV1+8jgDOvxglrxr8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1394272},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@types/proper-lockfile":"^4.1.4","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/flexharness-models":"^7.0.1","@modelprofile.com/flexharness-providers":"^7.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.5.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_6.2.0_1789811638175_0.4344911989451934","host":"s3://npm-registry-packages-npm-production"}},"6.3.0":{"name":"@modelprofile.com/authswitch","version":"6.3.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@6.3.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"9f8971ddbeffc5a3931b11475f51dc0adbf88a92","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-6.3.0.tgz","fileCount":136,"integrity":"sha512-8ws8U6Odj2TtwTwF0EjK38ri5av0P/ZV19fljQ11fkBkLm31XPMuBiGyBeNRweJzTwu3eie4TgInt37tyakB7Q==","signatures":[{"sig":"MEUCIAcbYd1xHQcNCvZ3mHIUcxrOn2TRfGInVuTb38eANSA9AiEAhV2zXW703RcAFPo9CwZ+sa0l4Tkht1OOuayHsRRNNt4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAxeOQ9wfnQ8NjkIvK+aHBKWPP5Wxls3uGRS5iqV+JG1AiEAiDKLESfdokyKhWg/N+Q7Zvyq95Sv7/BlQtsHWpZqDSc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1462367},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@types/proper-lockfile":"^4.1.4","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/flexharness-models":"^7.0.1","@modelprofile.com/flexharness-providers":"^7.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.5.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_6.3.0_1789821652624_0.6091335317665816","host":"s3://npm-registry-packages-npm-production"}},"6.4.0":{"name":"@modelprofile.com/authswitch","version":"6.4.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@6.4.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"c84c28f534c5d8b61b35f9fe2bd10f35daeb2d63","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-6.4.0.tgz","fileCount":166,"integrity":"sha512-bKzs9HOYLbqe9L/EajjvlTgAjhl4HUZayOBocb44t8Jg7wGpBIBbdXQp1+qLAelq5QhEa+MtY4D7qeWefpQ5Zw==","signatures":[{"sig":"MEYCIQCzYiVyr7i8FwOgDU/N5Tza1l4rGztj0y/cIOlbk8ZiMwIhALFJPM8hMTIFuLfkhFA/B4gztTuilHN0XgAw2Q1A/N89","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIH4q3vQH4tJL9Aumn+EBPQnrrwOi73bWvgC4FSARCTtqAiAEES6pFwHySWR1qLhr2350Jsi+KtA44CZ2kNFqwQskGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1958902},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@push.rocks/smartdb":"7.0.1","@push.rocks/smartdata":"11.14.2","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.7.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^8.0.0","@modelprofile.com/flexharness-providers":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.5.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_6.4.0_1789849423865_0.9270099144532384","host":"s3://npm-registry-packages-npm-production"}},"6.5.0":{"name":"@modelprofile.com/authswitch","version":"6.5.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@6.5.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"18ed24ebc0653c10d26f8d6d06b7dcd5c7e07a42","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-6.5.0.tgz","fileCount":169,"integrity":"sha512-5XZ89Z+14g3YplOCgapPoWCkk3ONmWGRZSchc/l1r8CYG2VTKyGolXI1EjTReXQGJaMFVZDX1ZLX4uqTdN4cEA==","signatures":[{"sig":"MEUCIQDH6jzc/1GQj0UleY1OUjVK2tdVjlhDlFLUXEbOSUK3hAIgfdBaCXVVQ5eFtQXqGDC6t5CRh1KTlHMLDCBRD0FC+oE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDWbzox3tmJRhXwaeNBMDoYEayppjIsHkea29MA5imrHgIhAI0S0beJQtd87tA+8bSJv9JNIMGwzQ70ZVpj56DGsN9i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2110012},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@push.rocks/smartdb":"7.0.1","@push.rocks/smartdata":"11.14.2","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.7.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.4.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^8.0.0","@modelprofile.com/flexharness-providers":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.5.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_6.5.0_1789853811595_0.9215261086285806","host":"s3://npm-registry-packages-npm-production"}},"7.0.0":{"name":"@modelprofile.com/authswitch","version":"7.0.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@7.0.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"1af10e365f2387509a880e1ea68773c95536aa18","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-7.0.0.tgz","fileCount":202,"integrity":"sha512-okRnH98iZDN2pR/DH7Kzk0Byvpjg96ox686hEa3tDL1gG9k2AMzUacDwo2LaoiowOH2tP7HkaOaJMlZNELv7Ig==","signatures":[{"sig":"MEQCIAr3VxW1UOOGCjQlL1X43GuLEnKjc4iaUyiuZ1aFqJgGAiA25ntEk0Gg7br+kl2tJiKNnx4YdPZeoRYi/WxdW0qxYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCID+Lhly+N0eREdbx6ijRzV944ixMYtsMQC5mhwAfel/PAiBk4vgtQqBiYAAwjKYfDZQTb6vf89yv/or4HLqmILkjjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3530196},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@aws-sdk/client-s3":"3.1131.0","@push.rocks/smartdb":"7.0.1","@lossless.org/client":"1.2.0","@push.rocks/smartdata":"11.14.2","@types/proper-lockfile":"^4.1.4","@push.rocks/smartcrypto":"2.2.0","@push.rocks/smartdaemon":"2.7.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.4.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^8.0.0","@modelprofile.com/flexharness-providers":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.5.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_7.0.0_1789913461160_0.6785386816579635","host":"s3://npm-registry-packages-npm-production"}},"8.0.0":{"name":"@modelprofile.com/authswitch","version":"8.0.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@8.0.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"4bd7a98a2d3a1958896640c24a54390627f151ee","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-8.0.0.tgz","fileCount":196,"integrity":"sha512-qjdPenM04/1itr34somLCOruNdJP3oF60ROiyEQFYEcXJC8LN10FvBVvpin3d6Q6SdyxcvGBq9++DThVnsNocQ==","signatures":[{"sig":"MEUCIQDX6IKTNk+Kny1uCTYA9ymZtJj9nKLv0QN1tr7kcJtglQIgMZQEk5ud+G0rHgb1y2NuKXZKe6N2By7iuszLVpL9H0I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCmfEb/5TROESMg224F6Lz3H3eayLkgsJBqLr79QovDGwIgWFuGnKZRsF1WekeACb0sNKnHvpQR3XXvFnBauqU0kQE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3205273},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.2.0","@lossless.org/nosqldb":"10.3.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.7.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.4.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^8.0.0","@modelprofile.com/flexharness-providers":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.5.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_8.0.0_1789992440577_0.4955972295024036","host":"s3://npm-registry-packages-npm-production"}},"8.1.0":{"name":"@modelprofile.com/authswitch","version":"8.1.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@8.1.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"600d5b9244af9941f633dac33ef00eb732fdea66","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-8.1.0.tgz","fileCount":217,"integrity":"sha512-dbhezly1SroSYp3ROjRu9LpFeye30g9XPY1ygDowzEhx7oi90b+5k2/lzzN5vm/CazocPZfr1IoPWgBLWx9Y6g==","signatures":[{"sig":"MEUCIQD5ASF1NlYWwvZwCMtDn8uupygmPXFvtLo46SvJ/4RVEwIgfqtL0skC7vUH6kefrLqLnALJQa6PnC10FDFubu22k2M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDL2oU7/X4CDESBXOmQgBc24Qa2reFnk6vntz1GUJW2EwIhAN5bRqBHVnPtG/LHDEpGvYg9CHNqB3mqJXHQ3lSCBJg6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3524297},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.2.0","@lossless.org/nosqldb":"10.3.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.7.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.4.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^8.0.0","@modelprofile.com/flexharness-providers":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.5.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_8.1.0_1790002257173_0.25087050733926786","host":"s3://npm-registry-packages-npm-production"}},"8.2.0":{"name":"@modelprofile.com/authswitch","version":"8.2.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@8.2.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"dfce3b61d7a378596dec260a55c910f8bceb1091","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-8.2.0.tgz","fileCount":220,"integrity":"sha512-VOb8BDV4cT96KlYfpdyAdR3swF2j2I4EK6dPrERwVzCAT74aUDt6faOOQFQ2ERo5I8N2shq3JrupkOpjrI+kqw==","signatures":[{"sig":"MEUCIEaRrQU9T4IA1Gbb0rVaCEllKcPztRW7V/jNbcX7zkH8AiEAy12NcEo3wmul+QxpviRL4vjjq6MDzytG2tfwUd2afI0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEDHG/mE7cM1/FJkxXHF2EaDJa3XtKgx2K74m2UxsB9fAiAmFF6WDw7jvMMCDLyORQgHfo70HrSzZwkNUde3USa8uQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3586501},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.2.0","@lossless.org/nosqldb":"10.3.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.7.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.4.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^8.0.0","@modelprofile.com/flexharness-providers":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.5.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_8.2.0_1790068377108_0.1032993467199721","host":"s3://npm-registry-packages-npm-production"}},"9.0.0":{"name":"@modelprofile.com/authswitch","version":"9.0.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@9.0.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"4b344a5f99052114439401eef7bb2a8cf3a80a0b","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-9.0.0.tgz","fileCount":226,"integrity":"sha512-q0THlkr/aZk3BQVTkvHgz/REU3V0AedbxqdpAK0OD6rKZzAUEiMuvO5zQjTXAdymeM2k+Q38EIHTcmu5AoHIUA==","signatures":[{"sig":"MEUCIQDejyYYrvliHiTi7fzuGbygbSpGhKN1tuRHdJyWvWu6ewIgA6TUS0P02bcXWYx7x0boE+D3OlWTgmVfoORJLX7Sp+o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICxEaa3KdDUm2Ad5bfGT5nOIwYYF8V7ikYlxG3i0dkmvAiEAyhfE3VeENap7L5tiSI3gS6Zmg5FEBS6yc1ucIRIrwdU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3690652},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.2.0","@lossless.org/nosqldb":"10.3.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.7.2","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.5.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^8.0.0","@modelprofile.com/flexharness-providers":"^8.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.1","@git.zone/tsrun":"^3.0.0","@git.zone/tstest":"^6.2.1","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_9.0.0_1790365020134_0.4057778170688977","host":"s3://npm-registry-packages-npm-production"}},"9.1.0":{"name":"@modelprofile.com/authswitch","version":"9.1.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@9.1.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"e1bb6a68ea22733ae1f4da593a44449dec4f3465","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-9.1.0.tgz","fileCount":232,"integrity":"sha512-ntRSh3ONzOLDvt8AEx2S+Nieb8URJ+RYPz+Ptny5iSAVEFOPd6VxOpOZjZKESiKIrPERv27w1SsS6QwZNJU6Sw==","signatures":[{"sig":"MEQCIHsqPV1gU8YmfUsx7CogmvvUmqTrYnnordIN/X24yApCAiBIF9n+wkt4IgMLdQrsyJpbyO0KAk8jxWZ9E8nptLJHog==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGMmVC9zThwyGnDigCbPOldw1vNOVAiqyqRz7UrmHLAqAiEAov+BJzoq9M8v9+GFP9mQeB65hqo5GTLbqrD0MBLPEoQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3783283},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.7.2","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.0.0","@modelprofile.com/flexharness-providers":"^9.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.0","@git.zone/tstest":"^6.3.0","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_9.1.0_1790414280876_0.3831923218783597","host":"s3://npm-registry-packages-npm-production"}},"9.2.0":{"name":"@modelprofile.com/authswitch","version":"9.2.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@9.2.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"e61c90228e8f80a206286613e999ab06d20dc41c","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-9.2.0.tgz","fileCount":232,"integrity":"sha512-eeYxeAyeyCo4kXVwHxRpeJ1WdPtAz61gpZc9iOm8moS9Kqp/QlCzLVnjDAw0gYLKQ+dgS/NOrmXr9Zl9kInseQ==","signatures":[{"sig":"MEYCIQD8h/7zirUC9jaQUVKO/w9mPJYKxtX7Fp6M1dlHXJ95CwIhAOV7DgBxmA2mpUCIlH6Jm9UWmPRmqsCHwc8nxpWYfXEk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCd3TlnehnNwRpl0kq2bGQch3n3IQPJrOvEgr9380iEeQIhAJtiJYRpxOmiBF0WS+8DAFtfy/VeeoDRE64wnwKcxa3K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3805845},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.7.2","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.0.0","@modelprofile.com/flexharness-providers":"^9.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.0","@git.zone/tstest":"^6.3.0","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_9.2.0_1790430394685_0.25118636349673307","host":"s3://npm-registry-packages-npm-production"}},"10.0.0":{"name":"@modelprofile.com/authswitch","version":"10.0.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@10.0.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"3adac44c3846cab01e8fd74473e101103bf2e47c","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-10.0.0.tgz","fileCount":246,"integrity":"sha512-cZPB1j4BEXdOvT3DOM0Ci/rdqoNaj1/kIX8Eh6GK88SW+sX/zYaGRabhUc8f0JyhyRvy58wfINb8GocPMkVr6A==","signatures":[{"sig":"MEYCIQCBCuyualOLVVg4w4j+abMlUYYYFuIAvywtO/8WzaDnzwIhAMmeMq0dLhx4BxZfnYR95nY3f+rpKwB0yW1ZDQgkRK1i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC8Le0eTGxFPZ8iwbJPBOHjWbJ1A6WA8OPPBvW8J1CaGgIhAO0aHb3VBHSL3/YbetMpAFs+nBq6GYLBITv6CjnBl2h3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4051127},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.7.2","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.3.1","@modelprofile.com/flexharness-providers":"^9.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.0","@git.zone/tstest":"^6.3.0","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_10.0.0_1790452420300_0.03688865785374462","host":"s3://npm-registry-packages-npm-production"}},"10.0.1":{"name":"@modelprofile.com/authswitch","version":"10.0.1","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@10.0.1","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"07aad01f797976a6f0513b7b1c21fc7281c64097","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-10.0.1.tgz","fileCount":246,"integrity":"sha512-62KulzHBX9J2MlryQCofRGDLzlet8xZsC8XUklrF/3XlErUMUd5y/DqaEFzE9B0gfnGLp5JChaVA4r4krr/iUw==","signatures":[{"sig":"MEQCIBUdJ5M99OoedL1Ojo3sKGquXmQMQMbufCaWMLqf3on2AiBM+udh2wFnvi3cP3iv8XGm4/zQDGVIqH/ZFVeZbiA/2Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDR4bcSWkxKJfeomIZLF/TkZpu4GnIIzSmk/SPxN8xzXQIgG8z12wpX0jubfAbrBYSL901NuGbdD8W39im/E5RcaTc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4089630},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.7.2","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.3.1","@modelprofile.com/flexharness-providers":"^9.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.0","@git.zone/tstest":"^6.3.0","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_10.0.1_1790453791944_0.1779171576702716","host":"s3://npm-registry-packages-npm-production"}},"10.1.0":{"name":"@modelprofile.com/authswitch","version":"10.1.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@10.1.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"f7a209b10bb980b6a623d046166f68b478a67313","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-10.1.0.tgz","fileCount":252,"integrity":"sha512-1Cb/I1wMxmEqYfLOY8IkAUEWUsaQkGj6Povx2MmoGKmOm/cSDpycXA52ywqgkBzl0l4A6nwSauzJZi0O/RZ0JA==","signatures":[{"sig":"MEQCIG8cB6vVcGyFITwPtBp+4l1J8FRyHF33tJi0jhcWJw0FAiBRMq7EQD9/Jw5ZMbwsQMG6LtdIqkbe/NE7XbWX4dpaFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCHTDU3rOeOyrFbzkU6jPMm34Mn5kWYzrDvdfTR1O9ncgIgdVhKq/t+IEyu0TCQozINJZYWC/vCNGOPp+9Ll6+gFwc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4093813},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./preuse-text":{"types":"./dist_ts/preuse-text.d.ts","import":"./dist_ts/preuse-text.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.7.2","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.3.1","@modelprofile.com/flexharness-providers":"^9.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.0","@git.zone/tstest":"^6.3.0","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_10.1.0_1790464531567_0.5057637339684211","host":"s3://npm-registry-packages-npm-production"}},"10.2.0":{"name":"@modelprofile.com/authswitch","version":"10.2.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@10.2.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"ac8da20de9ac55ee9137a79291f92931c452aa6e","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-10.2.0.tgz","fileCount":261,"integrity":"sha512-bYeuHbmARFpTZmXUVTnG7dmADadEhMszhOX3KEwTZxVs9dgpk1n9/BxbxzPfUIFqHzPO8MkddnH5O7EfiRfKbg==","signatures":[{"sig":"MEUCIBpsd2q61DuMOkhYzUuwnP39QCrIWF0iEZ6sfMWv0vZAAiEA+JtiTkghcWJGe2s6ya52jnTNhL4vDThMElVFpTKXj1A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDiOdaPQzGd7nN60xeAnc+p8uLGdA889ikrm/6QuwuaagIhAKPIRtzcBmBpBEszWRsqFUTPbOq6W7x+5Z/7KqnXzw4l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4500346},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./preuse-text":{"types":"./dist_ts/preuse-text.d.ts","import":"./dist_ts/preuse-text.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.7.2","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.3.1","@modelprofile.com/flexharness-providers":"^9.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.1","@git.zone/tstest":"^6.3.2","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_10.2.0_1790522221285_0.5466861830946419","host":"s3://npm-registry-packages-npm-production"}},"10.2.1":{"name":"@modelprofile.com/authswitch","version":"10.2.1","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@10.2.1","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"5683c27493910fae03febb343f555e57ad700156","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-10.2.1.tgz","fileCount":264,"integrity":"sha512-EaJWihIUIfmj8QeFyW7/gAQWpxtgnUZ6qo64tZuWQlyOxeHd3SEhEEIogiPk03RypdiaawLMouOz+WuGw09Wdg==","signatures":[{"sig":"MEUCIQDuK3z0M4onbsSeJND0mWgeQcrORhD4W57oBkAh/okUoAIgSgHHAVhvBi9bDweAHZLcLOGTK2XRrd+mVZKJpZRIVhw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIC54egEciQ6cWEEQqg8felDp2Vb1kYglux7yxI5gmDdIAiAPbPcd/T+WK41VI1xjWoTvLL/Vsk4sf0Vhst33Qleb5A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4514293},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./preuse-text":{"types":"./dist_ts/preuse-text.d.ts","import":"./dist_ts/preuse-text.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.9.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.3.1","@modelprofile.com/flexharness-providers":"^9.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.1","@git.zone/tstest":"^6.3.2","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_10.2.1_1790524462803_0.7676692426586018","host":"s3://npm-registry-packages-npm-production"}},"10.3.0":{"name":"@modelprofile.com/authswitch","version":"10.3.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@10.3.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"78db25de4d67cfedf8da00d68889dedc8c76a33b","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-10.3.0.tgz","fileCount":276,"integrity":"sha512-vJfpvjZLOgtJ1YLcJLT3rrb1kdZhueb7meWHLdDg+evyP8K0cn3UiGDzG1MhbkR3G5uu9DmxRC6/zGKIfnI8rA==","signatures":[{"sig":"MEYCIQCR3Oo2g0pJwBTRNmYeVwRO8w3JINCGScm69iXEwMXXwgIhAI5zuTJ4QfX9ogZ7/7SL4VUSaAbp5RfWjPxzJ/sjLngC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHLLc20QLs6Uz7Ha8zJLJ/2EkrKgjId4Dsknifvqk6iBAiEA0NkM7v+enzijOxgWhyE2dtWO3duM9ZSKCEsLF048Zho=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4625873},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./preuse-text":{"types":"./dist_ts/preuse-text.d.ts","import":"./dist_ts/preuse-text.js"},"./testsupport":{"types":"./dist_ts/testsupport.d.ts","import":"./dist_ts/testsupport.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.10.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.3.1","@modelprofile.com/flexharness-providers":"^9.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.1","@git.zone/tstest":"^6.3.2","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_10.3.0_1790547507719_0.5252023385207616","host":"s3://npm-registry-packages-npm-production"}},"10.3.1":{"name":"@modelprofile.com/authswitch","version":"10.3.1","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@10.3.1","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"764e7b48b4f039130236d61e349d0d7457300303","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-10.3.1.tgz","fileCount":276,"integrity":"sha512-8yMtm6kYzzcXH3zCNNqLgF+zr8pn0r2+kMVFLX6P/Tqv8QkbWy+yNVA4Qk6XV3nCpjFAH6WxcaZUZafhFC05yQ==","signatures":[{"sig":"MEUCIQDBx4eSFLyZwv55eITYNM/Yf+jouqPRMkEO8nCKs234xAIgR/mkUIlc14VRZRvhCbFMIC6VZaM4fqmwOV40MAfZUSo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDxayjMz9gtm7idvb8NpjwBcop+2VG5VOeq0CcW6ffXFwIhAKtwsLbhf8QdqgZHASseXL8z457GxbcKFYPIjppcBhcg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4640116},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./preuse-text":{"types":"./dist_ts/preuse-text.d.ts","import":"./dist_ts/preuse-text.js"},"./testsupport":{"types":"./dist_ts/testsupport.d.ts","import":"./dist_ts/testsupport.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.10.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.3.1","@modelprofile.com/flexharness-providers":"^9.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.1","@git.zone/tstest":"^6.3.2","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_10.3.1_1790550620130_0.5146792889334404","host":"s3://npm-registry-packages-npm-production"}},"10.4.0":{"name":"@modelprofile.com/authswitch","version":"10.4.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@10.4.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"95165f7a206a7c2ded1f7d6a9b485a8b19ef462a","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-10.4.0.tgz","fileCount":296,"integrity":"sha512-TUC+gdZMBdUd8zuDt4nUOGKr+SgsD8IjhDgBieUXaNSL37qhE3DPRI67dLJUUT1CaBjFDUX4mi48+jJgGP48Mg==","signatures":[{"sig":"MEYCIQCyWLjvJN4tfe+5J/Da2xGTy8t+BKG3oNGIHkgKVi7INwIhAOY+A98S0BjvvjdxCFRm/9/CKJoc7SsN6w600qGEetah","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIECcGTr+bGMHray/tuxkCZc0xvyQe7aYHbuhcSjc4+UMAiEA7Ft9gez/VOhzlNzDrazwiYSTrN+6ZvaDu/ZwFAbj9Cg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4766341},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./preuse-text":{"types":"./dist_ts/preuse-text.d.ts","import":"./dist_ts/preuse-text.js"},"./testsupport":{"types":"./dist_ts/testsupport.d.ts","import":"./dist_ts/testsupport.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild tsfolders)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.10.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.3.1","@modelprofile.com/flexharness-providers":"^9.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.1","@git.zone/tstest":"^6.3.2","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_10.4.0_1790586165651_0.06095809216909931","host":"s3://npm-registry-packages-npm-production"}},"11.0.0":{"name":"@modelprofile.com/authswitch","version":"11.0.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@11.0.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"1951a8b1ffe5ae64d08e1c12e3a36f9552a5e03e","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-11.0.0.tgz","fileCount":296,"integrity":"sha512-mqw1y9CpMCg/QRi+yumIGxnaaWnD+kSnoPCrZ6VLftqQGAtOsZzwDlW02k2umwZTRNaOmM2p/MlF63QVJDZz/Q==","signatures":[{"sig":"MEUCIQDMpYtDKfOFsn/pc3+GP4SY6S3mSrVK1Tl8KjwuU6sGjgIgKGOeNelBBJsBs2jZok/VA7RsVxvhfKCuQrPGXOolpD4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFwwd93oUzscM3bJCRTF16RUpzmbR+hWHMtf6RJqP0w6AiEA4J8A84nCNhq+WJPGvru6iH2U5YI0qMy3T2ZxTZAcMbU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4906953},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./preuse-text":{"types":"./dist_ts/preuse-text.d.ts","import":"./dist_ts/preuse-text.js"},"./testsupport":{"types":"./dist_ts/testsupport.d.ts","import":"./dist_ts/testsupport.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild tsfolders)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.12.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.3.1","@modelprofile.com/flexharness-providers":"^9.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.1","@git.zone/tstest":"^6.3.2","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_11.0.0_1790595238899_0.27498059461750435","host":"s3://npm-registry-packages-npm-production"}},"11.1.0":{"name":"@modelprofile.com/authswitch","version":"11.1.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@11.1.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"687a58f8e986575eae61c83bf8fd6304141085d7","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-11.1.0.tgz","fileCount":296,"integrity":"sha512-WcO8JoQep5/Kju5tC2OznK55KCkAOuiijDT9MLcOa/nfuj/kBS62ZtY/O7cKcqcoA3mQP5ipZXajyhTXiL4gUw==","signatures":[{"sig":"MEUCIAYBixls/bhXCAVcOhveaBjJmF7XlHER0COx1g3s9u7DAiEAztoKTwhULswHM8ra25SS6pVPTEkp7B9bueSNATYf4Tc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDWsDdG8savFW28uVdML/uuG66yfbn236E+MX1Wq08ugAiAQjaI5Ty50Eq9x4PFPaGlagp2npH+e56IvL4W3xJWSQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4930652},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./preuse-text":{"types":"./dist_ts/preuse-text.d.ts","import":"./dist_ts/preuse-text.js"},"./testsupport":{"types":"./dist_ts/testsupport.d.ts","import":"./dist_ts/testsupport.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild tsfolders)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.12.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.3.1","@modelprofile.com/flexharness-providers":"^9.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.1","@git.zone/tstest":"^6.3.2","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_11.1.0_1790604604744_0.7409759022182434","host":"s3://npm-registry-packages-npm-production"}},"11.1.1":{"name":"@modelprofile.com/authswitch","version":"11.1.1","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@11.1.1","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"129d25ba8727035b161ad1c76867ef2b5cedfcec","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-11.1.1.tgz","fileCount":296,"integrity":"sha512-WhctHLJhSgKD9NE3j1yJhofsR9LY9AThrcDoVMdDjNKv5xUZN/MoseLF3e9MMfHz9SavSl+fHcjESZABOYbvQQ==","signatures":[{"sig":"MEYCIQD+cxROd8VQlG8yJrNrOO53GQCbd1XskdOJnat+WkukfAIhAP7DnV+mZYw36b0UU5UFMBeY6D/yROFXBD3LA4+vSXt0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDV9o6Jc+Nh86Yoc0Fsx7O1tqvmmsB4I63mHvWkQAIkeQIgfGemXHKvlCnnbAWvs0zvtdpYylB0Suvyx66VfVYF+f0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4940684},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./preuse-text":{"types":"./dist_ts/preuse-text.d.ts","import":"./dist_ts/preuse-text.js"},"./testsupport":{"types":"./dist_ts/testsupport.d.ts","import":"./dist_ts/testsupport.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild tsfolders)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.12.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.3.1","@modelprofile.com/flexharness-providers":"^9.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.1","@git.zone/tstest":"^6.3.2","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_11.1.1_1790613017584_0.5487433242275166","host":"s3://npm-registry-packages-npm-production"}},"11.1.2":{"name":"@modelprofile.com/authswitch","version":"11.1.2","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@11.1.2","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"7e4d693f5b2ceca29ef57aff41d910f9172ed3b3","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-11.1.2.tgz","fileCount":296,"integrity":"sha512-wye9HTGByMWHkABrlIe1HmdSN7Y+rq0tAZxtmQvHuJ7c8SIEV5O2ybTLnT61BI4TdqOjcmN7TRNCQDx65N3RYg==","signatures":[{"sig":"MEUCIHqnC8mdtE0klb7MjBu8TbM1rbWQQYVRF9I3a9fF9A7EAiEAoWFNunrdEoNE//SNVqeS50lRsbV4+yCexnXZV7o1fnA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDkJSROtuU9t+LKVYTRIh+RDxwDS5ijvY2o9x9etgblzwIgaAmuCrqTgUUnYr8j54XPsO7asWo+7DziUIMMD4sCEf4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4941411},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./preuse-text":{"types":"./dist_ts/preuse-text.d.ts","import":"./dist_ts/preuse-text.js"},"./testsupport":{"types":"./dist_ts/testsupport.d.ts","import":"./dist_ts/testsupport.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild tsfolders)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.12.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.3.1","@modelprofile.com/flexharness-providers":"^9.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.1","@git.zone/tstest":"^6.3.2","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_11.1.2_1790616682495_0.9764274465828187","host":"s3://npm-registry-packages-npm-production"}},"11.2.0":{"name":"@modelprofile.com/authswitch","version":"11.2.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@11.2.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"79defc1ac6f761d4cc45fe5535cc78edacd47c09","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-11.2.0.tgz","fileCount":302,"integrity":"sha512-TkrfUq82kgb3Jj+IALMM7EI2G7eLjEnmH0qmuFNv8goZwkD7NCNW5Mvqvk4swSOpfbNn3PlXSBeHIDg38Pcilg==","signatures":[{"sig":"MEQCIHTGgemyklnwTOn7H4Clqhz+F3sXVvFwgWi58C5xNfAbAiBUf1P5E8T9dPgoN7gDKQicKl4zzILx8y/6avUBQ1+j3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAVfKU5xLOuONCG1SW9PKOn4rBxc4scNJVZGSMOsKmpxAiEA5uDp8ZecdXP9QKoJM3LxRKQr4SxMLxvtMao6vtCL68o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5083887},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./preuse-text":{"types":"./dist_ts/preuse-text.d.ts","import":"./dist_ts/preuse-text.js"},"./testsupport":{"types":"./dist_ts/testsupport.d.ts","import":"./dist_ts/testsupport.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild tsfolders)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.12.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.3.1","@modelprofile.com/flexharness-providers":"^9.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"8.21.2","esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.2","@git.zone/tstest":"^6.3.2","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_11.2.0_1790679647928_0.19555376167954308","host":"s3://npm-registry-packages-npm-production"}},"11.3.0":{"name":"@modelprofile.com/authswitch","version":"11.3.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@11.3.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"ada9b542b12fe31eb47b0d01842edb74e980bcbc","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-11.3.0.tgz","fileCount":314,"integrity":"sha512-sAjDZsMwavpZwx2iGE8jYtstJfb74/5rM8G+WSnT0pm0rpTcO/J6Xs+mezQJFurX0SLZBIqXPFBEH1Unfd/9Uw==","signatures":[{"sig":"MEQCIAO5fCTdhUE5kFMSO8WPXCYv2iFqo2Ds2myyUm99wN2PAiAZMynx+DAqThfR00w3AXSwcgkiwMLNayhIb1YRelsBqw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDuAkw8aZrDkPfTByoc86jk1uS2i/YizSn8TRNYg7IQ6wIgAMvEij9eAQQuw08ShcQ5n0gcXsx/RtLFDK5akZvku+E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5498589},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./preuse-text":{"types":"./dist_ts/preuse-text.d.ts","import":"./dist_ts/preuse-text.js"},"./testsupport":{"types":"./dist_ts/testsupport.d.ts","import":"./dist_ts/testsupport.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild tsfolders)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"ws":"8.21.2","proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.12.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.3.1","@modelprofile.com/flexharness-providers":"^9.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.2","@git.zone/tstest":"^6.3.2","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_11.3.0_1790693306453_0.7957187446011098","host":"s3://npm-registry-packages-npm-production"}},"11.4.0":{"name":"@modelprofile.com/authswitch","version":"11.4.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@modelprofile.com/authswitch@11.4.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/modelprofile.com/authswitch","bugs":{"url":"https://community.foss.global/"},"bin":{"authswitch":"./cli.js"},"dist":{"shasum":"de2c20711cd5020fd62742775cbaf5e31fbac4ff","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-11.4.0.tgz","fileCount":314,"integrity":"sha512-I3y4hxr9kEgNluE6Mk80MdVNaxq7WM2MjaKPaB+V05FFiXv3MQdVXFQYi0hyZNhYVOz3m23/5FLHb5m78tHo8g==","signatures":[{"sig":"MEUCICi7fTS+h8JlVXpD48uEhdJZoPavxHl2BOLalXBI2U0fAiEAhxJAKju54ylS/8/corUKvDjXOMytlDiQ4OzwNzLbqCY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIH0Bg/ys1D22GybLO0qU3HotxYZCtlZG5YL2bcMYW/s7AiAbFrhokREWq5RccSEOorDv/Ks4aNPpX7bo/7q9GRGGFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5508852},"main":"dist_ts/index.js","type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./preuse-text":{"types":"./dist_ts/preuse-text.d.ts","import":"./dist_ts/preuse-text.js"},"./testsupport":{"types":"./dist_ts/testsupport.d.ts","import":"./dist_ts/testsupport.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild tsfolders)"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"ws":"8.21.2","proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.12.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^1.3.0","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.3.1","@modelprofile.com/flexharness-providers":"^9.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.2","@git.zone/tstest":"^6.3.2","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authswitch_11.4.0_1790712593265_0.7538908876663188","host":"s3://npm-registry-packages-npm-production"}},"11.4.1":{"_id":"@modelprofile.com/authswitch@11.4.1","bin":{"authswitch":"./cli.js"},"bugs":{"url":"https://community.foss.global/"},"dist":{"shasum":"21eb8982899a47f7b8f6a8af383dde08248cb2f8","tarball":"https://registry.npmjs.org/@modelprofile.com/authswitch/-/authswitch-11.4.1.tgz","fileCount":314,"integrity":"sha512-U4W8ncvceQvzvIA43CKqBa2R9JWYpVhLwXQAXkoWdNr25vXMr4s2rdxij/fVYZ2Y9Wkq8/PPDI3A4JZjCzUBRQ==","signatures":[{"sig":"MEUCIQD+sZRgb6APnQS7XMRgB2ilO58SowdO54dRfKSByWY9PAIgej9SY871Xhg28zev3qVNpbG5LvOTmn3ea0QAeaPKfkE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCds4n3X0MQyk5BEFN+fvE/7Mr5teWV5jArbvfFdIek5AIgDBLZNz1B/r7oKC5cGY5u/XnrFBKUrKwj79J+stC+xEk="}],"unpackedSize":5508880},"main":"dist_ts/index.js","name":"@modelprofile.com/authswitch","type":"module","author":"Task Venture Capital GmbH","engines":{"node":">=24"},"exports":{".":{"types":"./dist_ts/index.d.ts","import":"./dist_ts/index.js"},"./mutation":{"types":"./dist_ts/mutation.d.ts","import":"./dist_ts/mutation.js"},"./preuse-text":{"types":"./dist_ts/preuse-text.d.ts","import":"./dist_ts/preuse-text.js"},"./testsupport":{"types":"./dist_ts/testsupport.d.ts","import":"./dist_ts/testsupport.js"},"./authority-client":{"types":"./dist_ts/classes.authorityclient.d.ts","import":"./dist_ts/classes.authorityclient.js"},"./authority-daemon":{"types":"./dist_ts/classes.authoritydaemon.d.ts","import":"./dist_ts/classes.authoritydaemon.js"},"./authority-contract":{"types":"./dist_ts/authority-contract.d.ts","import":"./dist_ts/authority-contract.js"},"./authority-import-contract":{"types":"./dist_ts/authority-import-contract.d.ts","import":"./dist_ts/authority-import-contract.js"},"./authority-runtime-contract":{"types":"./dist_ts/authority-runtime-contract.d.ts","import":"./dist_ts/authority-runtime-contract.js"}},"license":"MIT","private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild tsfolders)"},"typings":"dist_ts/index.d.ts","version":"11.4.1","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"homepage":"https://code.foss.global/modelprofile.com/authswitch","repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","directories":{},"maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"browserslist":["last 1 chrome versions"],"dependencies":{"ws":"8.21.2","inquirer":"^12.11.1","proper-lockfile":"^4.1.2","@lossless.org/client":"1.6.0","@lossless.org/nosqldb":"10.6.0","@types/proper-lockfile":"^4.1.4","@push.rocks/smartdaemon":"2.12.0","@push.rocks/smartsecret":"1.8.0","@api.global/typedrequest":"8.1.0","@push.rocks/smartconsole":"^2.0.1","@modelprofile.com/mcp-crossharness":"5.6.0","@api.global/typedrequest-interfaces":"7.1.0","@modelprofile.com/flexharness-models":"^9.3.1","@modelprofile.com/flexharness-providers":"^9.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","@types/ws":"8.18.1","@types/node":"26.6.2","@git.zone/tsrun":"^3.0.2","@git.zone/tstest":"^6.3.2","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/authswitch_11.4.1_1790894379487_0.5623620673186398"}}},"time":{"created":"2026-09-13T15:55:17.195Z","modified":"2026-10-01T22:39:39.850Z","2.1.2":"2026-09-13T15:55:17.539Z","2.1.3":"2026-09-13T16:08:04.489Z","2.2.0":"2026-09-16T11:12:51.024Z","2.3.0":"2026-09-16T15:38:50.980Z","3.0.0":"2026-09-16T17:47:10.318Z","3.1.0":"2026-09-17T07:10:27.892Z","3.2.0":"2026-09-17T08:40:00.341Z","3.3.0":"2026-09-17T11:28:24.777Z","4.0.0":"2026-09-17T21:39:44.240Z","5.0.0":"2026-09-18T11:55:12.124Z","5.1.0":"2026-09-18T12:01:43.549Z","5.2.0":"2026-09-18T13:01:03.246Z","6.0.0":"2026-09-18T14:55:04.626Z","6.1.0":"2026-09-18T16:14:59.393Z","6.2.0":"2026-09-19T09:53:58.278Z","6.3.0":"2026-09-19T12:40:52.737Z","6.4.0":"2026-09-19T20:23:43.958Z","6.5.0":"2026-09-19T21:36:51.713Z","7.0.0":"2026-09-20T14:11:01.280Z","8.0.0":"2026-09-21T12:07:20.686Z","8.1.0":"2026-09-21T14:50:57.284Z","8.2.0":"2026-09-22T09:12:57.255Z","9.0.0":"2026-09-25T19:37:00.248Z","9.1.0":"2026-09-26T09:18:01.007Z","9.2.0":"2026-09-26T13:46:34.801Z","10.0.0":"2026-09-26T19:53:40.398Z","10.0.1":"2026-09-26T20:16:32.050Z","10.1.0":"2026-09-26T23:15:31.685Z","10.2.0":"2026-09-27T15:17:01.403Z","10.2.1":"2026-09-27T15:54:22.916Z","10.3.0":"2026-09-27T22:18:27.829Z","10.3.1":"2026-09-27T23:10:20.293Z","10.4.0":"2026-09-28T09:02:45.820Z","11.0.0":"2026-09-28T11:33:59.038Z","11.1.0":"2026-09-28T14:10:04.932Z","11.1.1":"2026-09-28T16:30:17.720Z","11.1.2":"2026-09-28T17:31:22.645Z","11.2.0":"2026-09-29T11:00:48.046Z","11.3.0":"2026-09-29T14:48:26.588Z","11.4.0":"2026-09-29T20:09:53.418Z","11.4.1":"2026-10-01T22:39:39.663Z"},"bugs":{"url":"https://community.foss.global/"},"author":"Task Venture Capital GmbH","license":"MIT","homepage":"https://code.foss.global/modelprofile.com/authswitch","repository":{"url":"git+https://code.foss.global/modelprofile.com/authswitch.git","type":"git"},"description":"Manage Codex, OpenCode and Claude Code accounts with guided switching and live usage status","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"readme":"# @modelprofile.com/authswitch\n\nManage Codex, OpenCode and Claude Code accounts, switch interactively, and inspect live subscription, usage and reset information. Codex switching also preserves ChatGPT remote-control pairings.\n\n## Issue Reporting and Security\n\nFor reporting bugs, issues, or security vulnerabilities, please visit [community.foss.global/](https://community.foss.global/). This is the central community hub for all issue reporting. Developers who sign and comply with our contribution agreement and go through identification can also get a [code.foss.global/](https://code.foss.global/) account to submit Pull Requests directly.\n\n## The problem\n\nThe Codex CLI holds exactly one active credential. Logging in as a second account overwrites the first, so working across two accounts means re-running the browser login every time.\n\nRemote control makes that worse. A ChatGPT client pairs with the local Codex app-server, and the pairing is recorded in Codex' state database keyed by the account id. Swap the credential naively and the running app-server keeps serving the old identity until it is restarted, and the incoming account can come back without the enrollment that made it reachable from the ChatGPT app.\n\n`authswitch` keeps a stash of credentials keyed by account email, captures each account's remote-control enrollments next to its credential, and puts both back together.\n\n## Install\n\nThe package is published to npmjs:\n\n```bash\npnpm install -g @modelprofile.com/authswitch\n```\n\nNode.js 24 or newer is required.\n\nOn Linux, the account authority runs as a systemd user service. Install and start it once:\n\n```bash\nauthswitch authority service install   # write ~/.local/share/systemd/user/authswitch-authority.service\nauthswitch authority service enable    # start it with your user manager from now on\nauthswitch authority service start\nauthswitch authority doctor            # the daemon's release and the harness tools its PATH finds\n```\n\nRun `install` from the shell you use Codex and Claude Code in. The unit runs the `authswitch` that shell's\n`PATH` finds -- pnpm's global launcher, which stays in place across upgrades -- by its absolute path, and\nrefuses when that command is another release than the one installing (`authswitch --version --json` names\nthe release, its version and package root). It carries that shell's `PATH`, through which the launcher finds\nNode and the daemon finds `codex` and `claude`, and, when set, `CODEX_HOME`, `CLAUDE_CONFIG_DIR`,\n`ANTHROPIC_CONFIG_DIR`, `XDG_CONFIG_HOME`, `XDG_DATA_HOME`, `AUTHSWITCH_HOME` and `AUTHSWITCH_CODEX_BIN`;\nnothing else from that environment, and never a token. A relative value of one of them is refused, since the\ndaemon runs from `/`. The install result names the command the unit runs.\n`doctor` reports each harness tool the daemon cannot find and the reinstall that fixes it.\n\nAfter upgrading with `pnpm add -g @modelprofile.com/authswitch`, stop the daemon, install the unit again and\nstart the daemon on the new release. A running service's unit is not replaced: `install` over it refuses and\nnames these three steps.\n\n```bash\nauthswitch authority service stop\nauthswitch authority service install\nauthswitch authority service start\n```\n\n## Authority SDK (new account registry)\n\nThe package also exports a typed client for a per-user authswitch authority daemon. Its\nSmartData registry stores account identity separately from sealed refresh grants, runtime\nbindings, durable device-operation receipts, Codex enrollment records, and native-handoff and migration journals. A daemon\nowns OpenAI device login, targeted reauthentication, proactive refresh, and, on request,\nrevocation at removal for grants added through this API. Management snapshots expose separate account and login rows,\nincluding each login's purpose, owner, health, problem and available actions; neither\nsnapshots nor events contain credentials. A login that a native tool refreshes also names\nthat tool -- `ownerTool` is `claude_code`, `codex` or `opencode`, and `null` exactly when no\nnative tool holds it, because the authority refreshes it or nothing does. The authority\nnames it rather than leaving a consumer to derive it from the purpose, which would be wrong\nas soon as two purposes share a tool or one tool gains a second purpose.\nThe snapshot also lists `nativeAssignments`: which account a vendor tool's own home on this host runs on,\nas `{ id, tool, accountId, loginId, state, revision }` with the home named by its hash. Only homes the\nauthority itself switches are recorded -- the host's Claude Code and Codex homes adopted by a verified import,\nand Claude container homes -- and `state` is `switching` while a handoff to another account is in flight and\n`quarantined` until one is resolved. The login of an adopted home names its owner: `claude_native` or\n`codex_native`. A native store the authority has not adopted -- an OpenCode store, or a Codex home imported\nbefore 11.3.0 and not submitted again since -- appears as its login instead, with `owner: 'legacy_native'` and\nits `ownerTool`, because the authority does not decide what that store holds.\nEvery change of an assignment is an account event, so a subscriber sees it like any other change.\nA removed account is left out of the snapshot unless the caller asks with `includeRemoved` (on `snapshot`,\n`snapshotAll` and `subscribe`): it then appears with `removed: true` and its logins with `health: 'removed'`.\nEvery account also names the provider tenancy its logins act in, `organizationId`: a Claude account's\norganization UUID -- Claude Code's `oauthAccount.organizationUuid`, the `orgId` of `claude auth status --json`\n-- and an OpenAI account's ChatGPT account id (the `chatgpt_account_id` claim, a personal or team ChatGPT\nworkspace, not an OpenAI API organization). It identifies, never authorizes, and is published from the\nidentity the authority recorded when the account was added, so no provider is asked for it. A daemon older\nthan 10.3.0 leaves it out, which is why it is optional in the type; `authswitch account list` then prints\n`organization not published`.\nAn account label follows one published rule, `isAuthSwitchAccountLabel` (at most\n`authSwitchAccountLabelMaxLength` characters, no space at either end, no control character); a rename that\nbreaks it is refused with `invalid_input`.\n\n```ts\nimport { randomUUID } from 'node:crypto';\nimport { AuthSwitchClient } from '@modelprofile.com/authswitch/authority-client';\nimport { resolveAuthSwitchAuthorityPaths } from '@modelprofile.com/authswitch';\n\nconst paths = resolveAuthSwitchAuthorityPaths();\nconst client = new AuthSwitchClient(paths.authoritySocketPath, paths.runtimeSocketPath);\nconst snapshot = await client.snapshotAll();\nconst operationId = randomUUID();\nconst operation = await client.beginAddOpenAi(operationId);\n// Keep operation.id to discover its final result after navigation or reconnect.\nconst receipt = await client.getOperation(operation.id);\n// Or follow it without polling: each answer comes when the operation changes.\nlet current = operation;\nwhile (['starting', 'pending', 'committing'].includes(current.state)) {\n  current = await client.watchOperation(current.id, current.revision);\n}\n```\n\nBrowser code can import the credential-free DTOs from\n`@modelprofile.com/authswitch/authority-contract`. The backend-only binding, access, release and\nmanaged Codex requests are named by `@modelprofile.com/authswitch/authority-runtime-contract`, and the one-time\nimport's own DTOs by `@modelprofile.com/authswitch/authority-import-contract`; those capabilities must\nnever reach a browser. Two of the runtime requests are served on the runtime socket -- resolving\naccess and releasing a binding -- while `authswitch.authority.bind`, its inverse\n`authswitch.authority.unbind` and the managed Codex `codex.start` and `codex.stop` are served on the\n**management** socket by design: minting a capability is the\nact that authorizes a runtime, so only a trusted management caller may perform it, and a container that is\ngiven the runtime directory can use and release a binding it was handed but can never create one or\nrelease one it was not handed. A backend binds an account to a runtime incarnation by exact account ID,\nlogin ID and purpose, and keeps the returned capability private. Targeted reauthentication likewise requires the\nexact login; an account's presentation default never selects a grant for either action. Completed and\ninterrupted operations remain discoverable through `getOperation()` and paged\n`listOperations()`. `watchOperation(id, afterRevision, waitMs = 30000)` is the same read as a long poll,\nthe way `events` waits: it answers as soon as the operation's revision passes `afterRevision` -- a sign-in\nanswers `starting` with no prompt, then `pending` with its device prompt, then its outcome -- at once for a\nfinished operation, and with the unchanged operation once `waitMs` (at most 30000) runs out. Only a change\nof that operation answers it. A completed receipt and its account/grant change commit together, so\nthe receipt resolves a lost response or an event that arrives first. Add and reauthentication\ncallers supply one UUID for the logical start and reuse it after a lost response. Replaying that\nUUID returns the same matching receipt without starting another provider login; using it for a\ndifferent target is rejected. Cancelling a durable `starting` receipt prevents a late provider\nhandle from promoting or overwriting it. Aborting a client request only detaches that request and\ndoes not cancel the daemon-owned login. A client that disconnects before its answer -- a long poll it\nstopped reading, or one the daemon's shutdown settles after the client went away -- ends only its own\nconnection: the daemon drops that request's pending work and keeps serving every other client. Each\nrequest is bounded by its own deadline -- 35 s unless its route states another, for an import submit\n`authSwitchImportSubmitTimeoutMs` (120 s for the import plus the longest Codex's app-server restart can take within\nCodex's own bounds, about 31 minutes in all), the wait plus 5 s for a long poll -- and nothing in the transport ends it sooner: the daemon gives a\nconnection 35 s from acceptance to deliver its complete request, however it trickles in, and sets no limit\nonce it is admitted.\nThe runtime-only socket resolves that binding to a current access token; its directory can be mounted into a\ncontainer without exposing the management socket. A provider that rejects a specific\naccess-token generation can request a newer one through `rejectedGrantGeneration`; the\nauthority coalesces concurrent rejection callbacks and never replays an uncertain refresh.\nA ChatGPT login backs a Claude Code runtime too (`runtime: 'claude'`); a Claude account never binds,\nbecause it reaches Claude Code through the native switch. After an external Flex, OpenCode or Claude\nruntime has fenced new work and drained its pending access resolutions and provider requests, it can\nrelease its exact binding capability through the runtime socket. Every bind receives a fresh random capability, so a stale release cannot fence\nor delete a successor even if the caller reused an incarnation label. Release waits for admitted\nserver-side resolution handlers, but handler completion does not prove response delivery and\ncannot retract an access token already received or in use; the runtime owner therefore owns that\ndrain. Generic release cannot revoke a managed Codex binding, whose daemon-owned stop still closes\nthe runtime and clears its durable run before internal revocation. Binding release never transfers\nor changes ownership of the account grant.\n\nA holder that lost its capability -- a binding an earlier run of it left behind -- releases it with\n`unbind({ runtime, scopeId, incarnationId, expectedRevision })` (`authswitch.authority.unbind`), naming the\nbinding by the identity it bound it under, as the snapshot and `getBinding` publish it. Unbinding needs no\nready login, so the leftover bindings of an account whose sign-in has ended are released, and the account\nremoved, without signing in again. It is authorized exactly as `bind` is: the management socket is the trust\nboundary, and a runtime and scope are the namespace a holder binds under and owns -- AGL, for example, binds\nunder its own installation's scopes -- so a holder names only its own. The daemon releases only the binding\nat exactly that runtime and scope, and only while it is still the incarnation and revision the holder read:\nanother scope, another runtime, or a successor bound in the meantime is left alone, and the answer is\n`inactive`, as it is for a binding already released. A binding's revision is the authority revision of the\nbind that wrote it, so it never repeats for a runtime and scope, even after a release: a repeated or stale\nunbind never names a successor bound under the same incarnation. Its capability is fenced and released exactly as the\nruntime release would, so admitted access resolutions finish first. Managed Codex bindings are never named\nhere. While the login is ready, a holder can instead bind the same runtime and scope again, which replaces\nthe capability, and release the returned one.\n\n`getBinding(bindingId)` (`authswitch.authority.binding`) reads one binding by the id `bind` returned,\ncredential-free, or `null` once the authority holds none by that id, so a backend checks its binding without\nreading the whole snapshot.\n\nRemoving an account that still backs a Flex, OpenCode or Claude binding is refused with `account_busy`, naming\nthose runtimes: their holder stops them and releases the bindings first -- by capability, or by `unbind` when\nit no longer holds one -- so a removal never strands a runtime whose next access would fail. Managed Codex\nbindings are the daemon's own; a removal that goes ahead stops the account's managed Codex first and then\ntakes them with the account. A removal its checks refuse stops nothing; only an account change that lands between\nthose checks and the removal can refuse it after the stop.\n\nRemoving an account never reaches the network unless the caller asks. `removeAccount(accountId,\nexpectedRevision, { revoke: true })` (`revoke: true` on `authswitch.authority.remove`, `--revoke` on the\ncommand line) also revokes the ChatGPT sign-in the authority held for that account at OpenAI (`/oauth/revoke`,\nthe request Codex sends when it logs out). The revocation runs after the removal committed and is best effort,\nlike Codex's: the account is removed either way. The revocations get at most 10 seconds in all, so a revoking\nremoval answers within the 35 seconds the client allows any request. The answer carries `revoked`: `yes` when\nOpenAI confirmed it, `failed` when it did not, or not within those 10 seconds (the sign-in may still be valid\nthere, and the daemon's log says so without the token), `not_applicable` when the authority held no ChatGPT sign-in of its own for the account (a login a\nnative tool refreshes is that tool's), and `not_requested` without `revoke`. A daemon older than this client\nrefuses `revoke` as an invalid request before changing anything.\n\n**A revocation is irreversible, and authswitch cannot tell whether another tool still refreshes from the\nsame sign-in.** A token is opaque; the import ledger records of each source only its kind, a hash of its\nlocation, a digest of its bytes and the account and login it resolved to; and a login does not record\nwhether its current sign-in came from an import or from a device sign-in the authority ran itself. The same\nChatGPT identity turning up both as an imported copy and as a native Codex store proves the same account, not\nthe same sign-in, so no check can tell a shared sign-in from two independent ones. Revoking an imported\nlogin can therefore sign out a native Codex, OpenCode or other home that still runs on that sign-in. Ask for\n`revoke` only for a sign-in made through `account add openai` or `account reauth`, or when every other copy\nof it should stop working too.\n\nEvery route on either socket answers in one of three ways: a result, a **refusal**, or a fault. A refusal\nis an answer -- the daemon completed its check, nothing was left half-done, and its message says what the\nowner does instead -- so it crosses the wire marked, with the message verbatim beside\n`{ reason, code }`. A fault is anything the daemon did not decide: the transport replaces its text with\n`Internal server error`, and a caller must never present that as if it said what to do next. A malformed\nrequest is neither; it keeps its own text and carries no marker, because a caller's own bug is not an\ninstruction for an owner.\n\n`asAuthSwitchRefusal(error)` from `@modelprofile.com/authswitch/authority-contract` is the one reader of\nthat marker: it answers `{ code, instruction }` for a refusal and `null` for a fault. The code is the\nclosed `TAuthSwitchRefusalCode` set, which is what a client branches on without reading the text:\n`authority_closing`, `not_found`, `account_changed`, `account_busy`, `login_unavailable`,\n`binding_unauthorized`, `native_owner_holds_login`, `claude_home_unregistered`, `claude_handoff_pending`,\n`claude_receipt_missing`, `import_refusal`, `codex_unsupported`, `invalid_input`, `login_needs_reauth`,\n`access_not_fresh`, `codex_home_unregistered`, `codex_handoff_pending` and `codex_app_server_unavailable`, plus the\ntwo the legacy commands answer with on this side of\nthe socket, `authority_holds_login` and `authority_unavailable` (see \"The legacy fence\" below). The\ninstruction is authored for the owner and contains no path, credential or digest; only an importer refusal\nmay name the process the owner has to stop. The set is producer-owned: a consumer branches on the codes it\nknows and keeps a default branch, which is what lets the authority name a new one without breaking it.\n\nThe runtime's own answers are named the same way. `authswitch.authority.bind` refuses `login_unavailable`\nwhen the authority does not hold the login itself, and `authswitch.authority.resolveAccess` refuses\n`binding_unauthorized` for a capability that authorizes nothing -- missing, wrong, or superseded while the\ncredential was being resolved. Those are one answer on purpose: an absent binding and a wrong capability are\ncompared against the same zero hash, so nothing distinguishes them, and the repair is the same either way --\nbind again. A binding whose account has since been reauthorized reads `login_unavailable` instead, because\nbinding again cannot help until that account holds a login again. A device sign-in or preuse operation this\nauthority does not hold reads `not_found`, from whichever route met it. What the access loop decides about\nthe login itself is marked as well: `login_needs_reauth` when only a new device sign-in brings the login back\n(after which a bound runtime binds again), and `access_not_fresh` when the login is intact but the provider\ncould not renew its access yet, so the same request can succeed later. A changed identity or a view that\nkeeps moving during resolution stays an unmarked fault, because nobody decided it. Binding an *account* this\nauthority does not hold at all stays one too: the storage layer throws `Account is not available for this runtime.`,\nwhich a socket caller reads as `Internal server error`, because naming it is a decision about which layer\nauthors owner instructions rather than a wording fix.\n\nThe import routes keep the marker they published in 8.1.0, `authswitch_import_refusal`, and\n`isAuthSwitchImportRefusal` from `@modelprofile.com/authswitch/authority-import-contract` is the same\nreader asking for the `import_refusal` code, so a consumer written against 8.1.0 keeps working and a\nclient of this release still reads the payload a daemon of that release answers with. The distinction\nmatters most for `import.submit`: a refusal there is a submit that decided -- it left nothing half-done,\nand the ledger row it wrote says where that source stands -- while an unmarked failure leaves the outcome\nunknown, and that source must then be read with `authswitch.authority.import.status` rather than\nsubmitted again.\n\nA daemon that is shutting down admits no new request -- every route answers `authority_closing` -- and\nsettles the requests it already admitted before it closes its store: a waiting `events` or\n`watchOperation` read answers normally from the open store instead of failing.\n\nA client reading a daemon that runs an older release -- one not restarted after an upgrade -- fails with\n`AuthSwitchDaemonOutdatedError`, which names the restart (`authswitch authority service stop`, then\n`start`), and a subscription reports `unavailable` with the reason `daemon_outdated` once and retries every\nfive seconds until the daemon is restarted.\n\n`AuthSwitchClient.subscribe(onSnapshot, onEvent, signal, { onStatus })` reports `current`\nafter a fresh snapshot or verified heartbeat, `unavailable` on disconnect or resync, and\n`closed` on abort. Keep cached account actions disabled while status is not `current`.\nEvery change-event batch supplies a fresh snapshot before `onEvent`, so a consumer does\nnot need to reconstruct account state from events. `lastVerifiedAt` records the last\nsuccessful daemon response, including an empty heartbeat.\n\n`AuthSwitchClient.doctorPage()` reads credential-free diagnostic evidence without unsealing\na grant, refreshing a token or contacting a provider. Each bounded page separately stamps\nthe database observation, daemon state and managed-Codex process observation. `daemon.harnessBinaries`\nsays whether the daemon's own `PATH` finds each harness tool (`codex`, or what `AUTHSWITCH_CODEX_BIN` names;\n`claude`; `opencode`): `found` or `not_found`, absent from a daemon older than 10.3.0. Stored account\nand login rows explicitly report `liveCheck: not_checked`; a ready daemon therefore does not\nclaim that a stored grant or provider is healthy. Native homes and journals omit paths,\ndigests and sealed values, while managed Codex reports durable, in-memory and observed-process\nstate independently with fixed problem categories. Continue each independent cursor to inspect\nthe complete inventory. Pages are later observations rather than one atomic global snapshot,\nand the authority metadata revision is not a change clock for every native-home record. If the\nmanagement socket is unavailable, an offline caller must leave the database state unknown\ninstead of starting the database to inspect it.\n\nThe authority CLI uses that daemon surface without constructing the legacy native harness adapters:\n\n```bash\nauthswitch account list [--json]\nauthswitch account add openai [--json]\nauthswitch account add claude [--json]\nauthswitch account use claude <account-id> [--json]\nauthswitch account use codex <account-id> [--json]\nauthswitch account reauth <account-id> <login-id> [--json]\nauthswitch account remove <account-id> [--revoke] [--json]\nauthswitch account operation get <operation-id> [--json]\nauthswitch account operation cancel <operation-id> [--json]\nauthswitch account operation resume <operation-id> [--json]\nauthswitch account preuse <account-id> <login-id> [--prompt <text>] [--model <id>] [--json]\nauthswitch account preuse --all [--prompt <text>] [--model <id>] [--json]\nauthswitch account preuse operation get <operation-id> [--json]\nauthswitch account preuse operation cancel <operation-id> [--json]\nauthswitch account preuse operation resume <operation-id> [--json]\nauthswitch authority doctor [--json]\nauthswitch authority import inventory [--json]\nauthswitch authority import status [--json]\nauthswitch authority import submit <source-id> --digest <source-digest> [--json]\n```\n\n`account list --json` prints the complete, consistent credential-free authority snapshot.\nIts human form labels login health as stored state and does not imply a live provider check.\n`account add openai` starts one standalone OpenAI device login. `account reauth` starts one\ndevice login for the exact account and managed login IDs; it never chooses a presentation\ndefault. Both commands print the durable operation ID, verification URL, user code and changed\nreceipts until completion. `account operation resume` polls only the supplied durable ID, while\n`get` performs one read and `cancel` performs one explicit cancellation. Ctrl-C or the local\n15-minute deadline detaches the CLI and leaves the daemon-owned operation running. If a start\nresponse is lost, the fixed diagnostic reports the caller-generated operation ID and exact resume\ncommand; the CLI does not replay the start request.\n\n`account add claude` signs a Claude account in (see \"Adding a Claude account\" below): it starts a Claude sign-in,\nruns `claude auth login` on this terminal with `CLAUDE_CONFIG_DIR` set to the home the authority made for it, and\nfollows the sign-in until the authority has imported the login. With `--json` it writes each changed sign-in as one\nJSON Line and sends Claude Code's own output to stderr. A Claude Code that cannot be started, or that exits without\nsigning in, ends the sign-in, and the command exits nonzero. `account use claude` switches the host's Claude Code to\nthe account by the id `account list` shows: it finds the Claude login the authority holds for that account and runs\n`authswitch.authority.claude.switch`, following the handoff with the `claude.handoff` long poll until it is settled\n(a daemon older than 11.3.0 cannot be followed that way, and the command says so and exits nonzero). It prints whether Claude Code now\nruns on the account, whether the switch was undone -- with the proof that failed -- or whether Claude Code's home is\nquarantined; `--json` prints the handoff. It exits nonzero unless the switch committed, and answers at once, changing\nnothing, when Claude Code already runs on the account. `account use codex` switches the host's Codex the same way\n(see \"The host's Codex home\" below): it finds the OpenAI login the authority holds and renews for the account, runs\n`authswitch.authority.codex.switch` and prints whether Codex now runs on the account, whether the switch was undone\n-- with the problem and the proof that failed -- or whether Codex's home is quarantined, and how Codex's app-server\ncame back; `--json` prints the daemon's answer. It exits nonzero unless the switch committed, and answers at once,\nchanging nothing, when Codex already runs on the account. Every refusal the daemon answers these commands with, and\nevery other authority command, is printed as the daemon wrote it.\n\n`account remove` removes one authority account by the id `account list` shows, at the revision it\nreads just before, and prints the removal and what happened to its ChatGPT sign-in; `--json` prints the\ndaemon's answer, `{ account, revoked }`. `--revoke` asks for the revocation described under removal above,\nwith the same caveat: authswitch cannot tell whether another tool still runs on that sign-in. The command\nexits nonzero when OpenAI did not confirm a requested revocation, although the account is removed.\n\n`account preuse` sends one quota-consuming prompt through the exact managed OpenAI account and\nlogin IDs. The default prompt is `Write 2000 words about strawberries.`; `--prompt` replaces it\nand `--model` requests one exact model. `--all` freezes one consistent authority snapshot, walks\nits canonical daemon-owned OpenAI managed logins in snapshot order, and starts one fresh durable\noperation per login whose stored `canPreuse` capability is true. It does not infer readiness from\nplan, usage, token expiry or binding capability. A login whose snapshot capability is false is\nreported as skipped with the snapshot revision, login revision, stored health, problem and\nobservation time; no request or operation ID is created for that skip.\n\nPreuse operations run sequentially and are never retried automatically. Every terminal receipt\nadvances an `--all` run, including `not_sent`, `refused` and `outcome_unknown`, while any attempted operation\nthat does not complete makes the final exit status nonzero. Snapshot-ineligible skips alone do not\nmake an otherwise successful batch fail. Running `--all` again is a new quota-consuming run with\nnew operation IDs. Use `account preuse operation resume` to continue observing an existing receipt.\nOnly the explicit `cancel` command asks the daemon to cancel one. A receipt stopped by a limit\ncarries it as `limit` (`{ kind, window, resetsAt }`); a sent request that failed for another stated\nreason is `outcome_unknown` with problem `request_uncertain` and carries its cause as `failure`\n(`{ kind, status, providerCode }`, for example `{ \"kind\": \"http\", \"status\": 503, \"providerCode\": null }`),\nnever the provider's text. Human output prints both as sentences.\n\nA host that shows receipts in a browser words them the same way through\n`@modelprofile.com/authswitch/preuse-text`, the browser-safe entry point for those sentences:\n\n```ts\nimport { describePreuseFailure, describePreuseLimit, localDateTime } from '@modelprofile.com/authswitch/preuse-text';\nimport type { IAuthSwitchPreuseOperation } from '@modelprofile.com/authswitch/authority-contract';\n\nconst lines = (operation: IAuthSwitchPreuseOperation): string[] => [\n  ...(operation.limit ? [describePreuseLimit(operation.limit, Date.now())] : []),\n  ...(operation.failure ? [`Cause: ${describePreuseFailure(operation.failure)}`] : []),\n];\n```\n\n`describePreuseLimit(limit, now)` names the window and the limit, and a stated reset as a countdown from\n`now` with the local time (`Weekly usage limit reached, resets in 16h 46min (2026-09-27 05:12)`, or `due\nto reset now` once it has passed); `describePreuseFailure(failure)` names the cause as the tail of a\nsentence (`the provider answered HTTP 503`). `localDateTime(timestamp)` is the local time both use,\n`2026-09-27 05:12`. The module loads nothing but that time text, which imports nothing either; the package\nroot exports the same three functions from the same source.\n\nFor `account add`, `account reauth` and `account operation resume`, `--json` writes JSON Lines:\neach line is one complete operation receipt, and unchanged revisions are omitted. `account\noperation get --json` and `account operation cancel --json` each write one JSON object followed by\na newline. Human output includes the resume command on every unfinished receipt. These device\ncommands do not switch the active native login.\n\nFor one preuse start or resume, `--json` likewise writes each complete changed receipt as one raw\nJSON Line; preuse get and cancel write one raw JSON object. A preuse `--all --json` stream tags each\nline as `operation` or `skipped`. Operation lines contain the complete durable receipt. Skip lines\ncontain the exact account and login IDs plus the stored snapshot evidence described above. A lost\nstart response, transport or output failure, Ctrl-C, or the local 15-minute observation deadline\nstops the batch before another login starts and reports the current operation ID and resume command.\nIt detaches without replaying or implicitly cancelling the daemon operation.\n\n`authority doctor --json` incrementally writes one JSON document. Its `pages` array contains\nevery independently stamped bounded page; `observationSpan` is written only after all cursors\ncomplete, and `globallyAtomic` is false. A failure during paging returns nonzero and leaves the\ndocument incomplete rather than presenting partial evidence as a successful observation span.\nThe doctor command imposes no inventory cap. Account listing and doctor do not contact a provider,\nunseal a grant, mutate authority state, start the service, open the database offline or fall back\nto a legacy credential store.\nIf the daemon is unavailable before the first response, it fails with a fixed diagnostic on\nstderr and leaves stdout empty. The older native-store commands documented below still coexist until the coordinated\nmajor-version migration and removal; these authority routes never use them.\n\n### The Claude native home\n\nThe daemon serves Claude Code's own credential store, which stays the native store that Claude Code\nreads. `authswitch.authority.claude.switch`, `.handoff` and `.handoffs` on the management socket move\nthat one home between two authority logins and report the journal of those moves, and\n`authswitch.authority.usage` answers for an Anthropic account from it. Each switch carries a `revision` that grows\nwith every change of it, and `.handoff` waits for one: with `afterRevision` and `waitMs` (at most 30000), which come\ntogether or not at all, it answers once the revision passes `afterRevision`, at once for a settled switch\n(`committed`, `aborted` or `quarantined`), or unchanged after `waitMs`. `AuthSwitchClient.watchClaudeNativeHandoff()`\nis that long poll; pass each answer's `revision` back until the switch is settled. A daemon older than 11.3.0 names\nno revision and refuses the wait. The home is\n`CLAUDE_CONFIG_DIR` or `~/.claude`, and the authority identifies it by the hash of the credential file\nClaude Code owns -- the same value the import publishes as that source's path hash, which is what lets a\nverified receipt adopt it.\n\nThe daemon is wired for that home whether or not Claude Code is installed, so `doctor` reports\n`claudeNativeAuthority: configured` on any host; the `claudeHomes` page is what says whether a home has\nbeen adopted. Until a verified `claude_native` import has adopted one, every Claude route refuses, except the Claude\nsign-in, which only adds accounts. A\n`CLAUDE_CONFIG_DIR` that is not an absolute path is refused when the daemon starts, because the same\nvariable also decides which file the import would read; it is never resolved against a working directory.\n\nA switch is only attempted when the host can prove Claude Code uses that native login: Claude Code\n2.1.273 or newer installed, a subscriber login in the store, no credential override in the environment\n(including the remote well-known token files), no managed or local settings selecting another auth source,\nand every Claude Code session running in that home on a verified release -- one whose lock table, live\ncredential pickup and refresh compare-and-swap were read from its bundle, currently 2.1.273 and 2.1.282.\nAn installed release above 2.1.273 that is not verified is proven by Claude Code's own answer instead:\n`claude auth status --json` must report the claude.ai login of the outgoing account -- its organization and\nemail, the only account identifiers it names -- read from this home and with no API key, before the write,\nand of the incoming account after it. That path runs only while\nno Claude Code session runs in the home. If Claude Code does not report the incoming login after the\nwrite, or the proof fails for any other reason, the exact outgoing bytes are written back while the locks\nare provably still held and the handoff is aborted with `problem: unsupported_effective_auth`; when they\ncannot be, the home is quarantined. A write whose proof never ran is proven by the reconcile that finds it\nbefore it can commit. Anything else refuses and leaves\nboth logins where they were. A move that reaches the home and\nthen cannot complete that proof is quarantined with `problem: unsupported_effective_auth`, and the\nhandoff's optional `proofFailure` names which condition failed -- `unsupported_release`, `subscription`,\n`override`, `settings`, `profile`, `profile_unreadable` or `running_session` -- so an owner is told what\nto change. It is absent whenever `problem` is anything else. The settings that proof reads are the ones\nthe daemon may speak for: the user settings file of the resolved home and the managed settings directory.\nA project's `.claude/settings.json` is read from the working directory of each running Claude session,\nnever from the daemon's own, which is its service unit's and selects nothing. While a login is in the\nnative home, Claude Code is its only refresher; the authority takes it back by the same journaled handoff.\n\n### The host's Codex home\n\nThe daemon also switches the host's own Codex home -- `CODEX_HOME`, or `~/.codex`, as its import reads it -- between\nOpenAI logins it holds, so the conversations that live in that home continue on another account.\n`authswitch.authority.codex.switch` (`AuthSwitchClient.switchCodexNative()`), `.handoff` and `.handoffs` serve it,\nand `authswitch account use codex <account-id>` runs it from the command line. The home is registered by the hash of\nits `auth.json` path, the same value the import publishes as the `codex_native` source's path hash: a verified\nimport of that source adopts the home and makes its login `codex_native`, the login Codex renews itself. A Codex\nhome imported before 11.3.0 still has a `legacy_native` login; `import status` offers `resume` for it, and submitting\nthe same source again (`authority import inventory`, then `import submit`) proves its current bytes with the\nprovider and adopts it. Until a home is adopted, and on a daemon built without `codexNative`, the routes refuse\nwith `codex_home_unregistered`.\n\nOne login runs in the home at a time, and each login has exactly one renewer: Codex for the one in the home, the\nauthority for every other. The account's login is one grant (`openai_managed`), so the login Codex runs on cannot\nalso back a managed Codex app-server or a runtime binding: the switch stops the incoming account's managed Codex\nfirst, and refuses with `account_busy` while a runtime a caller holds is bound to it. A switch is refused, changing\nnothing, while another one is pending or left the home quarantined (`codex_handoff_pending`), for the account Codex\nalready runs on (`invalid_input`), and whenever Codex's own app-server is not there to prove it\n(`codex_app_server_unavailable`): not running, not managed by `codex app-server daemon`, or unable to say.\n\nOtherwise it runs as one journaled transfer:\n\n1. It renews the incoming login first when its access token would expire within twenty minutes, so Codex does not\n   need to renew it while the switch is being proven, and reserves the switch; from here the authority no longer\n   renews the incoming login.\n2. It stops Codex's app-server with `codex app-server daemon stop` -- running Codex turns end -- and reads the\n   home's `auth.json`. A home that does not hold the login the authority placed there is quarantined, and nothing is\n   written.\n3. It saves the outgoing account's remote-control pairings from Codex's state database into the account's sealed\n   pairing record, seals the outgoing login for the authority and journals the digests of the bytes on both sides of\n   the write.\n4. It puts the incoming account's saved pairings back into the state database, and writes the incoming login as\n   Codex's own `auth.json` (`auth_mode: chatgpt`, owner-only, atomically, only if the file is still the one it read).\n5. It starts the app-server again in its own systemd scope with the environment it ran with, exactly as a\n   credential change always does (see \"What a switch actually does\"), and asks it: `account/read` must report a\n   ChatGPT login of the incoming account's email and `account/rateLimits/read` must name its ChatGPT account.\n6. Only that answer commits the switch: the incoming login becomes `codex_native`, the outgoing one the authority's\n   to renew, and the home's assignment moves.\n\nA switch Codex does not prove -- another login selected by the environment or the configuration\n(`proofFailure: other_login`), a ChatGPT account it could not name (`account_unnamed`), or an app-server that did\nnot come back (`problem: app_server_unavailable`) -- is undone: the app-server is stopped again, the exact outgoing\nbytes go back and it is started again. Where the home no longer holds what was written, or the app-server cannot be\nstopped to put it back, the home is quarantined, and neither login is renewed by the authority until the owner\nrepairs it. A daemon that stops in the middle settles the switch when it starts: a home that still holds the\noutgoing login undoes it, one that holds the written login commits only once the running app-server proves it, and\nanything else is quarantined. The answer, `{ handoff, codexAppServer, codexAppServerDetail }`, can take as long as\ntwo Codex restarts; `AuthSwitchClient` waits `authSwitchCodexNativeSwitchTimeoutMs`, and a lost answer is read\nwith `codex.handoff`, which waits for a change past `afterRevision` exactly as `claude.handoff` does\n(`AuthSwitchClient.watchCodexNativeHandoff()`).\n\n`doctor` lists the adopted home (`codexHostHomes`, with its account, login, pending switch and status) and every\nswitch of it (`codexHandoffs`, with its phase, problem and failed proof), and says whether this daemon serves the\nswitch (`daemon.codexNativeAuthority`), so the home a refusal calls quarantined is visible there. A daemon older than\n11.3.0 answers none of these; `authswitch authority doctor` then shows `Codex native authority=unsupported` and never\nsends it the `codexHostHomeAfter` and `codexHandoffAfter` cursors it would refuse.\n\nWhat a switch cannot see: a Codex process that runs on the home without the app-server (`codex exec`, or a TUI\nstarted with `--no-daemon`) keeps the login it loaded and may write its own renewal of it back into `auth.json`;\nclose such processes before switching. The account Codex runs on reads no usage through the authority, since the\nauthority holds no copy of its login, and it cannot be removed until Codex is switched to another account.\n\n### Adding a Claude account\n\nA Claude account reaches the authority by one of three ways, and each ends with an import whose migration ledger row\nis the receipt a switch of the host home, or a move into a container home, requires.\n\n1. **Adopt the host's own Claude Code home** -- once, before anything else. The login Claude Code runs on stays\n   Claude Code's (a projection, verified without rotating anything), and its home becomes the one the authority\n   switches. Close every Claude Code session first: the import refuses while `claude` runs.\n\n   ```bash\n   authswitch authority import inventory    # the source of kind claude_native, with its id and digest\n   authswitch authority import submit <source-id> --digest <source-digest>\n   ```\n\n2. **Import the Claude logins `authswitch claude stash` saved** -- each is a source of kind `authswitch_stash` with\n   provider `anthropic` in the same inventory, taken over by one rotating refresh, after which its saved copy is dead.\n   Submit each the same way, with Claude Code closed. The saved copy of the account Claude Code runs on is refused,\n   because Claude Code already holds that login, and so is one of an account whose login the authority already\n   holds and still works; adopt the host home first, or its own import is refused in turn once the authority holds\n   that account.\n\n3. **Sign in** -- `authswitch account add claude`, or from a backend the Claude sign-in routes below.\n\nThen `authswitch account use claude <account-id>` switches Claude Code on this host to any of them.\n\n`authswitch.authority.claude.signin.start` (`AuthSwitchClient.startClaudeSignIn(operationId)`) makes a private home\nfor the sign-in -- a directory named by the operation id in the sign-in directory, which the service places at\n`$XDG_DATA_HOME/authswitch/claude-signin` (default `~/.local/share/authswitch/claude-signin`), beside the store --\nand answers `IAuthSwitchClaudeSignInOperation`: `pending`, with `prompt: { flow: 'terminal', command, directory }`.\n`command` is `claude auth login` with `CLAUDE_CONFIG_DIR` set to `directory`, quoted for a POSIX shell; a caller that\nruns Claude Code itself runs `claude` with `authSwitchClaudeSignInArguments` in that environment, as the command\nline does. Once `.credentials.json` is in the home and no Claude Code process runs on it, the authority imports the\nlogin -- one rotating refresh, the import a saved Claude login gets, so the authority is its only renewer and the\nimport's ledger row (source kind `claude_signin`) is its receipt -- and removes the home; the sign-in is then\n`complete` with `result: { accountId, loginId }`. An import that refuses leaves it `failed` with the import's\ninstruction in `error`, and one whose outcome is unknown `outcome_unknown`, pointing at `authswitch authority import\nstatus`. `claude.signin.operation` reads it, or waits for its next change when given `afterRevision` and `waitMs`\n(`watchClaudeSignIn`), and `claude.signin.cancel` ends a pending one and removes its home. A sign-in that holds no\nlogin fifteen minutes after it started fails, and one the authority's stop interrupts is `interrupted`; either way\nits home goes. A finished sign-in answers for ten minutes after it finished; after that its id is unknown\n(`not_found`). Sign-ins live in the running authority only: after a restart their ids are unknown, and the start\nremoves every home left in the sign-in directory. A daemon built without `claudeSignIn` refuses these routes with\n`claude_home_unregistered`.\n\nA sign-in, like the import of a saved login, replaces a login the authority already holds for that account only\nwhen that login has ended (`needs_reauth`); a working login is kept, and so is one Claude Code holds, and the\nsign-in or the import refuses saying so, before anything is written. An\naccount whose login Claude Code runs on is not removed either: the removal refuses with `native_owner_holds_login`\nand the instruction to switch Claude Code to another account first (`authswitch account use claude\n<account-id>`), or to move the login out of its container home.\n\n### Claude container homes\n\nA management caller that runs Claude Code in containers -- AGL's environments -- keeps several Claude logins\nin the authority and moves one of them into a container's own Claude home while that container runs. A login\nlives in exactly one place: sealed by the daemon, in the host home, or in one container home. The grant's\nowner records it, and so does the home's occupancy, whose login index is unique across the host and every\ncontainer. The routes are on the management socket, the trust boundary that already scopes `bind` and\n`unbind`:\n\n- `authswitch.authority.claude.homes.register {runtime: 'claude', scopeId, accountId, directory}` registers a\n  home the caller created, under its own scope and for one account, for the home's whole life. The authority\n  proves only facts about the path. The directory must be absolute and normalized, and reached through no\n  link. Its parent must be a directory of the daemon's user that no one else can write, and every directory\n  above that must be changeable only by its owner or root (a root-owned sticky directory such as `/tmp`\n  counts). The home must be neither the host's Claude home, nor the authority's data directory, nor another\n  registered home, and must not nest with any of them, by path and by inode. Registrations run one at a\n  time, so two concurrent ones of nested directories never both succeed. The parent is pinned by device\n  and inode. The home itself may not exist yet; when it does, it must be a real directory of the daemon's\n  user. The same scope, directory and account answer the existing registration. Anything else under that\n  scope or directory is `claude_home_conflict`.\n- `.unregister {homeId, expectedRevision}` forgets an empty home. It answers `claude_home_occupied` while the\n  home holds a login or has a move pending.\n- `.moveIn {homeId, loginId}` moves one ready login of the home's account in. A login due within the hour\n  is renewed first, and one whose renewal fails is refused `login_needs_reauth`. The login is proven with\n  the provider and written as `.credentials.json` (`claudeAiOauth`, every other key kept) and `.claude.json`\n  (`oauthAccount`; the account caches go, every other key of the container's own file stays). It is read\n  back and committed: the grant becomes `claude_native`, and the snapshot's `nativeAssignments` gains a row\n  with `location: 'container'` and the home's `scopeId`. Only a `committed` answer means the login is in the\n  home.\n  - A login held by another home is `claude_login_in_use`, and the instruction names that home's scope; the\n    snapshot names it too.\n  - A login of another account is `claude_home_conflict`.\n- `.moveOut {homeId}` takes the login back and names the result. The file is container-controlled, so the\n  provider, never the file's label, says whose login it is: its profile read with the returned access token\n  while that has five minutes left, otherwise after one refresh the daemon sends as the login's new\n  refresher, behind a durable marker.\n  - `returned`: the very login moved in.\n  - `returned_replaced`: another login the provider proves is the same account and organization. It is\n    sealed as the grant's login. authswitch cannot tell a renewal by Claude Code from a new sign-in inside\n    the container, and it revokes no previous token family.\n  - `needs_reauth`, with `problem`:\n    - `returned_missing`: no login in the home;\n    - `returned_foreign`: another account's tokens, discarded and never sealed;\n    - `provider_rejected`: the returned refresh token is dead;\n    - `exchange_uncertain`: a refresh may have been sent and its answer was lost.\n  - `quarantined`, with `problem`:\n    - `foreign_or_torn`: a file that is unparseable, oversized, not a regular file or of another user;\n    - `claude_home_tampered`: the home, or an entry in it, is not what was registered.\n  - `not_occupied`: the home holds no login of the authority's, for example after a move-in whose answer\n    was lost was undone.\n  - Every result but a quarantine leaves the home without `.credentials.json` and without `oauthAccount`.\n  - An unavailable provider moves nothing and answers `access_not_fresh`.\n- `.resolve {homeId, operationId, outcome}` is the owner's answer to a quarantine. It waits, answering\n  `claude_home_running`, while a Claude Code process runs on the home.\n  - `abandon` gives the login up (it needs a new sign-in) and empties the home when it can.\n  - `restore_sealed` returns the authority's own sealed copy. It is allowed only for a move-in that never\n    committed, and only once this call has emptied the home.\n\nA daemon built with `claudeContainerHomes: { homesDirectory }` registers homes only strictly inside that\ndirectory and refuses any other with `invalid_input`; without it a home may lie anywhere the path facts admit.\n\nAfter a committed move-in, the caller can prove inside the container that Claude Code runs on the expected\naccount by comparing `claude auth status --json` with the snapshot's account: its `orgId` with the account's\n`organizationId`, and its `email` with the account's `email`.\n\nBoth moves are valid only while no container process can touch the home, and the caller vouches for that:\nit moves a login in during its start-probe window and out once its container is proven stopped. As defence\nin depth, the authority refuses either move with `claude_home_running` when a Claude Code process of this\nuser runs on the home (resolved through the process's own mount namespace) or when a live Claude Code\nprocess cannot be read. It never executes anything found in a home -- no `claude`, no helper, no settings --\nand takes none of Claude Code's locks: whether Claude Code in the container uses the login is the caller's\nto prove, inside the container.\n\nA container home is touched only by descriptor. The parent is opened by path and proven to be the pinned\ndirectory. The home is opened through it without following a link. Every file is addressed as\n`/proc/self/fd/<home>/<name>` without following a link, and is read without blocking on a FIFO, as a regular\nfile of the daemon's user of at most 4 MiB, in strict UTF-8. A write goes to a fresh file created exclusively\nunder a random name and is renamed within the home, so a planted link or hard link is never written through.\nAfter every batch the home's name must still be the directory that was opened; otherwise the move is\nquarantined `claude_home_tampered`. A permission refusal is `claude_home_tampered` as well: an entry of\nanother user of the container, or a stripped directory.\n\nEvery move is journalled before it touches a home, and the daemon settles an interrupted one when it starts\nor when the caller moves out:\n\n- A move-in that wrote nothing is undone.\n- A move-in whose home holds exactly the prepared login is emptied and undone after the running check, and\n  the sealed copy stays; the authority never commits a move the caller did not see succeed.\n- A move-out that sealed the returned login finishes the removal and commits, while the credential file is\n  the one it read or is gone.\n- A move-out that sent a refresh loses the login, because that refresh may have spent it.\n- Anything else is quarantined.\n\nA move the daemon cannot settle when it starts -- a Claude Code process runs on the home, or anything else\nfails -- stays pending and keeps only that home blocked; every other account is served. The home reports why\nin `unsettled` (`claude_home_running` or `settlement_failed`, the latter also logged by the home's id), and\nits next move-out settles it.\n\nA login a container home holds is that home's alone. A host switch to it is refused `claude_login_in_use`,\nnaming the home's scope, and a switch to a login a move-in is taking is `claude_handoff_pending`. Its usage\nis never read from the host's home, nor under Claude Code's locks there: `authswitch.authority.usage`\nanswers it `unavailable` with the problem `held_in_container`, and reads it again once the login is moved\nout. An import never adopts a registered container home as the host's.\n\n`doctor` lists the registered homes (`claudeContainerHomes`, with their account, login, pending move, status\nand `unsettled`, never their path); `claudeHomes` lists the host's own home only. It also reports\n`daemon.version` and whether this daemon serves container homes (`daemon.claudeContainerHomes`). A daemon\nolder than 10.2.0 answers none of these three; `authswitch authority doctor` then says the daemon is\noutdated, names the restart, and never sends it the `claudeContainerHomeAfter` cursor it would refuse.\nRemoving an account removes its empty registrations with it. A home that holds a login refuses the removal\nthrough that login's native owner.\n\n### Testing against a real authority\n\n`@modelprofile.com/authswitch/testsupport` starts a real authority daemon for a consumer's tests -- the\ndaemon, its embedded database, and the management and runtime sockets -- on synthetic fixture homes, so a\ntest talks to it through `AuthSwitchClient` exactly as it talks to the installed one:\n\n```ts\nimport * as fs from 'node:fs';\nimport { AuthSwitchTestAuthority } from '@modelprofile.com/authswitch/testsupport';\nimport { AuthSwitchClient } from '@modelprofile.com/authswitch/authority-client';\n\nconst support = await AuthSwitchTestAuthority.start();\ntry {\n  const client = new AuthSwitchClient(support.authoritySocketPath, support.runtimeSocketPath);\n  const alice = await support.seedClaudeAccount('alice');\n  const home = support.claudeHomeDirectory('env-one');\n  fs.mkdirSync(home, { mode: 0o700 });\n  const registration = await client.registerClaudeHome({ scopeId: 'my-app/env-one', accountId: alice.accountId,\n    directory: home });\n  await client.moveClaudeHomeIn(registration.id, alice.loginId);\n  const account = (await client.snapshot()).accounts.find(item => item.id === alice.accountId);\n  // account.organizationId === alice.organizationId, the organization the home's .claude.json names.\n  await client.moveClaudeHomeOut(registration.id);\n} finally {\n  await support.stop();\n}\n```\n\n- `AuthSwitchTestAuthority.start({ parentDirectory? })` creates a private temporary directory in\n  `parentDirectory` (the system temporary directory by default) and runs everything below it: the database,\n  the three sockets, the fixture host Claude home, the fake host Codex and `homesDirectory`. It refuses a parent directory inside\n  one of this user's real stores -- `~/.claude`, `~/.claude.json`, `~/.codex`, `~/.authswitch`,\n  `~/.config/authswitch`, `~/.config/opencode`, `~/.local/share/opencode`, `~/.local/share/authswitch`,\n  `CLAUDE_CONFIG_DIR`, `CODEX_HOME`, `AUTHSWITCH_HOME`, and the `opencode` and `authswitch` directories of\n  `XDG_DATA_HOME`, `XDG_CONFIG_HOME` and `XDG_RUNTIME_DIR` -- and a path too long for a Unix socket.\n- Container homes are confined to `homesDirectory`; `claudeHomeDirectory(name)` names one there without\n  creating it. Any other directory is refused `invalid_input`.\n- `seedClaudeAccount(name, { generation?, accessExpiresAt? })` puts a ready Claude login of fixture account\n  `name` into the authority's custody with the verified import receipt a move-in requires, and answers\n  `{ name, accountId, loginId, accountUuid, organizationId, email, accessExpiresAt }`. Seeding the same name\n  with another `generation` adds a second login of the same account. The identity is\n  `authSwitchFixtureClaudeIdentity(name)` (`user-<name>`, `org-<name>`, `<name>@example.test`) and every token\n  starts with `fixture-`.\n- `provider` is the `AuthSwitchFakeClaudeProvider` the daemon talks to. It answers Anthropic's profile and\n  token endpoints for the fixture tokens it issued, with the switches a test needs (`profileDown`,\n  `refreshTokens.set(token, 'rejected')`, `onProfile`, the `profileCalls` and `refreshCalls` counters), and\n  fails every other request, OpenAI's included, so nothing a test starts reaches a real provider. Secrets are\n  sealed with a plain encoding, never in a keyring, and no Claude Code process is ever seen running on a home.\n- Claude sign-ins run in `claudeSignInDirectory`. `claudeSignInLogin(name, { generation?, accessExpiresAt? })`\n  answers the two files `claude auth login` leaves once fixture account `name` signed in -- `files['.claude.json']`\n  and `files['.credentials.json']` -- and the `{ name, accountId, loginId, accountUuid, organizationId, email }` the\n  authority imports them as, and tells the provider the login's tokens so the authority's rotating refresh\n  succeeds. A consumer's fake `claude`, run with `authSwitchClaudeSignInArguments` and the prompt's directory as\n  `CLAUDE_CONFIG_DIR`, writes them there and exits; since no Claude Code process is ever seen on a home, the\n  authority imports as soon as `.credentials.json` is there, so the fake writes `.claude.json` first and\n  `.credentials.json` last, each by renaming a complete file into place. `completeClaudeSignIn(directory, name)`\n  writes them itself, for a test that needs no `claude` at all. The sign-in completes within a fraction of a second;\n  follow it with `watchClaudeSignIn`:\n\n  ```ts\n  const operation = await client.startClaudeSignIn(randomUUID());\n  const lena = support.completeClaudeSignIn(operation.prompt!.directory, 'lena');\n  let current = operation;\n  while (current.state === 'pending' || current.state === 'committing') {\n    current = await client.watchClaudeSignIn(current.id, current.revision);\n  }\n  // current.result is { accountId: lena.accountId, loginId: lena.loginId }\n  ```\n- The host's own Codex is `codexHost`, an `AuthSwitchFakeCodexHost` in the authority's directory: a fake `codex`\n  that answers `app-server daemon version`, `stop` and `start` as Codex does, and an app-server that loads the\n  home's `auth.json` when it starts and answers the two requests a switch proves itself with -- `account/read` with\n  the ChatGPT login it loaded, `account/rateLimits/read` with that login's ChatGPT account. The daemon serves\n  `codex.switch`, `.handoff` and `.handoffs` on it. `seedOpenAiAccount(name, { generation?, accessExpiresAt? })`\n  puts a ready OpenAI login of fixture account `name` into the authority's custody, and\n  `adoptCodexHost(name, { accessExpiresAt? })` makes the host's Codex run on fixture account `name` as a verified\n  import leaves it -- its sign-in in the home, its login `codex_native`, the home adopted -- and starts the\n  app-server; both answer `{ name, accountId, loginId, chatgptAccountId, email, accessExpiresAt }`. The identity is\n  `authSwitchFixtureOpenAiIdentity(name)` (`user-<name>`, `workspace-<name>`, `<name>@example.test`); the tokens\n  are unsigned, valid for three hours unless stated, and never renewed within that time, so no request reaches\n  OpenAI. On the fake, `chatgptAccountId()` names the account the home's `auth.json` holds, `requests()` lists what\n  the app-server was asked, `reportApiKey(true)` makes it report an API key -- a switch is then undone with\n  `proofFailure: 'other_login'` -- and `stopAppServer()`, `startAppServer()` and `isRunning()` drive it. The fake\n  runs without a systemd user manager, so a switch answers `codexAppServer: 'restarted_unscoped'`:\n\n  ```ts\n  const kai = await support.adoptCodexHost('kai');\n  const lena = await support.seedOpenAiAccount('lena');\n  const { handoff } = await client.switchCodexNative(lena.accountId, lena.loginId);\n  // handoff.phase === 'committed'; support.codexHost.chatgptAccountId() === lena.chatgptAccountId\n  // Codex ran on kai before; kai's login is the authority's now, lena's is Codex's own. A switch still under way is\n  // followed with watchCodexNativeHandoff(handoff.id, handoff.revision) until it is settled.\n  const back = await client.switchCodexNative(kai.accountId, kai.loginId);\n  ```\n- `stop()` closes the daemon, stops the fake Codex app-server and removes the directory with everything in it;\n  the process then has no handle of the authority left, and no fake Codex process runs.\n\nThe fake provider, the fake Codex and the plain encoding live in this entry alone; the package root never loads\nthem.\n\n## The one-time account import\n\nThe three `authority import` commands move the accounts that existed before the authority into it.\n\n`import inventory` reads this host and changes nothing: no authority record, no legacy file, no\ncredential. It lists every Codex stash directory, saved credential record and native Codex, Claude and\nOpenCode store with the authority account it resolves to, derived from the claims the stored token already\ncarries -- no provider is contacted. A malformed or unrecognised entry is reported rather than skipped, so\nan empty result is never mistaken for an empty store. The report carries no token, no token digest and no\nsource path; a source is named by a hash of its location and a digest of its bytes.\n\nEach source is classified by who refreshes its login **after** the import.\n\n- **adopt** -- a copy authswitch made for itself, and AGL's own records. Nothing else refreshes such a\n  copy, so the authority takes it over outright. It is verified by one real refresh, which rotates the\n  token: from that moment the legacy copy is dead. That is the point of no return for that account, and the\n  only fallback is one device sign-in.\n- **project** -- a native Codex, Claude or OpenCode store. The vendor tool keeps refreshing its own store,\n  so the authority registers the account, leaves the grant with its native owner and holds no copy of the\n  credential. It is verified by a provider read with the access token already in the store, which rotates\n  nothing. Two refreshers on one rotating refresh token is the failure this avoids.\n\nA verified Claude projection also adopts the native home it came from, so the daemon may serve Claude\nswitches for it. The receipt is what adopts it, and a home belongs to one login at a time: a second home\nfor a login another one already holds -- a `.credentials.json` copied to another `CLAUDE_CONFIG_DIR` --\nand a home whose active login has since moved are both refused with the importer's own code, so the\nsubmit is known to have decided, the ledger row stays `verified` and no home changed.\n\nA verified Codex projection adopts the host's Codex home the same way, in one commit with its login becoming\n`codex_native`, so the daemon may switch it (see \"The host's Codex home\"). A Codex home imported before 11.3.0 is\nadopted by submitting its source again: its row stays `complete`, and the bytes Codex has written since are proven\nwith the same provider read before the home is adopted.\n\n`import submit` takes the source id and the digest the owner read in the inventory. The daemon re-reads the\nsource itself and refuses if the digest changed, so approving one source can never import a different one;\nno credential crosses the socket for a source this package can read. It refuses while an authswitch watch or a\nnative harness process that owns the source is running. Codex's app-server is the one refresher the import\nrestarts itself: for a native Codex store or a saved OpenAI login -- the sources that app-server refreshes -- the\nsubmit stops it with `codex app-server daemon stop`, reads the source again and checks its digest once nothing\ncan refresh it, imports it, and starts the app-server again with `codex app-server daemon start`, also when the\nimport fails or refuses after the stop. Codex restarts; running Codex turns end. An app-server that was not\nrunning stays stopped. The start runs in its own transient scope of the user's systemd manager (see \"What a switch\nactually does\"), so the app-server outlives the authority's service. The result's `codexAppServer` says which\nhappened -- `not_running`, `restarted`, `restarted_unscoped` or `start_failed`, the last with the reason among its\n`problems` -- and `codexAppServerDetail` why it runs without a scope of its own (`unsupported_platform` or\n`user_manager_unavailable`) and which environment it got (`preserved`, or `allowlist` with the reason); both are\nabsent for every other source. A ","readmeFilename":""}