{"_id":"@aidex/ai-control","_rev":"8-2b66a54b4388f528371589fc7b3d067b","name":"@aidex/ai-control","dist-tags":{"latest":"1.2.0"},"versions":{"0.2.1-alpha":{"name":"@aidex/ai-control","version":"0.2.1-alpha","keywords":["ai","feature-flag","configuration","kill-switch"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/ai-control@0.2.1-alpha","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/ai-control#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"b657e84781119a7a02d8ae3b2d835ec9e1ddba1a","tarball":"https://registry.npmjs.org/@aidex/ai-control/-/ai-control-0.2.1-alpha.tgz","fileCount":18,"integrity":"sha512-wsWzRGJuQplTv2tRNAXyLokEJ3D5OKrj5+IxIO6KJrh9szstM9FC9XfJ+NHbgSu8tEeTGkN8sPA1U7ZgYv2+qw==","signatures":[{"sig":"MEQCIBH0elhacOn6qCCAw9jhYZv+6q6tqgPd/NkOXYfe8Rt2AiAYd8NeUmf3SF5QN8PrATtsXRxU6yC+b5arXcMQ25GpUA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36053},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.19.0","pnpm":">=9"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"deprecated":"Broken: built against a stale @aidex/core missing the AidexError export, throws on require/import. Use 0.2.2-alpha or later.","repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/ai-control"},"description":"Aidex AI Control — framework-agnostic global/per-feature AI enable-disable, enforced before any Provider call. Foundation for a future @aidex/admin.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/core":"0.2.1-alpha"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@aidex/providers":"0.2.1-alpha","@aidex/strategies":"0.2.1-alpha","@aidex/connections":"0.2.1-alpha"},"_npmOperationalInternal":{"tmp":"tmp/ai-control_0.2.1-alpha_1786119395250_0.6904731888963305","host":"s3://npm-registry-packages-npm-production"}},"0.2.2-alpha":{"name":"@aidex/ai-control","version":"0.2.2-alpha","keywords":["ai","feature-flag","configuration","kill-switch"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/ai-control@0.2.2-alpha","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/ai-control#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"508cc7d8a980fa457ba791158fb8a7d5e7e99d0b","tarball":"https://registry.npmjs.org/@aidex/ai-control/-/ai-control-0.2.2-alpha.tgz","fileCount":18,"integrity":"sha512-tAwLiFSUHcWps1k3FZzyGS5CIn31VsTrDbJuSXWF5c+flUaLTN/QxdXnOe9WVtNq0QFY+4LegnOA9JldQsK8LQ==","signatures":[{"sig":"MEUCIQCuif/JACSNETJ2Obf+zgreKSYnkkQFruwMfV3bT9QiXgIgdOs4S8iaZgrg4cNIcbEEF1ptQL+dHd9pAcFQaK90LnU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36053},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.19.0","pnpm":">=9"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/ai-control"},"description":"Aidex AI Control — framework-agnostic global/per-feature AI enable-disable, enforced before any Provider call. Foundation for a future @aidex/admin.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/core":"0.2.2-alpha"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@aidex/providers":"0.2.1-alpha","@aidex/strategies":"0.2.1-alpha","@aidex/connections":"0.2.2-alpha"},"_npmOperationalInternal":{"tmp":"tmp/ai-control_0.2.2-alpha_1786121026028_0.46679935040669607","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-alpha":{"name":"@aidex/ai-control","version":"0.3.0-alpha","keywords":["ai","feature-flag","configuration","kill-switch"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/ai-control@0.3.0-alpha","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/ai-control#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"b41d61ca31b9ab6672a4b011ca91fa09bb4d8742","tarball":"https://registry.npmjs.org/@aidex/ai-control/-/ai-control-0.3.0-alpha.tgz","fileCount":9,"integrity":"sha512-tepzhSmXHI5J0j6u2BopyvhMcFTO8szPK+YBAuh1ddrILn+chedelIoEmzYeq+RqIHLrsQJIMjlEG8KdfN4o0g==","signatures":[{"sig":"MEUCIG4IeSHsf8iduZXJ8GDrFJQWCHbi4Rgq8C0KJg9bM42+AiEAth22I56IvZqpvaeL99N8e7VtuXR6h6epDe09pvaUHnk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29135},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.19.0","pnpm":">=9"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/ai-control"},"description":"Aidex AI Control — framework-agnostic global/per-feature AI enable-disable, enforced before any Provider call. Foundation for a future @aidex/admin.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/core":"0.3.0-alpha"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@aidex/providers":"0.3.0-alpha","@aidex/strategies":"0.3.0-alpha","@aidex/connections":"0.3.0-alpha"},"_npmOperationalInternal":{"tmp":"tmp/ai-control_0.3.0-alpha_1786213594924_0.4910691924863042","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@aidex/ai-control","version":"1.0.0","keywords":["ai","feature-flag","configuration","kill-switch"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/ai-control@1.0.0","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/ai-control#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"890a8714f9b42b5868188709d91748b869470e34","tarball":"https://registry.npmjs.org/@aidex/ai-control/-/ai-control-1.0.0.tgz","fileCount":9,"integrity":"sha512-RykyzRyUm49RWoTGJVPZMPzBEqCvJun4YY+xgC6E4wQHKeaSyYIjpuT36lpKV+Q6+NdnO1dW4uQgGpvWXab7zg==","signatures":[{"sig":"MEUCIQCRfutc7wSrKspKuRXRN0JFJeiyvYjkBOz4b+ZM4fAm/wIgMteG5xn7iDmPpjrA9e1K5B0ifc2AV/qFdIf8vPiEcIE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29105},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.19.0","pnpm":">=9"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/ai-control"},"description":"Aidex AI Control — framework-agnostic global/per-feature AI enable-disable, enforced before any Provider call. Foundation for a future @aidex/admin.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/core":"1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@aidex/providers":"1.0.0","@aidex/strategies":"1.0.0","@aidex/connections":"1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-control_1.0.0_1786431564965_0.41280374486706095","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aidex/ai-control","version":"1.0.1","keywords":["ai","feature-flag","configuration","kill-switch"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/ai-control@1.0.1","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/ai-control#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"faa96273269f4e777377b4f56d18d1e9ed43bcaf","tarball":"https://registry.npmjs.org/@aidex/ai-control/-/ai-control-1.0.1.tgz","fileCount":9,"integrity":"sha512-wW2ubHB/w6GjlKxZgBB2Z8Gn/s9LUmbsvsaz8OlSN3xIW1x2wz265ApIUw3N0231TwdO8oG6z0NTWOgYHwLwrQ==","signatures":[{"sig":"MEUCIQDVtI8MtdcxHxyutzqTYCmCb2y1phbkyfcUyJr79BNCkQIgM5BE6+Diq8q6PT19+lzvxkxxcYm1xO67zoENCUcVQy4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29105},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.19.0","pnpm":">=9"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/ai-control"},"description":"Aidex AI Control — framework-agnostic global/per-feature AI enable-disable, enforced before any Provider call. Foundation for a future @aidex/admin.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/core":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@aidex/providers":"1.0.1","@aidex/strategies":"1.0.1","@aidex/connections":"1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/ai-control_1.0.1_1786432204003_0.6515808841020452","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aidex/ai-control","version":"1.1.0","keywords":["ai","feature-flag","configuration","kill-switch"],"author":{"name":"Sudheer Babu","email":"isudheerbabu.dev@gmail.com"},"license":"MIT","_id":"@aidex/ai-control@1.1.0","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/ai-control#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"a6c8f30663e2cf94ae98b766577623ddef41fd26","tarball":"https://registry.npmjs.org/@aidex/ai-control/-/ai-control-1.1.0.tgz","fileCount":22,"integrity":"sha512-y7hHsdISnMKGDVG39k6i8WzjxYaTp1RR8Pi1icqsq3u5gwZq6Pj/eeril121EgyMfhoWPUdiLoqBpszGhnWc1Q==","signatures":[{"sig":"MEYCIQDNNmNTYVKEqI3ETYGyBhbMlsGdrTHmaZF0MZGohqqmHgIhAPwz+pqvZEgFPho1YNO/pBPkirpYSOBrjzW4d4k4z0Nt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51580},"main":"./dist/index.cjs","type":"module","_from":"file:aidex-ai-control-1.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.19.0","pnpm":">=9"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"_resolved":"/tmp/6e56059adc4a7305a15465c02284f3d8/aidex-ai-control-1.1.0.tgz","_integrity":"sha512-y7hHsdISnMKGDVG39k6i8WzjxYaTp1RR8Pi1icqsq3u5gwZq6Pj/eeril121EgyMfhoWPUdiLoqBpszGhnWc1Q==","repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/ai-control"},"_npmVersion":"10.9.8","description":"Aidex AI Control — framework-agnostic global/per-feature AI enable-disable, enforced before any Provider call. Foundation for a future @aidex/admin.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@aidex/core":"1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@aidex/providers":"1.1.0","@aidex/strategies":"1.1.0","@aidex/connections":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-control_1.1.0_1787417527031_0.9069400206275202","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@aidex/ai-control","version":"1.2.0","description":"Aidex AI Control — framework-agnostic global/per-feature AI enable-disable, enforced before any Provider call. Foundation for a future @aidex/admin.","keywords":["ai","feature-flag","configuration","kill-switch"],"license":"MIT","author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","homepage":"https://github.com/getaidex/aidex/tree/main/packages/ai-control#readme","repository":{"type":"git","url":"git+https://github.com/getaidex/aidex.git","directory":"packages/ai-control"},"bugs":{"url":"https://github.com/getaidex/aidex/issues"},"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"sideEffects":false,"publishConfig":{"access":"public"},"dependencies":{"@aidex/core":"1.2.0"},"devDependencies":{"@aidex/connections":"1.2.0","@aidex/providers":"1.2.0","@aidex/strategies":"1.2.0"},"engines":{"node":">=20.19.0","pnpm":">=9"},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_nodeVersion":"24.13.0","_id":"@aidex/ai-control@1.2.0","dist":{"integrity":"sha512-rIuafEvUyCFaZ5W8aqFRDMSfR/+uDI9c2llsP6Kt2bAIxdpFg+2R6tga+NFpBihnp31lBKoT0Oo2yuWl6TvJMw==","shasum":"8895a8cf623a55598b327a5d562371e77d986547","tarball":"https://registry.npmjs.org/@aidex/ai-control/-/ai-control-1.2.0.tgz","fileCount":22,"unpackedSize":53312,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBRWPNFU8FA7aLoaP+yFEKC/fPfXr3ye+Or4BWVc1if8AiEA9VD0mUNs8H1tk5Rtvyrp9IwvTUHM/RSkTEJXwsdLXZY="}]},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"directories":{},"maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ai-control_1.2.0_1787491715059_0.7153891082946116"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-07T16:16:35.013Z","modified":"2026-08-23T13:28:35.329Z","0.2.1-alpha":"2026-08-07T16:16:35.383Z","0.2.2-alpha":"2026-08-07T16:43:46.165Z","0.3.0-alpha":"2026-08-08T18:26:35.100Z","1.0.0":"2026-08-11T06:59:25.090Z","1.0.1":"2026-08-11T07:10:04.142Z","1.1.0":"2026-08-22T16:52:07.173Z","1.2.0":"2026-08-23T13:28:35.198Z"},"bugs":{"url":"https://github.com/getaidex/aidex/issues"},"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","homepage":"https://github.com/getaidex/aidex/tree/main/packages/ai-control#readme","keywords":["ai","feature-flag","configuration","kill-switch"],"repository":{"type":"git","url":"git+https://github.com/getaidex/aidex.git","directory":"packages/ai-control"},"description":"Aidex AI Control — framework-agnostic global/per-feature AI enable-disable, enforced before any Provider call. Foundation for a future @aidex/admin.","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"readme":"# @aidex/ai-control\n\n## Installation\n\n```sh\npnpm add @aidex/ai-control @aidex/core\n```\n\n```sh\nnpm install @aidex/ai-control @aidex/core\n```\n\nFramework-agnostic global and per-feature AI enable/disable, enforced before\nany `Provider` is called. This is the foundation a future `@aidex/admin`\nadapter (React/Angular/Vue/etc.) will read from and write to — this package\nitself has no UI, no admin dashboard, and no knowledge of any specific\napplication's feature names.\n\n## Usage\n\n```ts\nimport { Aidex } from '@aidex/core';\nimport { AIFeatureControlPlugin, InMemoryAIFeatureControl } from '@aidex/ai-control';\n\nconst control = new InMemoryAIFeatureControl(); // enabled: true by default\n\nconst aidex = new Aidex({\n  provider: myProvider,\n  plugins: [new AIFeatureControlPlugin(control)],\n});\n\n// ...later, e.g. from an admin adapter:\ncontrol.setEnabled(false); // every subsequent aidex.execute() rejects with AIDisabledError\ncontrol.setFeatureEnabled('text-generation', false); // disable just one strategy/feature\ncontrol.getState(); // { enabled: false, features: { 'text-generation': false } } — safe to log/serialize\n```\n\n`AIFeatureControlPlugin` hooks into the existing `Plugin.beforeExecute` /\n`Lifecycle` extension point in `@aidex/core` — no kernel changes were\nrequired. When AI is disabled, `Aidex.execute()` throws `AIDisabledError`\n(carrying `executionId`) before it looks up or runs any `Strategy`, so no\n`Provider` is ever called and non-AI application code is entirely\nunaffected.\n\nThe feature id defaults to the invoked `Strategy`'s `name` (e.g.\n`'text-generation'`, `'structured-output'`) — no separate feature-naming\nsystem to keep in sync.\n\n## Persistence (optional)\n\n`InMemoryAIFeatureControl` is still fully synchronous and in-memory-only\nby default — persistence is opt-in, and every existing method behaves\nidentically whether or not it's configured:\n\n```ts\nimport { InMemoryAIFeatureControl, InMemoryFeatureControlStore } from '@aidex/ai-control';\n\nconst store = new InMemoryFeatureControlStore();\nconst control = new InMemoryAIFeatureControl({ store });\n\ncontrol.setFeatureEnabled('text-generation', false);\nawait control.persist(); // writes the current { enabled, features } state to the store\n\n// Elsewhere — a fresh instance sharing the same store:\nconst control2 = new InMemoryAIFeatureControl({ store });\nawait control2.load(); // hydrates in-memory state FROM the store\ncontrol2.isEnabled('text-generation'); // false\n```\n\n- **`load()`** hydrates state from the store, overwriting current\n  in-memory state entirely — including clearing any local feature\n  override the loaded state doesn't have. A no-op when no store is\n  configured.\n- **`persist()`** writes the current `getState()` snapshot to the store.\n  A no-op when no store is configured.\n- **Nothing is automatic.** `setEnabled()`/`setFeatureEnabled()`/\n  `clearFeatureOverride()` never touch the store themselves — an\n  application decides when to call `persist()`, and whether to call\n  `load()` at startup.\n- **`InMemoryFeatureControlStore` is process-local — it does not survive\n  a restart.** It defaults to the same `{ enabled: true, features: {} }`\n  state `InMemoryAIFeatureControl` itself defaults to, before anything is\n  saved. A concrete persistent implementation (Firestore, Redis, Postgres,\n  ...) is application code; this package does not ship one.\n\n## Design notes\n\n- **Global always wins.** A feature can be turned off while AI is globally\n  on; no feature-level override can turn AI back on while globally disabled.\n  One authoritative flag, not two.\n- **No secrets, ever.** This package never sees `Provider` or Connection\n  config — `getState()` is always safe to log or hand to an admin UI.\n- **Not a kill switch for the host application.** Only Aidex AI execution is\n  gated; everything else in the application keeps working normally.\n","readmeFilename":""}