{"_id":"@aion0/bastion-plugin-api","_rev":"4-8d17cbdda1f45194e08da2181b5cb6b1","name":"@aion0/bastion-plugin-api","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.1":{"name":"@aion0/bastion-plugin-api","version":"0.1.1","keywords":["bastion"],"author":{"name":"aion0"},"license":"ISC","_id":"@aion0/bastion-plugin-api@0.1.1","maintainers":[{"name":"aion0","email":"aiwatching2024@gmail.com"}],"homepage":"https://github.com/aiwatching/bastion-plugin-api#readme","bugs":{"url":"https://github.com/aiwatching/bastion-plugin-api/issues"},"dist":{"shasum":"488886756c86262b121185c1ec22ad63e780ebd8","tarball":"https://registry.npmjs.org/@aion0/bastion-plugin-api/-/bastion-plugin-api-0.1.1.tgz","fileCount":18,"integrity":"sha512-UX7HhdghLGnSImw1CjhgbM+pdfRwOcGexgTbLO2W1wTGaNhWDZaWDscQyNJCNUifV8Iu6p/X+3Ybz2gQG0K/DQ==","signatures":[{"sig":"MEUCIQDZpKEqG7I8ebobVmjipLUbWroizktRPUsUkmKd14tgqwIgboZhbyEHQu2Nh/7CsnkhyMswpy6hU6DAyGqz/pFBuGg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47569},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"80b49a60266a6deaf5c11231486e9e9ca53ab313","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","test:watch":"vitest","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"aion0","email":"aiwatching2024@gmail.com"},"repository":{"url":"git+https://github.com/aiwatching/bastion-plugin-api.git","type":"git"},"_npmVersion":"10.9.3","description":"Pro plugin pack for Bastion AI Gateway","directories":{"test":"tests"},"_nodeVersion":"22.20.0","dependencies":{"onnxruntime-node":"^1.23.0","@huggingface/tokenizers":"^0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.5","typescript":"^5.7.3","@types/node":"^22.13.4","@aion0/bastion-plugin-api":"file:../bastion/packages/bastion-plugin-api"},"_npmOperationalInternal":{"tmp":"tmp/bastion-plugin-api_0.1.1_1772871686173_0.4279962369062702","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@aion0/bastion-plugin-api","version":"0.1.2","keywords":["bastion"],"author":{"name":"aion0"},"license":"ISC","_id":"@aion0/bastion-plugin-api@0.1.2","maintainers":[{"name":"aion0","email":"aiwatching2024@gmail.com"}],"homepage":"https://github.com/aiwatching/bastion-plugin-api#readme","bugs":{"url":"https://github.com/aiwatching/bastion-plugin-api/issues"},"dist":{"shasum":"c9f2e63439f36b04848f09785795b764c279a600","tarball":"https://registry.npmjs.org/@aion0/bastion-plugin-api/-/bastion-plugin-api-0.1.2.tgz","fileCount":18,"integrity":"sha512-eNhSMaMoxtM9MpCZ6/DgHvThehGpyIcxTSNVsWOuwUJX55QV6a7/2Zjy38Lr9tgSIlvfFwuwnYuuZGKb5BZARA==","signatures":[{"sig":"MEYCIQDHHHZb/WyqZMlU6FCFG85H1ljv44y/2Byw59cQEHrbPAIhAJl7wsmMCkwr4VVvBLW7KBCYmGSCDHEZG4ReqEJxlEHS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47569},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"a2187afd4a9bc5c5391d14af887febd1d98e18b7","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","test:watch":"vitest","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"aion0","email":"aiwatching2024@gmail.com"},"repository":{"url":"git+https://github.com/aiwatching/bastion-plugin-api.git","type":"git"},"_npmVersion":"10.9.3","description":"Pro plugin pack for Bastion AI Gateway","directories":{"test":"tests"},"_nodeVersion":"22.20.0","dependencies":{"onnxruntime-node":"^1.23.0","@huggingface/tokenizers":"^0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.5","typescript":"^5.7.3","@types/node":"^22.13.4","@aion0/bastion-plugin-api":"file:../bastion/packages/bastion-plugin-api"},"_npmOperationalInternal":{"tmp":"tmp/bastion-plugin-api_0.1.2_1772871958082_0.9940640216788545","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@aion0/bastion-plugin-api","version":"0.1.3","keywords":["bastion"],"author":{"name":"aion0"},"license":"ISC","_id":"@aion0/bastion-plugin-api@0.1.3","maintainers":[{"name":"aion0","email":"aiwatching2024@gmail.com"}],"homepage":"https://github.com/aiwatching/bastion-plugin-api#readme","bugs":{"url":"https://github.com/aiwatching/bastion-plugin-api/issues"},"dist":{"shasum":"fe402ff4efbbe44f9218cb8e4c69c1510022abdd","tarball":"https://registry.npmjs.org/@aion0/bastion-plugin-api/-/bastion-plugin-api-0.1.3.tgz","fileCount":18,"integrity":"sha512-Vh1Kijw75WfJOR9/173Ddfm0aYVEPNI110UY0uayDro+aNwtiNFpPweWjGb+g6Q8QhbYC0E8mFblBetpBftwPA==","signatures":[{"sig":"MEYCIQC7ILq/qvRaDLeLthfbmPg3Gx9gIP4j+i5vP9AQMpFNiQIhANgx83+158FVFSlHVWdlLgTBFKbeDH1ZmxfAiVvXcCuv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47974},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"d13bb50f92c80a3b5745e5b2b0af206c6214bfa7","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","test:watch":"vitest","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"aion0","email":"aiwatching2024@gmail.com"},"repository":{"url":"git+https://github.com/aiwatching/bastion-plugin-api.git","type":"git"},"_npmVersion":"10.9.3","description":"Pro plugin pack for Bastion AI Gateway","directories":{"test":"tests"},"_nodeVersion":"22.20.0","dependencies":{"onnxruntime-node":"^1.23.0","@huggingface/tokenizers":"^0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.5","typescript":"^5.7.3","@types/node":"^22.13.4","@aion0/bastion-plugin-api":"file:../bastion/packages/bastion-plugin-api"},"_npmOperationalInternal":{"tmp":"tmp/bastion-plugin-api_0.1.3_1772873144831_0.7666998197280726","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@aion0/bastion-plugin-api","version":"0.1.4","description":"Pro plugin pack for Bastion AI Gateway","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc -p tsconfig.build.json","test":"vitest run","test:watch":"vitest","prepublishOnly":"npm run build && npm run test"},"dependencies":{"onnxruntime-node":"^1.23.0","@huggingface/tokenizers":"^0.1.2"},"devDependencies":{"@aion0/bastion-plugin-api":"file:../bastion/packages/bastion-plugin-api","@types/node":"^22.13.4","typescript":"^5.7.3","vitest":"^3.0.5"},"engines":{"node":">=20.0.0"},"publishConfig":{"access":"public"},"directories":{"test":"tests"},"repository":{"type":"git","url":"git+https://github.com/aiwatching/bastion-plugin-api.git"},"keywords":["bastion"],"author":{"name":"aion0"},"license":"ISC","bugs":{"url":"https://github.com/aiwatching/bastion-plugin-api/issues"},"homepage":"https://github.com/aiwatching/bastion-plugin-api#readme","_id":"@aion0/bastion-plugin-api@0.1.4","gitHead":"d13bb50f92c80a3b5745e5b2b0af206c6214bfa7","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-D9TN1jLQER2Ysi+W9iUF0yNFM1nhCtsPpf8eySvzTEhGnm/QfAvT9lqRtw0aa1LwEVChmFKq/CjlUDWUf9/r+A==","shasum":"c7d7e78258a198ca349794dcb68202fb026ed6a4","tarball":"https://registry.npmjs.org/@aion0/bastion-plugin-api/-/bastion-plugin-api-0.1.4.tgz","fileCount":18,"unpackedSize":48372,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC5DvrVVhjUnvHs0CVZLmsXLsOQ6bGn2ZUhpCVaqs1ueQIhANxAgyNXgRSjfGRGfvZZAtfHOGb5aaYRqfF8/9bU8isV"}]},"_npmUser":{"name":"aion0","email":"aiwatching2024@gmail.com"},"maintainers":[{"name":"aion0","email":"aiwatching2024@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bastion-plugin-api_0.1.4_1772873403214_0.8791434833098195"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-07T08:21:26.046Z","modified":"2026-03-07T08:50:03.465Z","0.1.1":"2026-03-07T08:21:26.325Z","0.1.2":"2026-03-07T08:25:58.223Z","0.1.3":"2026-03-07T08:45:44.998Z","0.1.4":"2026-03-07T08:50:03.360Z"},"bugs":{"url":"https://github.com/aiwatching/bastion-plugin-api/issues"},"author":{"name":"aion0"},"license":"ISC","homepage":"https://github.com/aiwatching/bastion-plugin-api#readme","keywords":["bastion"],"repository":{"type":"git","url":"git+https://github.com/aiwatching/bastion-plugin-api.git"},"description":"Pro plugin pack for Bastion AI Gateway","maintainers":[{"name":"aion0","email":"aiwatching2024@gmail.com"}],"readme":"# @aion0/bastion-plugin-api\n\nOptional plugin pack for [Bastion AI Gateway](https://github.com/aiwatching/bastion) — adds ML-based prompt injection detection and advanced security features.\n\n**Free to use. No license required.** This is an optional install that adds heavier dependencies (ONNX Runtime, ML models) to the core gateway.\n\n## Features\n\n### ML Prompt Injection Classifier\n\nLocal ONNX inference using [ProtectAI/deberta-v3-base-prompt-injection-v2](https://huggingface.co/protectai/deberta-v3-base-prompt-injection-v2). Zero cloud dependency — models run entirely on your machine.\n\n- Scans user messages (including tool_result content blocks) before they reach the LLM\n- Configurable threshold (default: 0.8) and action (`warn` / `block`)\n- Emits `pi:detected` events for Tool Guard escalation\n- Supports Anthropic and OpenAI message formats\n- Model files auto-downloaded from Hugging Face Hub on first start (~436 MB)\n\n### Planned\n\n- Content Extractor (PDF text extraction, image OCR)\n- PI + Tool Guard linkage\n\n## Installation\n\n### Via CLI (recommended)\n\n```bash\n# Install from bastion source directory (auto-detects sibling bastion-plugin-api)\nbastion plugins install\n\n# Or specify path explicitly\nbastion plugins install /path/to/bastion-plugin-api\n```\n\n### Via `install.sh`\n\n```bash\n# From the bastion source directory\n./install.sh -local -plugins\n```\n\n### Manual\n\n```bash\nmkdir -p ~/.bastion/app/plugins/bastion-plugin-api\ncp -r /path/to/bastion-plugin-api/* ~/.bastion/app/plugins/bastion-plugin-api/\ncd ~/.bastion/app/plugins/bastion-plugin-api\nnpm install && npm run build\n```\n\nThen add to `~/.bastion/config.yaml`:\n\n```yaml\nplugins:\n  external:\n    - package: /Users/YOU/.bastion/app/plugins/bastion-plugin-api\n      enabled: true\n```\n\n## Uninstall\n\n```bash\n# CLI (prompts to also remove downloaded models)\nbastion plugins uninstall\n\n# Or remove everything including models\nbastion plugins uninstall --all\n```\n\nYou can also uninstall from the Dashboard → Settings → Optional Features.\n\n## Configuration\n\nPlugin config in `~/.bastion/config.yaml`:\n\n```yaml\nplugins:\n  external:\n    - package: /path/to/bastion-plugin-api\n      enabled: true\n      config:\n        piClassifier:\n          modelId: protectai/deberta-v3-base-prompt-injection-v2\n          threshold: 0.8\n          action: warn        # warn | block\n          scanSystem: false   # also scan system messages\n```\n\n## Architecture\n\n```\nsrc/\n├── index.ts                  # Plugin registration (no license gating)\n├── classifier/\n│   ├── model-manager.ts      # HF Hub model download + caching\n│   └── onnx-provider.ts      # ONNX Runtime inference\n└── plugins/\n    └── pi-classifier.ts      # Prompt injection detection plugin\n```\n\n### Model Storage\n\nModels are cached at `~/.bastion/models/{model-id}/` with files:\n- `model.onnx` — ONNX model (~400 MB for DeBERTa v3 base)\n- `tokenizer.json` — HuggingFace tokenizer\n- `config.json` — Model configuration (label mapping)\n\n### Plugin Lifecycle\n\n1. `register(config)` → creates plugins unconditionally\n2. `onInit()` → downloads model if needed → initializes ONNX session\n3. `onRequest()` → extracts user texts → classifies → returns warn/block result\n4. `onDestroy()` → releases ONNX session\n\n## Development\n\n```bash\nnpm run build\nnpm test\n```\n\n## Requirements\n\n- Node.js >= 20.0.0\n- Bastion AI Gateway >= 0.1.10\n- `@aion0/bastion-plugin-api` >= 0.1.2\n\n## License\n\nMIT\n","readmeFilename":"README.md"}