@mima-ai/eslint-plugin-mima
v0.1.6
Published
ESLint rules for detecting unattested AI SDK calls in TypeScript — developer feedback, not evidence generation
Downloads
181
Maintainers
Readme
@mima-ai/eslint-plugin-mima
ESLint rules for detecting unattested AI SDK calls in TypeScript and JavaScript.
Catches AI library calls that are not wrapped with mima.wrap() at lint time — in your editor and in CI, before they reach production.
Install
npm install --save-dev @mima-ai/eslint-plugin-mima
> **Migrating from `eslint-plugin-mima`?** Replace the package name and update plugin references from `"mima"` to `"@mima-ai/mima"` in `.eslintrc`, or keep using the alias `mima` in flat config.Configure
ESLint flat config (ESLint 8+)
// eslint.config.js
import mima from '@mima-ai/eslint-plugin-mima';
export default [
{
plugins: { mima },
rules: {
'mima/no-unattested-ai-call': 'error',
},
},
];Legacy .eslintrc
{
"plugins": ["@mima-ai/mima"],
"rules": {
"@mima-ai/mima/no-unattested-ai-call": "error"
}
}Or use the built-in configs:
// eslint.config.js
import mima from '@mima-ai/eslint-plugin-mima';
export default [
mima.configs.recommended, // warn
// or:
mima.configs.strict, // error
];What it flags
// Error — unattested OpenAI call
const response = await openai.chat.completions.create({ ... });
// Error — unattested Anthropic call
const msg = await anthropic.messages.create({ ... });// OK — wrapped with mima
const generate = mima.wrap('generate', async (prompt: string) => {
return await openai.chat.completions.create({ ... });
});AI libraries covered
| Library | Methods flagged |
|---|---|
| openai | chat.completions.create, completions.create |
| @anthropic-ai/sdk | messages.create, messages.stream |
| @google/generative-ai | generateContent, generateContentStream |
| @azure/openai | getChatCompletions, streamChatCompletions |
| ai (Vercel AI SDK) | generateText, streamText, generateObject, streamObject |
| langchain / @langchain/core | invoke, stream, batch |
| cohere-ai | chat, generate, embed |
| @mistralai/mistralai | chat, chatStream |
CI integration
# .github/workflows/lint.yml
- name: Lint
run: npx eslint src --ext .ts,.tsxNon-zero exit on violations blocks the merge.
Inline disable
For intentional unattested calls (health-check pings, etc.):
// eslint-disable-next-line mima/no-unattested-ai-call
const ping = await openai.models.list();Relationship to other Mima tools
| Layer | When | What it catches |
|---|---|---|
| ESLint plugin | Lint time / editor | Statically detectable unattested calls |
| mima scan | CLI / CI | All AI call sites via AST, any library |
| mima.wrap() | Runtime | Forces wrapping at the call site |
The ESLint plugin is the earliest signal. Use all three for defence-in-depth.
