{"_id":"@bensigo/plato-config","name":"@bensigo/plato-config","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@bensigo/plato-config","version":"0.1.0","type":"module","publishConfig":{"access":"public"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","default":"./dist/src/index.js"}},"main":"./dist/src/index.js","types":"./dist/src/index.d.ts","devDependencies":{"@types/node":"^25.6.0","oxlint":"^1.60.0","vitest":"^4.1.4"},"scripts":{"build":"tsc --project tsconfig.json","dev":"echo 'config dev not wired yet'","lint":"oxlint .","test":"vitest run","typecheck":"tsc --project tsconfig.json --noEmit"},"_id":"@bensigo/plato-config@0.1.0","description":"`@bensigo/plato-config` owns local user configuration and auth material for Plato.","_integrity":"sha512-IPGn6HMTIBC6qktVSG1dKzgiecRC4hqiZVzKIXuAnf/R//YMcM/TmQ2WplzVNygeStMixOI3jCG+7n3WcLK18A==","_resolved":"/private/var/folders/8r/cpk3gflx5cv3hys1x7nvkhwc0000gn/T/8fd774ef450f2407bf7c0a46d58cc2b6/bensigo-plato-config-0.1.0.tgz","_from":"file:bensigo-plato-config-0.1.0.tgz","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-IPGn6HMTIBC6qktVSG1dKzgiecRC4hqiZVzKIXuAnf/R//YMcM/TmQ2WplzVNygeStMixOI3jCG+7n3WcLK18A==","shasum":"c8d61ac5f40abb58cbf0cac37d2fe10a79a6533d","tarball":"https://registry.npmjs.org/@bensigo/plato-config/-/plato-config-0.1.0.tgz","fileCount":4,"unpackedSize":13953,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCKop1fA4DusvXf/OBI/9WduQSsy8aQUrzYn3PqBoJafQIhAODxZ87KcfqfQXZGX3D6Rry4Cok6g9mOWdrz9/M+OT8v"}]},"_npmUser":{"name":"bensigo","email":"egweybensigo@gmail.com"},"directories":{},"maintainers":[{"name":"bensigo","email":"egweybensigo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/plato-config_0.1.0_1777302522895_0.3548595073430272"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-27T15:08:42.759Z","0.1.0":"2026-04-27T15:08:43.033Z","modified":"2026-04-27T15:08:43.266Z"},"maintainers":[{"name":"bensigo","email":"egweybensigo@gmail.com"}],"description":"`@bensigo/plato-config` owns local user configuration and auth material for Plato.","readme":"# Plato Config\n\n`@bensigo/plato-config` owns local user configuration and auth material for Plato.\n\nMilestone 21 starts with Codex auth because Plato cannot run a real end-to-end worker flow until the runtime knows how the user wants to authenticate. The first supported provider is an OpenAI API key. ChatGPT OAuth is also represented as a first-class provider, using Codex app-server managed login for ChatGPT subscription usage.\n\n## What This Service Owns\n\n- local config file reads and writes\n- local secret storage fallback for development and MVP testing\n- redacted auth status for operator surfaces\n- resolving Codex auth for execution services\n\n## Defaults\n\n- config: `~/.plato/config.json`\n- local secret fallback: `~/.plato/secrets.json`\n\nThe local secret file is an MVP fallback, not the long-term storage strategy. A future pass should add an OS keychain-backed `SecretStore` implementation.\n\n## Codex Auth\n\nUse the service API directly or the runner CLI:\n\n```sh\ncodex-runner config status\nprintf '%s' \"$OPENAI_API_KEY\" | codex-runner config set-openai-key --api-key-stdin\n# or: codex-runner config set-openai-key --api-key-env OPENAI_API_KEY\ncodex-runner config auth-chatgpt\ncodex-runner config auth-chatgpt --device-code\ncodex-runner config clear-openai-key\n```\n\n`codex-runner` reads this config when opening its operator runtime and passes the configured OpenAI API key into the Codex SDK. For ChatGPT OAuth, Plato records only safe account metadata and the fact that the token source is Codex app-server. Codex owns the browser/device-code OAuth flow, persists refresh tokens in its own auth store, and refreshes them for subscription-backed runs.\n","readmeFilename":"README.md","_rev":"1-a1675e743bbe8f6f943af924cd581a41"}