{"_id":"@cage-ai/minamo","_rev":"2-2d516b572caf7189bb27c4a1811dc82c","name":"@cage-ai/minamo","dist-tags":{"latest":"4.2.0"},"versions":{"4.1.0":{"name":"@cage-ai/minamo","version":"4.1.0","keywords":["ai-security","prompt-injection","llm-security","owasp","sanitize","guardrails","content-filter","jailbreak-detection","output-sanitization","pii-detection"],"author":{"name":"Eyegle Inc.","email":"info@eyegle-design.co.jp"},"license":"MIT","_id":"@cage-ai/minamo@4.1.0","maintainers":[{"name":"yoshii.t","email":"yoshii.t@eyegle-design.co.jp"}],"homepage":"https://minamo.cage-ai.jp","bugs":{"url":"https://github.com/eyegle/minamo/issues"},"bin":{"minamo":"dist/cli.js"},"dist":{"shasum":"0627810b0e212c4d93ae5ca2a022c5b8eac2165b","tarball":"https://registry.npmjs.org/@cage-ai/minamo/-/minamo-4.1.0.tgz","fileCount":21,"integrity":"sha512-C6jr2YglkAWp7tYktendK9cdJqornoEDsIV/kGEFVht+RJqW+dNwhAhYru0b90ZnWEJ/YSWiscLESM+/qpPBNA==","signatures":[{"sig":"MEUCIAcRWFCKQE4jo6onlUsO8aTqLLCkoobMZL73TsBOGpO8AiEAjc6KMnlF4qrY7kxQces0wdIrlSpnRxLr8/GVyWg+XT8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":445239},"main":"dist/sdk.js","types":"dist/sdk.d.ts","exports":{".":{"types":"./dist/sdk.d.ts","import":"./dist/sdk.js","require":"./dist/sdk.js"},"./middleware":{"types":"./dist/middleware.d.ts","import":"./dist/middleware.js","require":"./dist/middleware.js"}},"gitHead":"5ab006b740c95e80e832d3aabd3d6e22fd3e67f0","scripts":{"dev":"npx tsx src/server.ts","test":"vitest run","audit":"npm audit --audit-level=high","bench":"npx tsx src/benchmark.ts","build":"tsc -p tsconfig.build.json","check":"npx tsx src/cli.ts check","start":"npx tsx src/server.ts","stats":"npx tsx src/cli.ts stats","prepublishOnly":"npm run build"},"_npmUser":{"name":"yoshii.t","email":"yoshii.t@eyegle-design.co.jp"},"repository":{"url":"git+https://github.com/eyegle/minamo.git","type":"git"},"_npmVersion":"10.9.3","description":"AI Security Toolkit — Prompt injection detection, output sanitization, and OWASP LLM Top 10 coverage for LLM applications","directories":{},"_nodeVersion":"22.18.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","stripe":"^17.0.0","vitest":"^4.1.1","typescript":"^5.9.3","@types/node":"^25.5.0","better-sqlite3":"^12.8.0","@anthropic-ai/sdk":"^0.80.0","@types/better-sqlite3":"^7.6.13","@aws-sdk/client-bedrock-runtime":"^3.800.0"},"_npmOperationalInternal":{"tmp":"tmp/minamo_4.1.0_1776322874789_0.9684596782941897","host":"s3://npm-registry-packages-npm-production"}},"4.2.0":{"name":"@cage-ai/minamo","version":"4.2.0","description":"AI Security Toolkit — Prompt injection detection, output sanitization, and OWASP LLM Top 10 coverage for LLM applications","main":"dist/sdk.js","types":"dist/sdk.d.ts","exports":{".":{"import":"./dist/sdk.js","require":"./dist/sdk.js","types":"./dist/sdk.d.ts"},"./middleware":{"import":"./dist/middleware.js","require":"./dist/middleware.js","types":"./dist/middleware.d.ts"}},"bin":{"minamo":"dist/cli.js"},"repository":{"type":"git","url":"git+https://github.com/eyegle/minamo.git"},"homepage":"https://minamo.cage-ai.jp","scripts":{"build":"tsc -p tsconfig.build.json","prepublishOnly":"npm run build","start":"npx tsx src/server.ts","test":"vitest run","dev":"npx tsx src/server.ts","stats":"npx tsx src/cli.ts stats","check":"npx tsx src/cli.ts check","bench":"npx tsx src/benchmark.ts","audit":"npm audit --audit-level=high"},"keywords":["ai-security","prompt-injection","llm-security","owasp","sanitize","guardrails","content-filter","jailbreak-detection","output-sanitization","pii-detection"],"author":{"name":"Eyegle Inc.","email":"info@eyegle-design.co.jp"},"license":"MIT","dependencies":{},"devDependencies":{"@anthropic-ai/sdk":"^0.80.0","@aws-sdk/client-bedrock-runtime":"^3.800.0","@types/better-sqlite3":"^7.6.13","@types/node":"^25.5.0","better-sqlite3":"^12.8.0","stripe":"^17.0.0","tsx":"^4.21.0","typescript":"^5.9.3","vitest":"^4.1.1"},"_id":"@cage-ai/minamo@4.2.0","gitHead":"f0d0bd857c0fe8161600b0ffe813f14c2554abbd","bugs":{"url":"https://github.com/eyegle/minamo/issues"},"_nodeVersion":"22.18.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-RxISQGuWlp/UE6oFPFlxPvO53cI2d+9d+4ONNE3eBhJseFYwfgzsZh5/0M45gicqKnQwhhTwu6PujwUv+2JmVg==","shasum":"756753c945c9a041581bb24522eab37bfa67d56e","tarball":"https://registry.npmjs.org/@cage-ai/minamo/-/minamo-4.2.0.tgz","fileCount":21,"unpackedSize":449123,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD2by1u9SJ0Vehk1rzWuXyAnlXjXUnGyNh2u2IE6jyN8AIgd5dOUICOncP8WyGk8K2hCzu5nFiiuUSzYQblkfsekno="}]},"_npmUser":{"name":"yoshii.t","email":"yoshii.t@eyegle-design.co.jp"},"directories":{},"maintainers":[{"name":"yoshii.t","email":"yoshii.t@eyegle-design.co.jp"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/minamo_4.2.0_1776326156280_0.3735026834971651"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-16T07:01:14.663Z","modified":"2026-04-16T07:55:56.565Z","4.1.0":"2026-04-16T07:01:14.928Z","4.2.0":"2026-04-16T07:55:56.426Z"},"bugs":{"url":"https://github.com/eyegle/minamo/issues"},"author":{"name":"Eyegle Inc.","email":"info@eyegle-design.co.jp"},"license":"MIT","homepage":"https://minamo.cage-ai.jp","keywords":["ai-security","prompt-injection","llm-security","owasp","sanitize","guardrails","content-filter","jailbreak-detection","output-sanitization","pii-detection"],"repository":{"type":"git","url":"git+https://github.com/eyegle/minamo.git"},"description":"AI Security Toolkit — Prompt injection detection, output sanitization, and OWASP LLM Top 10 coverage for LLM applications","maintainers":[{"name":"yoshii.t","email":"yoshii.t@eyegle-design.co.jp"}],"readme":"```\n  __  __ _\n |  \\/  (_)_ __   __ _ _ __ ___   ___\n | |\\/| | | '_ \\ / _` | '_ ` _ \\ / _ \\\n | |  | | | | | | (_| | | | | | | (_) |\n |_|  |_|_|_| |_|\\__,_|_| |_| |_|\\___/\n\n  AI Security Toolkit\n```\n\n[![npm version](https://img.shields.io/npm/v/minamo.svg)](https://www.npmjs.com/package/minamo)\n[![license](https://img.shields.io/npm/l/minamo.svg)](./LICENSE)\n[![OWASP LLM Top 10](https://img.shields.io/badge/OWASP%20LLM%20Top%2010-100%25%20covered-green.svg)](https://owasp.org/www-project-top-10-for-large-language-model-applications/)\n\n**1,102 patterns. 34 languages. OWASP LLM Top 10 — 100% coverage.**\n\nMinamo is a production-ready AI security toolkit that detects prompt injection attacks,\nsanitizes LLM outputs, and shields your application from the full OWASP LLM Top 10 threat\nsurface — with zero ML dependencies.\n\n---\n\n## Quick Start\n\n```bash\nnpm install minamo\n```\n\n```ts\nimport { Minamo } from 'minamo';\n\nconst minamo = new Minamo('mk_your_api_key');\nconst result = await minamo.sanitize(userInput);\nif (!result.is_clean) throw new Error('Blocked: ' + result.categories.join(', '));\n```\n\nThat's it. Three lines to protect your LLM app.\n\n---\n\n## Usage\n\n### Input Sanitization\n\nDetect and block malicious user input before it reaches your LLM.\n\n```ts\nimport { Minamo } from 'minamo';\n\nconst minamo = new Minamo('mk_your_api_key');\n\nconst result = await minamo.sanitize('Ignore all previous instructions and...');\n\nconsole.log(result.is_clean);       // false\nconsole.log(result.risk_score);     // 9 (0–10 scale)\nconsole.log(result.categories);     // ['prompt_injection', 'jailbreak']\nconsole.log(result.recommended_action); // 'block'\n```\n\n### Output Sanitization\n\nPrevent your LLM from leaking sensitive data or producing harmful content.\n\n```ts\nconst llm_response = await callYourLLM(prompt);\n\nconst result = await minamo.sanitize_output(llm_response);\nif (!result.is_clean) {\n  // Handle sensitive output (PII leak, malicious URL, etc.)\n}\n```\n\n### Guard Function\n\nThrow an error automatically when input exceeds the risk threshold.\n\n```ts\ntry {\n  await minamo.guard(userInput, { max_risk: 3 });\n  // safe — proceed to LLM\n  const response = await callYourLLM(userInput);\n} catch (e) {\n  if (e instanceof MinamoBlockedError) {\n    return res.status(400).json({ error: 'blocked', score: e.result.risk_score });\n  }\n}\n```\n\n### Batch Processing\n\nCheck multiple texts in one request.\n\n```ts\nconst batch = await minamo.batch([\n  { id: 'msg-1', text: userMessage1 },\n  { id: 'msg-2', text: userMessage2 },\n]);\n\nconsole.log(batch.summary.flagged); // number of flagged items\nbatch.results.forEach(r => {\n  if (!r.is_clean) console.log(`${r.id}: risk ${r.risk_score}`);\n});\n```\n\n### Express Middleware (1-line setup)\n\nDrop Minamo into any Express app in a single line.\n\n```ts\nimport express from 'express';\nimport { minamo_middleware } from 'minamo/middleware';\n\nconst app = express();\napp.use(express.json());\napp.use(minamo_middleware({ api_key: 'mk_your_api_key' }));\n```\n\nOptions:\n\n```ts\napp.use(minamo_middleware({\n  api_key:         'mk_your_api_key',\n  block_threshold: 7,          // block if risk_score >= 7 (default)\n  log_only:        false,      // set true to log without blocking\n  paths:           ['/api/*'], // only check these paths (glob)\n  exclude_paths:   ['/health'],\n  sanitize_output: true,       // also sanitize responses\n  on_detect: (result, req) => {\n    logger.warn('Threat detected', { score: result.risk_score, path: req.path });\n  },\n}));\n```\n\n### Hono Middleware\n\n```ts\nimport { Hono } from 'hono';\nimport { minamo_hono } from 'minamo/middleware';\n\nconst app = new Hono();\napp.use(minamo_hono({ api_key: 'mk_your_api_key' }));\n```\n\n### CLI\n\n```bash\n# First-time setup (API key + telemetry opt-in)\nnpx minamo init\n\n# Check a single text\nnpx minamo check \"Ignore all previous instructions\"\n\n# Scan a directory for vulnerable prompt templates\nnpx minamo scan ./prompts/\n\n# Run a test suite against your API endpoint\nnpx minamo test --endpoint https://api.yourapp.com/chat\n\n# Export pattern database as JSON\nnpx minamo export --output patterns.json\n```\n\n### Offline Mode\n\nNo API key needed — run pattern matching locally.\n\n```ts\nconst minamo = new Minamo(undefined, { offline: true });\nconst result = await minamo.sanitize(userInput);\n```\n\nOffline mode uses the bundled 1,102-pattern database. No network calls, no rate limits.\n\n---\n\n## Plans\n\n| Feature | Free | Pro | Enterprise |\n|---|:---:|:---:|:---:|\n| Pattern database | 1,102 patterns | 1,102 patterns | 1,102 patterns |\n| Languages | 34 | 34 | 34 |\n| OWASP LLM Top 10 | 100% | 100% | 100% |\n| API requests/day | 1,000 | 50,000 | Unlimited |\n| Output sanitization | - | Yes | Yes |\n| AI-assisted judgment | - | Yes | Yes |\n| Batch processing | - | Yes | Yes |\n| Offline mode | Yes | Yes | Yes |\n| SLA | - | 99.9% | 99.99% |\n| Support | Community | Email | Dedicated |\n\n[View pricing](https://minamo.cage-ai.jp#pricing)\n\n---\n\n## Telemetry\n\nMinamo collects anonymous usage data to improve pattern quality. You control what is sent.\n\n| Level | What is sent |\n|---|---|\n| `off` | Nothing |\n| `stats` (default) | Request count, detection rate, latency — no content |\n| `full` | Stats + sanitized text snippets for pattern training |\n\nConfigure at init time:\n\n```ts\nconst minamo = new Minamo('mk_your_api_key', {\n  telemetry: { level: 'off' }  // disable completely\n});\n```\n\nOr via `.minamo.json` (created by `npx minamo init`).\n\nYour prompt content is **never** sent on `stats` mode. We do not sell data.\n\n---\n\n## OWASP LLM Top 10 Coverage\n\n| # | Threat | Status |\n|---|---|:---:|\n| LLM01 | Prompt Injection | Covered |\n| LLM02 | Insecure Output Handling | Covered |\n| LLM03 | Training Data Poisoning | Covered |\n| LLM04 | Model Denial of Service | Covered |\n| LLM05 | Supply Chain Vulnerabilities | Covered |\n| LLM06 | Sensitive Information Disclosure | Covered |\n| LLM07 | Insecure Plugin Design | Covered |\n| LLM08 | Excessive Agency | Covered |\n| LLM09 | Overreliance | Covered |\n| LLM10 | Model Theft | Covered |\n\n---\n\n## API Reference\n\nFull API documentation: [https://minamo.cage-ai.jp/docs](https://minamo.cage-ai.jp/docs)\n\n### `minamo.sanitize(text, options?)`\n\nSanitize user input before sending to an LLM.\n\n- `text: string` — The text to check\n- `options.source?: string` — Tag the source for logging (e.g. `'chatbot'`)\n- `options.min_severity?: number` — Only report patterns above this severity (0–10)\n\nReturns `SanitizeResult`.\n\n### `minamo.sanitize_output(text, options?)`\n\nSanitize LLM output before returning to users.\n\nReturns `SanitizeResult`.\n\n### `minamo.guard(text, options?)`\n\nThrow `MinamoBlockedError` if risk exceeds threshold.\n\n- `options.max_risk?: number` — block if `risk_score > max_risk` (default: 0)\n- `options.throw_message?: string` — custom error message\n\n```ts\nimport { Minamo, MinamoBlockedError } from 'minamo';\n\nawait minamo.guard(userInput, { max_risk: 3 });\n```\n\n### `minamo.batch(items)`\n\nCheck multiple texts. Each item: `{ id?: string, text: string }`.\n\nReturns `BatchResult`.\n\n### `minamo.metrics()`\n\nReturns SDK-level metrics: request count, success rate, avg latency, cache hit rate.\n\n---\n\n## Event Hooks\n\n```ts\nminamo.on('detect', (result, text) => {\n  console.log('Threat detected:', result.risk_score, result.categories);\n});\n\nminamo.on('error', (err, endpoint) => {\n  console.error('Request failed:', err.message, endpoint);\n});\n\nminamo.on('retry', (attempt, delay_ms, endpoint) => {\n  console.log(`Retrying ${endpoint} (attempt ${attempt}, delay ${delay_ms}ms)`);\n});\n```\n\n---\n\n## Contributing\n\nIssues and PRs welcome. See [CONTRIBUTING.md](./CONTRIBUTING.md).\n\nPattern contributions (new attack patterns, language support) are especially appreciated.\n\n---\n\n## License\n\n[MIT](./LICENSE) — Copyright (c) 2026 Eyegle Inc.\n","readmeFilename":"README.md"}